Kernel

無限循環VS調度器

  • January 8, 2021

從彙程式序的角度來看,當我們編寫的程式碼只是跳回幾個命令時,不跳轉到調度程序可能使用的任何控制函式,unix如何中斷這樣的程式碼?

我假設它正在使用計時器和中斷。那麼問題來了,我們能否在硬體上無中斷地實現 unix 系統,並且仍然在有限時間內解決無限循環程式碼?

或者換句話說,我是否正確假設unix可以處理像’while(true){}‘這樣的程式碼的唯一方法是通過帶有中斷的硬體計時器?

如果是這樣,在沒有硬體定時器+中斷的硬體上實現類 Unix 系統的最低要求是什麼?

您討論的是非搶占式調度和搶占式調度之間的區別。

非搶占式(也稱為協作式)稍微簡單一些(不需要計時器),並且線上程通信時不需要鎖。例子Apple Mac OS9 及更早的版本,我想早期的MS-Windows,很多嵌入式系統,以及微執行緒。

所以是的,需要一個計時器。但是,對於您關於最簡單硬體的問題。Unix 需要一個 MMU,這比定時器複雜得多。(實際上有些類 Unix 系統沒有 MMU,而且在很多情況下它們的工作方式相同(區別是:沒有安全性,沒有交換/分頁)

另一種允許任務切換的方法while true。就是使用程式碼注入。編譯器或載入器將注入程式碼以協同產生。這可能很難做到:對於裝載機來說,可能沒有足夠的資訊來知道哪裡需要。它可能會打破原子性的假設。給定正確的語言和編譯器,它可能會做得很好。但是我不知道任何例子。

引用自:https://unix.stackexchange.com/questions/628148