如何理解內核搶佔和用戶進程搶佔,他們的區別是什麼?
01-07
內核搶佔:當進程位於內核空間時,有一個更高優先順序的任務出現時,如果當前內核允許搶佔,則可以將當前任務掛起,執行優先順序更高的進程。內核搶佔對實時性有幫助。用戶搶佔:內核從系統調用或中斷處理程序即將返回用戶空間的時候,如果need resched標誌被設置,會導致schedule,此時就會發生用戶搶佔。
作用:
打斷用戶程序,執行內核程序。區別
用戶進程搶佔:只能在用戶進程主動返回內核空間的時候(比如調用系統函數),搶佔。內核搶佔:cpu時鐘每隔一定時間發出一次中斷,每次中斷都會詢問內核是否要搶佔。如果內核不搶佔,就繼續執行用戶進程,如果搶佔,就陷入內核。
示例:
老的Mac OS (不是OSX)就是用戶進程搶佔。Linux是內核搶佔。哪個更好?
內核搶佔更好,因為用戶程序可能故意不進行系統調用,一直佔用CPU時間。或者程序有個死循環的bug,系統就會被卡死。
那為什麼還會有用戶進程搶佔?因為當年硬體不支持。內核搶佔的基礎是硬體要主動詢問內核,我給你,你要嗎?這需要CPU每隔一段時間就發出一次詢問。老式的CPU木有這個功能。推薦閱讀:
※linux 下進程間的同步機制有哪些?
※殭屍進程和僵死進程有什麼區別?
※Linux/Windows在多CPU時控制CPU使用率時表現為什麼不同?
※你有可能買一台 Chromebook 么?
※深度學習工具caffe在windows上的性能表現真的沒有在Linux上好嗎?