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

操做系統的本質

操做系統本質上也是一個進程,它與其餘用戶進程共享CPU。與普通進程不一樣的是,它具備硬件的全部訪問權限。而用戶進程默認對硬件是沒有任何訪問權限的,它只能經過系統調用,委託操做系統來完成這些操做。spa

問題

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

協做方式:等待系統調用

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

如下兩種狀況出現時,CPU會恢復操做系統進程:進程

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

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

缺點:exception

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

2.若是用戶進程沒有進行I/O操做,進入死循環,則操做系統永遠沒法恢復控制,惟一的解決方法就是重啓硬件

非協做方式:定時器中斷

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

若是不能讓在CPU內部執行的程序讓出CPU,那能不能從外部侵入,打斷CPU的執行呢?

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

可是打斷歸打斷,怎麼恢復操做系統呢?

和上面同樣,CPU在開機的時候會被告知一個interrup handler,當中斷出現的時候,它的處理方式就是恢復操做系統進程。那這個時候OS的程序就又能夠繼續運行了。

準備工做

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

注:時間片的大小通常是定時器中斷時間的倍數。因此當某次因中斷恢復OS的時候,恰好能夠執行上下文切換。

相關文章
相關標籤/搜索