Linux內核學習012——進程調度(一)

echa攻城獅 發佈 2020-02-27T15:33:03+00:00

進程是程序運行態的表現形式,而確保進程有效工作的是一個內核子系統——調度程序。進程調度可以發生在四種環境下:當一個進程從運行狀態切換到等待狀態當一個進程從運行狀態切換到就緒狀態當一個進程從等待狀態切換到就緒狀態當一個進程終止時若調度只能發生在1、4時,稱為非搶占式調度,否則為搶占



進程是程序運行態的表現形式,而確保進程有效工作的是一個內核子系統——調度程序。調度程序負責決定將哪個進程投入運行,何時運行以及運行多長時間。進程調度程序可以視為可運行態進程之間分配有限處理器時間資源的內核子系統。調度程序是多任務作業系統的基礎,只有通過調度程序的合理調度,系統資源才能最大限度發揮作用。

多任務

多任務作業系統是能同時並發地加交互執行多個進程的作業系統。無論是單處理器或者多處理器上,多任務作業系統都能使多個進程處於堵塞或者睡眠狀態。處於這種狀態的進程,並未真正運行,而是在等待某些事件發生(比如:鍵盤輸入、網絡數據、文件I/O等)。

進程調度可以發生在四種環境下:

  1. 當一個進程從運行狀態切換到等待狀態
  2. 當一個進程從運行狀態切換到就緒狀態
  3. 當一個進程從等待狀態切換到就緒狀態
  4. 當一個進程終止時

若調度只能發生在1、4時,稱為非搶占式調度,否則為搶占式調度。Linux支持搶占式調度,由調度程序來決定何時停止一個進程的運行,以便其他進程能夠得到執行機會。這個強制的掛起動作稱為搶占。進程每次運行都被分配了一個固定的時間段,稱為進程的時間片——即分配給每個可運行進程的處理器時間段。有效管理時間片能夠使得調度程序從全局角度做出決定,並且可以避免陷入死循環的進程獨占整個系統資源。現代作業系統對程序運行採用了動態時間片計算的方式,並且引入了可配置的計算策略。

在非搶占式調度的情況下,除非進程主動停止,否則會一直運行。進程主動掛起自己的操作稱為讓步。但是該機制存在很多缺點:調度程序無法規定每個進程的運行時間,以及陷入死循環的進程會導致系統崩潰。

關鍵字: