內核運行調度程序的條件:
- 進程從運行狀態切換到阻塞狀態,這種情況下當前進程不再佔用CPU,此時可以從就緒隊列中調度一個進程放到cpu上運行。
- 進程退出了,CPU空閒出來,又可以加載一個進程。
- 以上兩種情況是針對非搶佔系統,當把CPU資源分配給了一個進程,操作系統不會主動的剝奪
- 對於搶佔系統,當存在中斷請求或者系統調用時,有可能把當前運行的進程轉成就緒狀態。
- 當前進程被搶佔的情況:
- 進程時間片用完
- 進程從等待切換到就緒
- 當前進程被搶佔的情況:
調度策略
進程通常在CPU計算和IO操作之間交替進行。
度量指標:
- CPU使用率:CPU處於忙狀態的時間百分比
- 吞吐量:單位時間內完成的進程數量
- 週轉時間:進程從初始化到結束(包括等待)的總時間
- 等待時間:進程在就緒隊列的總時間
- 響應時間:從提交請求到產生響應的時間
目標:
- 減少響應時間:及時處理用戶的輸入請求,儘快將輸出反饋給用戶。
- 減少平均響應時間的波動:在交互系統中,可預測性比高差異低平均更重要。
- 增加吞吐量
- 減少開銷(操作系統開銷,提升上下文切換的速度)
- 提高系統的利用率(CPU的利用率,IO設備的利用率)
- 減少等待時間:減少每個進程的等待時間
調度算法
先來先服務
- 依據進程進入就緒狀態的先後順序排列
- 進程進入等待或結束狀態時,就緒隊列中的下一個進程佔用CPU
-
- 進程進入等待或結束狀態時,就緒隊列中的下一個進程佔用CPU
- 缺點:
- 平均等待時間波動較大,短進程如果排在長進程後面,那麼短進程的等待時間會很長,比如上述例子中的p2和p3。
- IO資源和CPU資源利用率較低
- CPU密集型進程會導致IO設備閒置時,後序的IO密集型任務只能等待,不能提前執行。這樣IO設備的利用率降低。
短進程優先
- 選擇就緒隊列中執行時間最短進程佔用CPU進入運行狀態。就緒隊列按預期的執行時間來排序。
- 如果一個新的進程到達,比當前正在執行的進程還短,就考慮短剩餘時間優先算法。
- 短剩餘時間優先:
- 一個進程正在執行,它預期的執行時間很長,又來了一個新的進程,它預期的執行時間比當前正在已經執行了一半的這個進程剩下那個時間還要短,那這時候允許新來的進程搶先。
- 具有最優平均週轉時間特徵
- 可能導致飢餓:連續的短進程流會使長進程無法獲得CPU資源
最高響應比優先
- 選擇就緒隊列中響應比R值最高的進程
- R=(等待時間+執行時間)/執行時間
- 在短進程優先算法的基礎上改進,避免陷入漫長的等待
- 不可搶佔
- 關注進程的等待時間
時間片輪轉
- 時間片結束時,按照FCFS算法切換到下一個就緒隊列中的進程,結束的進程排到就緒隊列的最後
- 如果有n個進程,每個進程佔一個時間片,那麼每隔n-1個時間片,進程佔用一個時間片來執行
- 每個進程分到了1/n的時間
- 強制終止進程所以有額外的上下文切換開銷
多級隊列
多級反饋隊列
- CPU密集型的進程的優先級下降很快
- IO密集型的進程停留在高優先級