操作系统:第二章 进程管理2 - 处理机调度
本文已收錄至 Github(MD-Notes),若博客中有圖片打不開,可以來我的 Github 倉庫:https://github.com/HanquanHq/MD-Notes,涵蓋了互聯網大廠面試必問的知識點,講解透徹,長期更新中,歡迎一起學習探討。
面試必會系列專欄:https://blog.csdn.net/sinat_42483341/category_10300357.html
操作系統系列專欄:https://blog.csdn.net/sinat_42483341/category_10519484.html
第二章 進程管理 - 處理機調度
目錄
- 第二章 進程管理 - 處理機調度
- 調度的三個層次
- 高級調度(作業調度)
- 中級調度(內存調度)
- 低級調度(進程調度/處理機調度)頻率最高
- 進程的七狀態模型
- 五狀態模型 -> 七狀態模型
- 進程調度的時機
- 1、當前運行的進程主動放棄處理機
- 2、當前運行的進程被動放棄處理機
- 補充:不能進行進程調度與切換的情況
- 進程調度的方式
- 非搶占式
- 搶占方式
- 調度算法的評價指標
- 調度算法
- 1、先來先服務 FIFS(FirstCome First Serve)
- 2、短作業優先(SJF, Shortest Job First)
- 3、高響應比優先(HRRN, Highest Response Ratio Next)
- 以下三種算法適合用于交互式系統,更注重系統的響應時間、公平性、平衡性等指標。
- 4、時間片輪轉(RR, Round-Robin)
- 5、優先級調度算法
- 6、多級反饋隊列調度算法(UNIX使用)
調度的三個層次
高級調度(作業調度)
作業:一個具體的任務
用戶向系統提交一個作業 ≈ 用戶讓操作系統啟動一個程序(來處理一個具體的任務)
簡化理解:好幾個程序需要啟動,到底先啟動哪個
按一定的原則從外存的作業后備隊列中挑選一個作業調入內存,并創建進程。每個作業只調入一次,調出一次。作業調入時會建立PCB,調出時才撤銷PCB。
中級調度(內存調度)
內存不夠時,將某些進程的數據調出到外存。等內存空閑 / 進程需要運行時,再重新調入內存。
暫時調到外存等待的進程為掛起狀態。被掛起的進程PCB會被組織成掛起隊列
按照某種策略決定將哪個處于掛起狀態的進程重新調入內存。一個進程可能會被多次調出、調入內存,因此中級調度發生的頻率要比高級調度更高。
低級調度(進程調度/處理機調度)頻率最高
按照某種策略從就緒隊列中選取一個進程,將處理機分配給它。
進程調度是操作系統中最基本的一種調度,在一般的操作系統中都必須配置進程調度。進程調度的頻率很高,一般幾十毫秒一次。
進程的七狀態模型
暫時調到外存等待的進程狀態為掛起狀態(掛起態,suspend),掛起態又可以進一步細分為 就緒掛起、阻塞掛起 兩種狀態
五狀態模型 -> 七狀態模型
進程調度的時機
1、當前運行的進程主動放棄處理機
- 進程正常終止
- 運行過程中發生異常而終止
- 進程主動請求阻塞(如等待I/O)
2、當前運行的進程被動放棄處理機
- 分給進程的時間片用完
- 有更緊急的事需要處理(如I/O中斷)
- 有更高優先級的進程進入就緒隊列
補充:不能進行進程調度與切換的情況
進程調度的方式
非搶占式
只允許進程主動放棄處理機。在運行過程中即便有更緊迫的任務到達,當前進程依然會繼續使用處理機,直到該進程終止或主動要求進入阻塞態。
搶占方式
當一個進程正在處理機上執行時,如果有更重要的進程需要使用處理機,則立即暫停正在執行的進程,將處理機分配給更重要的那個進程。
調度算法的評價指標
由于早期的CPU造價極其昂貴,因此人們會希望讓CPU盡可能多地工作
CPU利用率:指CPU “忙碌”的時間占總時間的比例。
- 利用率 = 忙碌的時間 / 總時間
系統吞吐量:單位時間內完成作業的數量
- 系統吞吐量 = 總共完成了多少道作業 / 總共花了多少時間
作業周轉時間:從作業被提交給系統開始,到作業完成為止的這段時間間隔
它包括四個部分:作業在外存后備隊列上等待作業調度(高級調度)的時間、進程在就緒隊列上等待進程調度(低級調度)的時間、進程在CPU上執行的時間、進程等待I/O操作完成的時間。
對于用戶來說,更關心自己的單個作業的周轉時間;對于操作系統來說,更關心系統的整體表現,
因此更關心所有作業周轉時間的平均值
- 作業周轉時間 = 作業完成時間 – 作業提交時間
- 平均周轉時間 = 各作業周轉時間之和 / 作業數量
- 帶權周轉時間 = 作業周轉時間 / 作業實際運行的時間(必然 ≥ 1)
- 平均帶權周轉時間 = 各作業帶權周轉時間之和 / 作業數
等待時間:進程/作業處于等待處理機狀態時間之和。等待時間越長,用戶滿意度越低。
對于進程來說,等待時間就是指進程建立后等待被服務的時間之和。在等待I/O期間,進程也是在被服務的,所以不計入等待時間。
對于作業來說,不僅要考慮建立進程后的等待時間,還要加上作業在外存后備隊列中等待的時間。
調度算法其實只會影響作業/進程的等待時間,而無法改變其被服務的時間。
響應時間:指從用戶提交請求到首次產生響應所用的時間。
對于計算機用戶來說,會希望自己的提交的請求(比如通過鍵盤輸入了一個調試命令)盡早地開始被系
統服務、回應。
調度算法
1、先來先服務 FIFS(FirstCome First Serve)
算法思想
主要從“公平”的角度考慮
算法規則
按照作業/進程到達的先后順序進行服務
作業調度 or 進程調度?
用于作業調度時,考慮的是哪個作業先到達后備隊列
用于進程調度時,考慮的是哪個進程先到達就緒隊列
搶占 or 非搶占式?
非搶占式
優點和缺點
優點:公平、算法實現簡單
缺點:對長作業有利,對短作業不利
是否會導致饑餓
不會
2、短作業優先(SJF, Shortest Job First)
算法思想
追求最少的平均等待時間,最少的平均周轉時間、最少的平均平均帶權周轉時間
算法規則
每次調度時,選擇當前已到達、且運行時間最短的作業/進程。
作業調度 or 進程調度?
可用于作業調度 / 進程調度。用于進程調度時:**短進程優先(SPF, Shortest Process First)**算法
搶占 or 非搶占式?
SJF / SPF 是非搶占式。搶占式版本:**最短剩余時間優先(SRTN, Shortest Remaining Time Next)**算法
優點和缺點
優點:“最短的”平均等待時間、平均周轉時間
缺點:不公平。對短作業有利,長作業不利。可能產生饑餓現象;作業/進程的運行時間由用戶提供的,不一定真實,不一定真正做到短作業優先
是否會導致饑餓
會。如果不斷有短作業到來,導致長作業饑餓 / 餓死
注意幾個小細節:
如果題目中未特別說明,所提到的“短作業/進程優先算法”默認是非搶占式的
很多書上都會說“SJF 調度算法的平均等待時間、平均周轉時間最少”,這個表述不嚴謹。之前例子表明,最短剩余時間優先算法得到的平均等待時間、平均周轉時間還要更少。
應該加上一個條件“在所有進程同時可運行時,采用SJF調度算法的平均等待時間、平均周轉時間最少”;或者“在所有進程都幾乎同時到達時,采用SJF調度算法的平均等待時間、平均周轉時間最少”;
如不加上述前提條件,應該說“搶占式的短作業/進程優先調度算法(最短剩余時間優先, SRNT算法)的平均等待時間、平均周轉時間最少”
雖然嚴格來說,SJF的平均等待時間、平均周轉時間并不一定最少,但相比于其他算法(如FCFS),SJF依然可以獲得較少的平均等待時間、平均周轉時間
如果選擇題中遇到“SJF 算法的平均等待時間、平均周轉時間最少”的選項,那最好判斷其他選項是不是有很明顯的錯誤,如果沒有更合適的選項,那也應該選擇該選項
3、高響應比優先(HRRN, Highest Response Ratio Next)
算法思想
要綜合考慮作業/進程的等待時間和要求服務的時間
算法規則
在每次調度時先計算各個作業/進程的響應比,選擇響應比最高的作業/進程,上處理機。
響應比 = (等待時間+要求服務時間) / 要求服務時間
作業調度 or 進程調度?
均可
搶占 or 非搶占式?
非搶占式。因此只有當前運行的作業/進程主動放棄處理機時,才需要調度,才需要計算響應比。
優點和缺點
綜合考慮了等待時間和運行時間(要求服務時間)。
等待時間相同時,要求服務時間短的優先(SJF 的優點)。
要求服務時間相同時,等待時間長的優先(FCFS 的優點)
等待時間越來越久,響應比會越來越大,從而避免了長作業饑餓的問題。
是否會導致饑餓
不會
以下三種算法適合用于交互式系統,更注重系統的響應時間、公平性、平衡性等指標。
4、時間片輪轉(RR, Round-Robin)
算法思想
公平地、輪流地為各個進程服務,讓每個進程在一定時間間隔內都可以得到響應
算法規則
按照各進程到達就緒隊列的順序,輪流讓各個進程執行一個時間片(如100ms)。若進程未在一個時間片內執行完,則剝奪處理機,將進程重新放到就緒隊列隊尾重新排隊。
隨著分時操作系統的出現而出現,更注重“響應時間”。
作業調度 or 進程調度?
進程調度(只有作業放入內存建立了相應的進程后,才能被分配處理機時間片)
搶占 or 非搶占式?
搶占式。
由時鐘裝置發出時鐘中斷來通知CPU時間片已到。進程未能在時間片內運行完,會被剝奪處理機使用權。
優點和缺點
優點:公平;響應快,適用于分時操作系統;
缺點:由于高頻率的進程切換,因此有一定開銷;不區分任務的緊急程度。
是否會導致饑餓
不會
5、優先級調度算法
算法思想
隨著計算機的發展,特別是實時操作系統的出現,越來越多的應用場景需要根據任務的緊急程度來決定處理順序
算法規則
每個作業/進程有各自的 優先級,調度時選擇 優先級最高的作業/進程
通常來說,優先級排序:
系統進程 > 用戶進程
前臺進程 > 后臺進程
I/O密集型進程 > CPU密集型進程(計算型進程)
作業調度 or 進程調度?
均可。既可用于作業調度,也可用于進程調度。甚至,還會用于在之后會學習的I/O調度中
搶占 or 非搶占式?
搶占式、非搶占式 都有。
非搶占式在 進程主動放棄處理機 時進行調度即可;搶占式還需在 就緒隊列變化 時,檢查是否會發生搶占。
優點和缺點
優點:用優先級區分緊急程度、重要程度,可靈活調整,適用于實時操作系統
缺點:若不斷地有高優先級進程到來,則可能導致饑餓
是否會導致饑餓
會
6、多級反饋隊列調度算法(UNIX使用)
算法思想
對其他調度算法的 折中 權衡
算法規則
設置多級就緒隊列,各級隊列優先級從高到低,時間片從小到大
新進程到達時先進入第1級隊列,按FCFS原則排隊等待被分配時間片,若用完時間片進程還未結束,則進程進入下一級隊列隊尾。如果此時已經是在最下級的隊列,則重新放回該隊列隊尾
只有第 k 級隊列為空時,才會為 k+1 級隊頭的進程分配時間片
作業調度 or 進程調度?
進程調度
搶占 or 非搶占式?
搶占。在k 級隊列的進程運行過程中,若更上級的隊列(1 ~ k-1級)中進入了一個新進程,則由于新進程處于優先級更高的隊列中,因此新進程會搶占處理機,原來運行的進程放回 k 級隊列隊尾。
優點和缺點
對各類型進程相對公平(FCFS的優點);每個新到達的進程都可以很快就得到響應(RR的優點);短進程只用較少的時間就可完成(SPF的優點);不必實現估計進程的運行時間(避免用戶作假);可靈活地調整對各類進程的偏好程度,比如CPU密集型進程、I/O密集型進程(拓展:可以將因I/O而阻塞的進程重新放回原隊列,這樣I/O型進程就可以保持較高優先級)
是否會導致饑餓
會,考慮不斷有短時間的進程到來的情況。
總結
以上是生活随笔為你收集整理的操作系统:第二章 进程管理2 - 处理机调度的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 操作系统:第二章 进程管理1 - 进程、
- 下一篇: 操作系统:第二章 进程管理3 - 进程同