操作系統中的進程調度


三種調度模式

調度 內容 隊列 頻率
高級調度(作業調度、長程調度JCB) 外存輸入井,分配必要資源、建立進程(內存與輔存之間) 后備隊列
中級調度(中程調度 PCB) 外存->內存 就緒隊列,阻塞隊列
低級調度(進程調度、短程調度PCB) 內存->占用處理機 掛起隊列、就緒隊列

image-20210306134430248

作業調度

  • 外存上處於后備狀態的作業中挑選一個獲多個作業,給他們分配內存、IO設備等必要資源,並建立相應進程,使得她們獲得競爭處理機的權利。
  • 內存與輔存之間的調度
  • 每個作業只調度一次,調出一次。
  • 多道批處理中大多配有作業調度
  • 即從后備隊列中選進程放進就緒隊列

內存調度

  • 提高內存利用率和系統吞吐率(並不是必須的,不是必須要通過內存調度)
  • 掛起態就緒態之間轉換。
  • 暫時不能運行的掛起(放掛起隊列),具備運行條件且稍有空閑的時候,就外存上的進程重新調到內存,修改位就緒態,掛在就緒隊列

掛起態

  • 暫時不能運行的進程調至外存等待

進程調度

  • 就緒隊列中選取一個進程,將處理機分給他
  • 操作系統中最基本的一種調度,不可或缺
  • 就緒態運行態之間轉換

FCFS

  • 最簡單
  • 可用於作業調度進程調度
  • 作業調度:后備隊列中選最先進入的1個or幾個,分配內存等資源,創建資源,進入就緒隊列
  • 進程調度:就緒隊列中選最先進入的1個,分配CPU,投入運行,該進程一直運行到完成or發生某件事而阻塞后才放棄(非搶占式)

特點

  • 非搶占式算法(不可剝奪算法)
  • 對長作業有利,對短作業不利
  • 利於CPU繁忙型(長作業),不利於IO繁忙型(短)
  • 不能作為分時or實時系統算法

SJ(P)F

  • Shortest Job (Process) First
  • SJF:作業調度。最短作業優先在后備隊列中被選擇。
  • SPF:進程調度。最短進程優先在就緒隊列中被選擇。
  • 王道上面和一些博客上好像都默認這個是非搶占式的。它們可能將搶占式的叫做最短剩余作業時間優先,之類的。
    • OS課上,直接把這個分成搶占式SPF和非搶占式SPF

特點

  • 可能對長作業造成飢餓
  • 未考慮緊迫程度
  • 根據提供的估計時間,可能並不准確,不能保證SJ(P)F

優先級調度算法(FPF)

  • 其實FCFS、SJF、SPF,這些哪些不是優先級調度算法呢?只不過優先級不同罷了。而這里的FPF側重講的是緊迫程度,優先級為緊迫程度。
  • 也是即可用於作業調度進程調度
  • 可分成剝奪式優先級調度算法 and 非剝奪式優先級調度數算法
  • 也可分成靜態優先級 (在創建進程時確定)and 動態優先級

容易出現優先級倒置現象

  • 優先級反轉:低優先級任務Z有一個資源R,高優先級任務A需要資源R,A想要R但是缺乏資源,處於阻塞狀態,等待Z釋放R,可是Z分配到的CPU時間少,此時在高低優先級之間優先級的任務就可以獲得很長時間的CPU時間,比A和Z都多。
  • 如果A是忙等而不是阻塞等待,那可能A永遠無法獲得資源。Z永遠分不到CPU,Z永遠不會釋放R,A永遠拿不到R,永遠等不到下一步。(這算是死鎖嗎)

優先級倒置解決方案

  • 設置優先級上限。給臨界區一個高優先級,進入臨界區的進程都會獲得這個高優先級
  • 優先級繼承。當一個高優先級進程等待一個低優先級的資源時,低優先級進程會短暫獲得高優先級進程的優先級別。釋放資源后,回歸原來優先級。
  • 臨界區禁止中斷。通過禁止中斷來保護臨界區,采用此種策略的系統只有兩種優先級:可搶占優先級和中斷禁止優先級。前者為一般進程運行時的優先級,后者為運行於臨界區的優先級。

高響應比優先調度算法

  • 主要用於作業調度,是對FCFS和SJF的一種平衡
  • 同時考慮了每個作業的等待時間估計的運行時間
  • \(R_p = \frac{等待時間+要求服務時間}{要求服務時間} = \frac{相應時間}{要求服務時間}\)
  • 克服飢餓,兼顧長作業
  • 調度前得計算響應比,會增加系統開銷

時間片輪轉法

  • 進程調度
  • 按照FCFS來排隊,但是時間片一樣,CPU分給首進程,執行一個時間片,用完之后,有一個計時器發出時鍾中斷請求,調度程序便據此停止該進程的執行,將其送到就緒隊列末尾。
  • 主要適用於分時系統

多級反饋隊列調度算法

  • image-20210306154615158
  • 多個就緒隊列,按隊列給優先級。1級隊列優先級最高。
  • 優先級越高的隊列內部的進程分配的時間片就越短。例如,i+1的時間片會比i大一倍。
  • 新進程進入內存,首先放入第一級隊列末尾,按FCFS等待。
  • 在i隊列執行了一次時間片,但是還沒執行完,就放到(i+1)隊的末尾。
  • 第n隊列退化為時間片輪轉
  • 當高優先級的隊列里面沒有進程了,才會將CPU分給低優先級的隊列。
  • 可搶占式的。低優先級隊列Z中的P進程正在運行,此時新進程N進入高優先級隊列A,那么N將搶占P的CPU,並將P放到Z末尾

批處理系統、分時系統和實時系統中,各采用哪幾種進程(作業)調度算法?

批處理系統常用調度算法:

  • 先來先服務:FCFS
  • 最短作業優先
  • 最短剩余時間優先
  • 響應比最高者優先

分時系統調度算法:

  • 輪轉調度
  • 優先級調度
  • 多級隊列調度
  • 彩票調度

實時系統調度算法:

  • 單比率調度
  • 限期調度
  • 最少裕度法

參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM