我很难理解这一点。
答案 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) {}
,并操纵运行队列,即使在单核系统上也是如此。
此外,调度程序在进程自愿放弃其时间片时运行,例如,发出系统调用或发生页面错误时。