在我之前的问题中内核调度程序如何知道如何抢占进程?我得到了关于抢占如何发生的答案。
现在我想知道,内核调度程序如何知道时间片已经过去了?我阅读了对我来说有意义的硬件计时器解决方案,但后来我了解到大多数当前操作系统(例如 Windows、Linux 等)都这样做不是使用硬件定时器,而不是软件定时器。
一旦进程占用了它的时间片(例如,它没有抢占自己),如何使用软件计时器来抢占进程。似乎需要一些硬件计时器?
答案1
似乎需要一些硬件定时器?
是的,内核依靠硬件定期生成中断。在 PC 上,这在历史上是8253/8254 可编程间隔定时器,或其仿真,则本地APIC定时器,那么高温PET。
当前的 Linux 内核可以构建为在可能的情况下“无滴答”运行:内核将对计时器进行编程,使其仅在必要时触发,如果给定的 CPU 正在运行单个进程,则很可能“从不”运行。在大多数情况下,使用动态滴答,因此内核根据其要求将计时器设置为以不同的时间间隔触发 - 更少的中断意味着更少的唤醒,这意味着空闲 CPU 可以更长时间地保持在低功耗模式,这节省能源。