1. 程式人生 > >【雜談】操作系統如何有效地掌控CPU

【雜談】操作系統如何有效地掌控CPU

必須 技術 本質 準備工作 handler 死循環 就是 協作 決定

操作系統的本質

操作系統本質上也是一個進程,它與其他用戶進程共享CPU。與普通進程不同的是,它具有硬件的所有訪問權限。而用戶進程默認對硬件是沒有任何訪問權限的,它只能通過系統調用,委托操作系統來完成這些操作。

問題

當操作系統在創建完一個進程後,會將CPU的控制權交給這個新創建的進程。上下文切換,大家應該都知道。操作系統要做的就是停止一個進程,然後再啟動另一個進程。很簡單是吧,那麽問題來了,操作系統的程序都不在運行了,它已經把CPU的使用權給其他進程了,怎麽對這個進程進行控制呢?

協作方式:等待系統調用

在過去的某些系統中曾經就使用過這種方式,在這種情況下,操作系統信任用戶進程可以正確地執行,不會出幺蛾子。

以下兩種情況出現時,CPU會恢復操作系統進程:

技術分享圖片

註:trap handler和exception handler是在電腦開機的時候告知CPU的

操作系統就恢復了對CPU的控制,在這個時候它就可以決定要不要進行上下文切換。

缺點:

1.只能被動地等待用戶進程進行System Call或者出錯,操作系統才能恢復對CPU的控制

2.如果用戶進程沒有進行I/O操作,進入死循環,則操作系統永遠無法恢復控制,唯一的解決方法就是重啟

非協作方式:定時器中斷

以上方式有明顯的缺點,為了讓計算機提供穩定的服務,操作系統必須把對用戶進程進行把控。而要想把控進程則必須保持對CPU的控制權。

如果不能讓在CPU內部執行的程序讓出CPU,那能不能從外部侵入呢?

可以,早期的操作系統開發人員就想到用定時器中斷的方式來處理,定時器是單獨的一個硬件設備,它可以獨立運行。每隔一段時間就給CPU一個中斷信號,打斷它的執行。

但是打斷歸打斷,怎麽恢復操作系統呢?

和上面一樣,CPU在開機的時候會被告知一個interrup handler,當中斷出現的時候,它的處理方式就是恢復操作系統進程。

準備工作

綜上,針對這個定時器中斷的方案,操作系統在電腦開機的時候,要做這幾件事,一個是開啟定時器,另一個是告知CPU,讓它知道當定時器中斷產生的時候該執行什麽代碼。

註:時間片的大小一般是定時器中斷時間的倍數。所以當某次因中斷恢復OS的時候,剛好可以執行上下文切換。

【雜談】操作系統如何有效地掌控CPU