調度程序
當計算機系統是多道程序設計系統時,通常就會有多個進程或線程同時競爭 CPU。只要有兩個或更多的進程處於就緒狀態,這種情形就會發生。如果只有一個 CPU 可用,那麼就必須選擇下一個要運行的進程。在操作系統中,完成選擇工作的這一部分稱爲調度程序,該程序使用的算法稱爲調度算法。
進程行爲
- CPU 密集型進程
- I/O 密集型進程
何時調度
- 在創建一個新進程之後,需要決定是運行父進程還是運行子進程。(任意決定,調度程序可以選擇)
- 在一個進程退出時必須所處調度決策。
- 當一個進程阻塞在 I/O 和信號量上或由於其他原因阻塞時,必須選擇另一個進程運行。
- 在一個 I/O 中斷髮生時,必須做出調度決策。
調度模式
- 搶佔式
- 非搶佔式
調度算法的分類
- 批處理
- 交互式
- 實時
調度算法的目標
- 所有系統
- 公平——給每個進程公平的 CPU 份額
- 策略強制執行——保證所有規定的策略被執行
- 平衡——保持系統的所有部分都忙碌
- 批處理系統
- 吞吐量——每小時最大作業數
- 週轉時間——從提交到終止間的最小時間
- CPU 利用率——保持 CPU 始終忙碌
- 交互式系統
- 響應時間——快速響應請求
- 均衡性——滿足用戶期望
- 實時系統
- 滿足截止時間——避免丟失數據
- 可預測性——在多媒體系統避免品質降低
批處理系統中的調度
- 先來先服務
- 最短作業優先
- 最短剩餘時間優先
交互式系統中的調度
- 輪轉調度
- 優先級調度:在各個優先級類中使用輪轉調度
- 多級隊列:屬於最高優先級類的進程運行一個時間片,次高運行2個,再次運行4個。。。
- 最短進程優先:根據進程過去的行爲進程預測,並執行估計運行時間最短的那個,可以和之前的運行時間做加權和來預測
- 保證調度:確保 n 個進程中每個進程佔用 CPU 的時間約爲 1/n
- 彩票調度:反應迅速,所有的進程都是平等的,但是可以給更重要的進程額外的彩票
- 公平分享調度:以進程的所有者均分 CPU 時間而不論進程數目
實時系統中的調度
- 分類1:
- 硬實時:必須滿足絕對的截止時間
- 軟實時:雖然不希望偶爾錯失截止時間,但是可以容忍
- 分類2:
- 週期性:事件以規則的時間間隔發生
- 非週期性:事件發生的時間不可預知
- 分類3:
- 靜態調度:在系統開始運行前作出調度決策
- 動態調度:在運行過程中進行調度決策
- 最小延誤調度
- 優先級調度
- 速率單調調度
- 最早截止優先調度
- 成比例分享調度
- POSIX 實時調度
線程調度
- 內核級線程
- 用戶級線程
用戶級線程和內核級線程之間的差別在於性能。
用戶級線程可以使用專門爲應用程序定值的線程調度程序。