什么是内核定时器系统以及它与调度程序有什么关系?

时间:2017-11-14 20:13:27

标签: linux-kernel x86 scheduler interrupt

我很难理解这一点。

  • 调度程序如何知道某段时间已经过去了?
  • 它是否使用某种系统调用或中断?
  • 使用常量HZ代替秒是什么意思?
  • 系统计时器与调度程序有什么关系?

1 个答案:

答案 0 :(得分:3)

  

调度程序如何知道某段时间已经过去了?

调度程序参考系统时钟。

  

它是否使用某种系统调用或中断?

由于系统时钟频繁更新,因此调度程序只需读取其当前值就足够了。调度程序已处于内核模式,因此读取时钟不涉及系统调用接口。

是的,有定时器中断触发ISR,一个中断服务程序,它读取硬件寄存器并提升系统时钟的当前值。

  

使用常数HZ代替秒的意义是什么?

曾几何时,调用ISR的成本很高,并且在每次调用时都会执行一定量的簿记,例如查找调度程序量程过期并触发TCP RTO重新传输计时器。硬件具有有限的灵活性,并且只能以固定的间隔调用ISR,例如,如果HZ为100,则每隔10ms。更高的HZ值使得ISR更有可能运行并且发现无事可做,自上次运行以来没有发生任何事件,在这种情况下,ISR代表开销,从前台用户窃取的周期任务。较低的HZ值会影响调度延迟,导致网络缓慢和交互响应时间。对于实际的硬件系统,HZ调整权衡倾向于接近100或1000。报告系统时钟时间的API只能以滴答为单位进行,其中每次ISR调用都会将时钟提前一个滴答。因此,呼叫者需要知道HZ的值才能从tick单位转换为S.I.单位。现代系统在单独调度的TCP内核线程上执行网络任务,并且可能支持无丢弃内核,这些内核丢弃了许多这些过时的假设。

  

系统计时器与调度程序有什么关系?

调度程序在系统计时器触发中断时运行。 先发制人的调度程序的本质是它可以暂停"旋转"用户模式代码,例如while (1) {},并操纵运行队列,即使在单核系统上也是如此。

此外,调度程序在进程自愿放弃其时间片时运行,例如,发出系统调用或发生页面错误时。