深入Linux內核架構-進程管理和調度(一)

現代操作系統都能夠同時運行若干進程。如果系統只有一個處理器,那麼在給定時刻只有一個程序可以運行。在多處理器系統上,可以真正並行運行的進程數目,取決於物理CPU的數目。

內核和處理器建立了多任務的錯覺,即可以並行做幾種操作,這是通過以很短的間隔在系統運行的應用程序之間不停切換而做到的。由於切換間隔如此之短,使得用戶無法注意到短時間內的停滯,在感觀上覺得計算機能夠同時做幾件事情。

這種系統管理方式引起了幾個問題,內核必須解決這些問題,其中最重要的問題如下所示。

1、應用程序A的錯誤不能傳播到應用程序B。由於Linux是一個多用戶系統,它也必須確保程序不能讀取或修改其他程序的內存,否則很容易訪問其他用戶的私有數據。

2、CPU時間必須在各種應用程序之間儘可能公平地共享,其中一些程序可能比其他程序更重要。第一個需求——存儲保護。在本章中,主要講解內核共享CPU時間的方法,以及如何在進程之間切換。這裏有兩個任務,其執行是相對獨立的。

3、內核必須決定爲各個進程分配多長時間,何時切換到下一個進程。這引出了哪個進程是下一個的問題。此類決策平臺無關。

4、在內核從進程A切換到進程B時,必須確保進程B的執行環境與上一次撤銷其處理器資源時完全相同。例如,處理器寄存器的內容和虛擬地址空間的結構必須與此前相同。

這裏的後一項工作與處理器極度(程度極深的)相關。不能只用C語言實現,還需要彙編代碼的幫助。

這兩個任務是稱之爲調度器的內核子系統的職責。CPU時間如

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章