Kernel
核心調度程序如何知道時間片已經過去?
在我之前的問題中,核心調度程序如何知道如何搶占程序?我得到了關於搶占如何發生的答案。
現在我想知道,核心調度程序如何知道時間片已經過去?我閱讀了對我有意義的硬體定時器解決方案,但後來我讀到大多數目前的作業系統(例如 Windows、Linux 等)不使用硬體定時器,而是使用軟體定時器。
一旦程序佔用了它的時間片(例如,它沒有先佔自己),軟體定時器如何用於搶占程序。似乎需要一些硬體定時器?
似乎需要一些硬體計時器?
是的,核心依靠硬體定期生成中斷。在 PC 上,這在歷史上是8253/8254 可程式間隔計時器,或其仿真,然後是本地 APIC 計時器,然後是HPET。
目前的 Linux 核心可以建構為在可能的情況下執行“無滴答”:核心將編寫計時器以僅在必要時觸發,如果給定的 CPU 正在執行單個程序,那很可能是“從不”。在大多數情況下,會使用動態滴答,因此核心會根據其要求將計時器設置為以不同的間隔觸發——更少的中斷意味著更少的喚醒,這意味著空閒 CPU 可以在低功耗模式下保持更長的時間,這節省能源。