三種調度模式
調度 | 內容 | 隊列 | 頻率 |
---|---|---|---|
高級調度(作業調度、長程調度JCB) | 外存輸入井,分配必要資源、建立進程(內存與輔存之間) | 后備隊列 | 低 |
中級調度(中程調度 PCB) | 外存->內存 | 就緒隊列,阻塞隊列 | 中 |
低級調度(進程調度、短程調度PCB) | 內存->占用處理機 | 掛起隊列、就緒隊列 | 高 |
作業調度
- 從外存上處於后備狀態的作業中挑選一個獲多個作業,給他們分配內存、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分給首進程,執行一個時間片,用完之后,有一個計時器發出時鍾中斷請求,調度程序便據此停止該進程的執行,將其送到就緒隊列末尾。
- 主要適用於分時系統
多級反饋隊列調度算法
- 多個就緒隊列,按隊列給優先級。1級隊列優先級最高。
- 優先級越高的隊列內部的進程分配的時間片就越短。例如,i+1的時間片會比i大一倍。
- 新進程進入內存,首先放入第一級隊列末尾,按FCFS等待。
- 在i隊列執行了一次時間片,但是還沒執行完,就放到(i+1)隊的末尾。
- 第n隊列退化為時間片輪轉
- 當高優先級的隊列里面沒有進程了,才會將CPU分給低優先級的隊列。
- 是可搶占式的。低優先級隊列Z中的P進程正在運行,此時新進程N進入高優先級隊列A,那么N將搶占P的CPU,並將P放到Z末尾。
批處理系統、分時系統和實時系統中,各采用哪幾種進程(作業)調度算法?
批處理系統常用調度算法:
- 先來先服務:FCFS
- 最短作業優先
- 最短剩余時間優先
- 響應比最高者優先
分時系統調度算法:
- 輪轉調度
- 優先級調度
- 多級隊列調度
- 彩票調度
實時系統調度算法:
- 單比率調度
- 限期調度
- 最少裕度法
參考
- 2020王道操作系統考研復習指南
- 牛客操作系統面經
- https://blog.csdn.net/qq_35642036/article/details/82809812