一.什麼是調度?
調度就是從就緒隊列中挑選下一個佔用 CPU 運行的進程。
調度分爲:長程調度、中程調度、短程調度和 I/O 調度。
本文主要講解短程調度。
二.爲什麼要進行進程調度?
- 正在執行的進程正確完成,或由於某種錯誤而終止運行(陷阱或中斷)
- 執行中的進程提出 I/O 請求,等待 I/O 完成
- 在分時系統中,分給進程的時間片用完
- 按照優先級調度,有更高優先級進程變爲就緒狀態(搶佔方式)
- 執行中的進程執行了進程通信原語操作,如 wait 操作、阻塞原語或喚醒原語。
三.短程調度準則:
- 面向用戶的準則:響應時間、週轉時間(週轉時間 = 完成時間 - 到達時間)
- 面向系統的準則:吞吐量、處理器利用率
四.選擇調度策略
- 先到先服務FCFS
- 時間片輪轉RR
- 最短進程優先SPN
- 最短剩餘時間優先SRT
- 最高相應比優先HRRN
- 反饋法
五.進程調度算法的實例
進程調度方式有兩種:
非搶佔方式
分配 CPU 後,進程一直運行到完成或異常終止
簡單、系統開銷小
批處理系統搶佔方式
系統根據某種策略(搶佔原則)收回正在運行進程的 CPU ,調度其它就緒進程運行
及時響應各進程的需求
分時/實時系統
搶佔原則:
- 時間片原則(時間片用完)
- 優先級原則(更高優先級進程就緒)
- 短進程優先原則(更短進程就緒)
1.先來先服務FCFS
FCFS 算法總是把處理機分配給最先進入就緒隊列的進程,一個進程一旦分得處理機,便執行下去,直到該進程完成或阻塞時,才釋放處理機。(非搶佔調度)
FCFS 的優點:實現簡單。
FCFS 的缺點:沒有考慮進程的優先級,平均等待時間波動較大,短進程可能排在長進程後面,I/O 資源和 CPU 資源利用率低。
FCFS 有利於長作業(進程)
2.時間片輪轉RR
RR 用於分時系統進程調度,其步驟如下:
- 就緒進程按照 FCFS 原則排成一個就緒隊列
- 調度隊首進程,執行一個時間片
- 在一個時間片結束時,發生時鐘中斷
- 調度程序暫停當前進程的執行,並送就緒隊列尾
- 通過 CPU 現場切換執行當前的隊首進程
這裏的時間片 q = 1
RR 的優點:就緒隊列中的所有進程都會有機會獲得處理器運行;可提高進程併發性和資源利用率;縮短響應時間。
RR 的缺點:時間片的長度影響系統開銷和響應時間。
時間片過短,則調度程序剝奪處理機的次數增多,增加進程上下文交換次數,加重了系統開銷(時間片短,有利於短作業,不利於長作業);
時間片過長,大到進程能完成全部運行作業所需的時間,那麼時間片輪轉法就退化爲 FCFS (長時間片,無法滿足交互式用戶需求)。
最佳時間片,長度略大於一次典型交互所需的時間(響應時間= 進程數目 × 時間片大小)
3.最短進程優先SPN
SPN 算法從就緒隊列中選出估計運行時間最短的進程,爲之分配處理機,如果運行時間相同,按 FCFS 調度。
SPN 算法有搶佔方式和非搶佔方式兩種:
- 最短進程優先SPN(非搶佔)
- 最短剩餘時間優先SRT(搶佔)
SPN 的優點:能有效地降低平均等待時間,提高系統的吞吐量(平均週轉時間最短),有利於短作業。
SPN 的缺點:不利於長作業當短作業持續不斷到達時,長作業可能被餓死。無法準確估計作業的的確切執行時間,不一定能真正做到短作業(進程)優先調度。
4.最短剩餘時間優先SRT
SRT 是對 SPN 的改進,採用了搶佔機制,根據就緒隊列裏進程剩餘需要服務的時間來排隊。剩餘時間越短的排在最前面。因爲需要去記錄進程的剩餘服務時間,所以增加了系統的開銷。
SRT 的優點:比 SPN 的性能更好,短作業只要就緒就可以搶佔正在執行長進程的 CPU。
SRT 的缺點:增加了額外開銷,長作業(進程)可能會被餓死。
5.最高相應比優先HRRN
爲了防止長作業(進程)被餓死,選擇最高相應比優先算法。
響應比 = 週轉時間 / 運行時間 = (運行時間 + 等待時間 )/ 運行時間 = 1 + 等待時間 / 運行時間
HRRN 的優點:對短作業有利(運行時間越短優先級越高),長作業不會被餓死(運行時間相同時,等待時間越長優先級越高)
HRRN 的缺點:增加了系統的開銷(每次重新調度需要估計運行時間,並計算響應比)
6.反饋法
多級隊列調度:
- 根據進程屬性設置多個就緒隊列,每個就緒隊列有各自的調度算法、優先級或時間片長度
前臺(或交互式)RR
後臺(或批處理)FCFS - 隊列之間必須有調度
通常採用固定優先級可搶佔調度
另一種可能是在隊列之間劃分時間片。每個隊列都有一定的 CPU 時間
多級反饋隊列:
- 基於多級隊列調度(多個隊列,不同優先級,不同時間片長度,不同調度算法)
- 進程可以在不同隊列間移動
- 可搶佔調度
- 最通用和最複雜的 CPU 調度算法
多級反饋隊列調度的優點:
- 短進程出現在優先級高的隊列中,可提高系統吞吐量、縮短平均週轉時間
- I/O 密集型進程放在最高優先級隊列,保證及時 I/O 交互,提高 I/O 設備利用率、縮短響應時間
- 不必事先估計進程執行時間,可以在進程中動態調節