如何理解內核搶佔和用戶進程搶佔,他們的區別是什麼?


內核搶佔:當進程位於內核空間時,有一個更高優先順序的任務出現時,如果當前內核允許搶佔,則可以將當前任務掛起,執行優先順序更高的進程。內核搶佔對實時性有幫助。

用戶搶佔:內核從系統調用或中斷處理程序即將返回用戶空間的時候,如果need resched標誌被設置,會導致schedule,此時就會發生用戶搶佔。


作用:

打斷用戶程序,執行內核程序。

區別

用戶進程搶佔:只能在用戶進程主動返回內核空間的時候(比如調用系統函數),搶佔。

內核搶佔:cpu時鐘每隔一定時間發出一次中斷,每次中斷都會詢問內核是否要搶佔。如果內核不搶佔,就繼續執行用戶進程,如果搶佔,就陷入內核。

示例:

老的Mac OS (不是OSX)就是用戶進程搶佔。

Linux是內核搶佔。

哪個更好?

內核搶佔更好,因為用戶程序可能故意不進行系統調用,一直佔用CPU時間。或者程序有個死循環的bug,系統就會被卡死。

那為什麼還會有用戶進程搶佔?

因為當年硬體不支持。內核搶佔的基礎是硬體要主動詢問內核,我給你,你要嗎?這需要CPU每隔一段時間就發出一次詢問。老式的CPU木有這個功能。


推薦閱讀:

linux 下進程間的同步機制有哪些?
殭屍進程和僵死進程有什麼區別?
Linux/Windows在多CPU時控制CPU使用率時表現為什麼不同?
你有可能買一台 Chromebook 么?
深度學習工具caffe在windows上的性能表現真的沒有在Linux上好嗎?

TAG:Linux | Linux內核 | 操作系統內核 | 進程 |