2011-03-02 41 views
3

什麼是自願先發制人?我只知道這是一個計劃中的概念。什麼是自願先發制人?

+1

http://www.springerlink.com/content/p6011h66m7088163/ – 2011-03-02 23:48:59

回答

3

這取決於操作系統。


在某些RTOS,自願搶佔意味着正在運行的進程聲明它是可以被搶佔的點(其中否則將運行到完成)。想到這種變體的另一種方式是產生在協同程序中的。這與內核確定搶佔的大多數桌面操作系統形成鮮明對比。請記住,一些RTOS不具有「用戶模式」的概念。


在Linux中(至少),「自願搶佔」是名不副實的

傳統(無被迫搶佔),當用戶進程進行系統調用(在內核模式下),它會阻塞直到完成。只有用戶模式代碼可以被搶佔。

搶佔式內核使內核代碼本身可以被搶佔。這聽起來多餘,但值得注意的是,我們的意思是內核是可搶佔的,而不是「內核支持搶佔」。強制/非自願搶佔意味着即使在爲系統調用提供服務時,對於高優先級用戶進程的中斷也可以「強制」內核進行上下文切換,以便它現在可以運行(從技術上講,它不是真正的上下文切換,但它具有相同的影響)。這減少了用戶進程「看到」硬件狀態變化的延遲。

自願搶佔是內核定期檢查是否應該在「執行內核事務時」重新安排進程的地方。也就是說,它不是隻在預佔點調度/重新調度用戶進程,而是在處理諸如I/O之類的事情時定期執行它。因此,通常高優先級用戶進程可能仍然需要等待低優先級進程完成其片,高級進程現在可能會「提早」運行,因爲內核正在更頻繁地檢查它是否要運行。這減少了用戶進程從掛起狀態轉換到運行狀態的延遲(以整個系統吞吐量爲代價)。

相關問題