什么是内核定时器系统,它与调度器有什么关系?
What is the kernel timer system and how is it related to the scheduler?
我很难理解这一点。
- 调度程序如何知道某个时间段已经过去?
- 它是否为此使用某种系统调用或中断?
- 使用常量 HZ 而不是秒有什么意义?
- 系统计时器与调度程序有什么关系?
How does the scheduler know that a certain period of time has passed?
调度程序参考系统时钟。
Does it use some sort of syscall or interrupt for that?
由于系统时钟经常更新,调度程序只读取其当前值就足够了。调度程序已经处于内核模式,因此没有系统调用接口参与读取时钟。
是的,有触发 ISR 的定时器中断,这是一个中断服务例程,它读取硬件寄存器并提前系统时钟的当前值。
What's the point of using the constant HZ instead of seconds?
曾几何时,调用 ISR 的成本很高,并且在每次调用时它都会执行一定量的簿记,例如查找调度程序量程过期和触发 TCP RTO 重传计时器。硬件的灵活性有限,只能以固定的时间间隔调用 ISR,例如如果 HZ 为 100,则每 10 毫秒一次。更高的 HZ 值使 ISR 更有可能 运行 并发现无事可做,自上一个 运行 以来没有发生任何事件,在这种情况下,ISR 表示开销,从前台用户任务中窃取的周期。较低的 HZ 值会影响调度延迟,导致网络和交互响应时间缓慢。对于实际的硬件系统,HZ 调整权衡往往会接近 100 或 1000。报告系统时钟时间的 API 只能以滴答为单位进行报告,其中每次 ISR 调用都会将时钟提前一个滴答。因此,调用者需要知道 HZ 的值才能将滴答单位转换为 S.I。单位。现代系统在单独调度的 TCP 内核线程上执行网络任务,并且可能支持放弃许多这些过时假设的 tickless 内核。
What does the system timer have to do with the scheduler?
当系统计时器触发中断时,调度程序 运行s。
抢占式调度程序的本质是它可以暂停 "spinning" 用户模式代码,例如while (1) {}
,并操纵 运行 队列,即使在单核系统上也是如此。
此外,当进程自愿放弃其时间片时,调度程序 运行s,例如当发出系统调用或发生页面错误时。
我很难理解这一点。
- 调度程序如何知道某个时间段已经过去?
- 它是否为此使用某种系统调用或中断?
- 使用常量 HZ 而不是秒有什么意义?
- 系统计时器与调度程序有什么关系?
How does the scheduler know that a certain period of time has passed?
调度程序参考系统时钟。
Does it use some sort of syscall or interrupt for that?
由于系统时钟经常更新,调度程序只读取其当前值就足够了。调度程序已经处于内核模式,因此没有系统调用接口参与读取时钟。
是的,有触发 ISR 的定时器中断,这是一个中断服务例程,它读取硬件寄存器并提前系统时钟的当前值。
What's the point of using the constant HZ instead of seconds?
曾几何时,调用 ISR 的成本很高,并且在每次调用时它都会执行一定量的簿记,例如查找调度程序量程过期和触发 TCP RTO 重传计时器。硬件的灵活性有限,只能以固定的时间间隔调用 ISR,例如如果 HZ 为 100,则每 10 毫秒一次。更高的 HZ 值使 ISR 更有可能 运行 并发现无事可做,自上一个 运行 以来没有发生任何事件,在这种情况下,ISR 表示开销,从前台用户任务中窃取的周期。较低的 HZ 值会影响调度延迟,导致网络和交互响应时间缓慢。对于实际的硬件系统,HZ 调整权衡往往会接近 100 或 1000。报告系统时钟时间的 API 只能以滴答为单位进行报告,其中每次 ISR 调用都会将时钟提前一个滴答。因此,调用者需要知道 HZ 的值才能将滴答单位转换为 S.I。单位。现代系统在单独调度的 TCP 内核线程上执行网络任务,并且可能支持放弃许多这些过时假设的 tickless 内核。
What does the system timer have to do with the scheduler?
当系统计时器触发中断时,调度程序 运行s。
抢占式调度程序的本质是它可以暂停 "spinning" 用户模式代码,例如while (1) {}
,并操纵 运行 队列,即使在单核系统上也是如此。
此外,当进程自愿放弃其时间片时,调度程序 运行s,例如当发出系统调用或发生页面错误时。