在我之前的问题内核调度程序如何知道如何抢占进程?中,我得到了一个关于先发制人是如何发生的答案。
现在我想知道,内核调度程序是如何知道时隙已经过去的?我阅读了硬件定时器解决方案,这对我来说是有意义的,但随后我读到了大多数当前的操作系统(如Windows、Linux等)。不要使用硬件计时器,而是使用软件计时器。
如何使用软件定时器来抢先一个过程,一旦它占用了它的时间(例如,它没有先发制人)。似乎需要一些硬件计时器吗?
发布于 2018-07-23 09:12:56
似乎需要一些硬件计时器吗?
是的,内核依赖于硬件来定期生成中断。在个人电脑上,这是历史上的8253/8254可编程间隔定时器,或者它的模仿,然后是本地APIC定时器,然后是HPET。
可以构建当前的Linux内核,以便在可能的情况下运行“无痒”:内核将只在必要时将计时器编程为只触发,如果给定的CPU正在运行单个进程,则很可能“永远不会”。在大多数情况下,动态时钟是被使用的,因此内核根据其需求以不同的时间间隔设置定时器--较少的中断意味着较少的唤醒,这意味着空闲CPU可以在低功耗模式下保持较长的时间,从而节省能源。
https://unix.stackexchange.com/questions/457831
复制相似问题