Linux kernel 什么是内核计时器系统,它与调度器的关系如何?

Linux kernel 什么是内核计时器系统,它与调度器的关系如何?,linux-kernel,x86,scheduler,interrupt,Linux Kernel,X86,Scheduler,Interrupt,我很难理解这一点 调度程序如何知道某个时间段已经过去 它是否为此使用某种系统调用或中断 用常数代替秒有什么意义 系统计时器与调度程序有什么关系 调度程序如何知道某个时间段已经过去 调度器参考系统时钟 它是否为此使用某种系统调用或中断 由于系统时钟经常更新,调度程序只需读取其当前值即可。调度程序已处于内核模式,因此读取时钟时不涉及系统调用接口 是的,存在触发ISR的定时器中断,ISR是一种中断服务例程,它读取硬件寄存器并提升系统时钟的当前值 用恒频代替秒有什么意义 曾几何时,调用ISR的成本很

我很难理解这一点

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

调度器参考系统时钟

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

由于系统时钟经常更新,调度程序只需读取其当前值即可。调度程序已处于内核模式,因此读取时钟时不涉及系统调用接口

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

用恒频代替秒有什么意义

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

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

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


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

我建议您可以阅读Robert Love的Linux内核开发第11章(计时器和时间管理)@Varun:这是最新的吗?但这可能是个好建议。这个问题似乎太宽泛了。你也许可以对每一个项目给出简短的答案,但前提是你假设了一系列的先验知识,并且没有真正回答时间和日程安排如何工作的总体问题。您是否了解一般的先发制人多任务?如果没有,请阅读您最喜欢的操作系统教科书。相关:(特别是)在现代x86Linux上,“系统时钟”是
rdtsc
+一些指令来扩展它。所以是的,它变化非常快;当连续读取两次时,不可能从中获得相同的值。(在这种情况下,现代意味着在过去8年左右的时间里,如Nehalem,其TSC以固定速度运行,不考虑涡轮/省电(
constant\u TSC
),并且在核心时钟停止时不会停止(
nonstop\u TSC
).Core 2可能丢失了
nonstop\u tsc
,这使得它不是一个有用的挂钟时间,因此Linux回到了HPET)