操作系统处理器调度
1 背景
1.1 上下文切換:
- 切換CPU的當前任務, 從一個進程/線程到另一個
- 保存當前進程/線程在PCB/TCB中的執行上下文(CPU狀態)
- 讀取下一個進程/線程的上下文
1.2 CPU調度:
- 從就緒隊列中挑選一個進程/線程作為CPU將要運行的下一個進程/線程
- 調度程序: 挑選進程/線程的內核函數(通過一些調度策略)
- 什么時候進行調度?
1.3 內核運行調度程序的條件(滿足一條即可):
- 一個進程從運行狀態切換到等待狀態
- 一個進程被終結了
1.4 搶占式調度
大部分時候應用程序在運行的過程中是以用戶態進程的形式存在的, 一旦啟動了一個進程之后, 就會存在兩種情況, 可搶占和不可搶占:
不可搶占:
- 調度程序必須等待事件結束
可以搶占:
- 調度程序在中斷被相應后執行
- 當前的進程從運行切換到就緒, 或者一個進程從等待切換到就緒
- 當前運行的進程可以被換出
是否可以搶占:?當一個用戶進程執行系統調用, 如果系統調用在內核中不會導致這個進程處于等待狀態, 這個調用正常返回會返回到發起這個系統調用的進程繼續執行, 即不會在內核中發生搶占現象, 稱為內核的不可搶占. 如果系統調用期間, 內核切換到了別的進程執行,? 那么返回到用戶態會返回到另一個用戶進程, 稱為內核的可搶占.
2 調度原則
2.1 調度策略
2.2 程序執行模型
程序在CPU突發和I/O中交替:
- 每個調度決定都是關于在下一個CPU突發時將哪個工作交給CPU
- 在時間分片機制下, 線程可能在結束當前CPU突發前被迫放棄CPU
2.3 比較調度算法的準則
- CPU使用率: CPU處于忙狀態所占時間的百分比
- 吞吐量: 在單位時間內完成的進程數量
- 周轉時間: 一個進程從初始化到結束
- 等待時間: 進程在就緒隊列中的總時間
- 響應時間: 從一個請求被提交到產生第一次響應所花費的總時間
評價快慢的一些指標:
- 傳輸文件時的高帶寬
- 玩游戲時的低延遲
- 這兩個因素是獨立的
2.4 吞吐量VS延遲
調度算法的目標:
- 減少響應時間: 從而及時處理用戶的輸出并且盡快將輸出提供給用戶
- 減少平均響應時間的波動: 在交互系統中, 可預測性比高差異低平均更重要
- 增加吞吐量, 體現在兩個方面: 1. 減少開銷(操作系統開銷, 上下文切換). 2. 系統資源的高效利用(CPU, I/O設備)
- 減少等待時間: 減少每個進程的等待時間.
低延遲調度增加了交互式表現, 如果移動了鼠標, 但是屏幕中的光標卻沒動, 體驗就會很差. 但是操作系統需要保證吞吐量不受影響, 想要結束長時間的編程, 所以操作系統必須不時進行調整, 即使存在許多交互任務. 吞吐量是操作系統的計算帶寬, 響應時間是操作系統的計算延遲.
2.5 公平的目標
調度算法需要確立一個公平的目標, 不過這個怎么定義呢? 比如保證每個進程占用相同的CPU時間, 但是這樣的話一個用戶比其他用戶運行更多進程怎么辦. 比如保證每個進程都等待相同的時間, 公平通常會增加平均響應時間.
3 調度算法
3.1 FCFS
FCFS: 先來先服務, 即如果進程在執行中阻塞, 隊列中的下一個進程會得到CPU
舉例:
假設有三個任務P1, P2, P3, 執行時間分別是12, 3, 3.?
- 首先, 當任務到達順序為P1, P2, P3時, 如圖:
- 當任務到達順序為P2, P3, P1時, 如圖:
FCFS特點:
優點:
簡單
缺點:
- 平均等待時間波動較大
- 花費時間少的任務可能排在花費時間長的任務后面
- 可能導致I/O和CPU之間的重疊處理(CPU密集型進程會導致I/O設備閑置時, I/O密集型進程也在等待)
3.2 SPN(SJF) SRT
SPN(SJF) SRT: 短進程優先(短作業優先), 短剩余時間優先, 選擇下一個最短的進程, 按照預測的完成時間來將任務入隊.
可以是可搶占的或者不可搶占的:
- 可搶占, 又叫Shortest-Remaining-Time(SRT: 最短剩余時間), 執行程序可打斷, 并根據剩余執行時間重新確定優先級
- 不可搶占, 執行程序不可打斷
這種方法的平均等待時間是最小的.
缺點:
- 可能導致饑餓
- 連續的短任務流會使長任務饑餓
- 短任務可用時的任何長任務的CPU時間都會增加平均等待時間
- 需要預知未來(預測等待時間算法)
- 怎么預估下一個CPU突發的持續時間
- 簡單的解決方法: 詢問用戶
- 如果用戶欺騙就殺死進程
- 如果用戶不知道怎么辦
3.3 HRRN
HRRN: 最高響應比優先, 在SPN調度的基礎上改進, 不可搶占, 關注進程等待了多長時間, 防止無限期推遲
相應比:
R = (w + s) / s
- w: waiting time: 等待時間
- s: service time: 執行時間
3.4 Round Robin
Round Robin: 輪循, 使用時間切片和搶占來輪流執行任務, 在叫作量子, 或者時間切片的離散單元中分配處理器,?時間片結束時, 切換到下一個準備好的進程.
特點:
- 花銷: 額外的上下文切換
- 時間量子太大的話: 等待時間就會過長, 極限情況退化成FCFS
- 時間量子太小的話: 反映迅速, 但是...吞吐量由于大量的上下文切換開銷受到影響
目標:
- 選擇一個合適的時間量子
- 經驗規則: 維持上下文切換開銷處于1%以內
3.5 Multilevel Feedback Queue
Multilevel Feedback Queue: 多級反饋隊列, 優先級隊列中的輪循
- 就緒隊列被劃分成獨立的隊列(比如: 前臺/交互, 后臺/批處理)
- 每個隊列擁有自己的調度策略(比如: 前臺RR, 后臺FCFS),
- 調度必須在隊列間進行
但是進程的執行過程進程的特點會發生變化, 根據這個問題可以有如下設計:
- 一個進程可以在不同的隊列中移動
- 例如: n級優先級 - 優先級調度在所有級別中, RR在每個級別中:
- 時間量子大小隨優先級級別增加而增加
- 如果任務在當前的時間量子中沒有完成, 則降到下一個優先級
3.6 Fair Share Scheduling
Fair Share Scheduling: 公平共享調度
FSS控制用戶對系統資源的訪問
- 一些用戶組比其他用戶組更重要
- 保證不重要的組無法壟斷資源
- 未使用的資源按照每個組所分配的資源的比例來分配
- 沒有打到資源使用率目標的組獲得更高的優先級
3.7 調度算法評價
- 確定性建模: 確定一個工作量, 然后計算每個算法的表現
- 隊列模型: 用來處理隨機工作負責的數學方法
- 實現/模擬:
- 建立一個允許算法運行實際數據的系統
- 最靈活/具有一般性
4 實時調度
4.1 實時系統
定義:
正確性依賴于其時間和功能兩方面的一種操作系統.
性能指標:
- 時間約束的及時性(deadlines)
- 速度和平均性能相對不重要
主要特性:
時間約束的可預測性
分類:
- 強實時系統: 需要在保證的時間內完成重要的任務, 必須完成
- 弱實時系統: 要求重要的進程優先級更高, 盡量完成, 并非必須
一些術語:
- 任務(工作單元): 一次計算, 一次文件讀取, 一次信息傳遞等等
- 屬性: 取得進展所需要的資源, 實時參數
- 周期任務
- 任務有規律的重復
- 周期p = inter-release time (0 < p)
- 執行周期e = 最大執行時間(0 < e < p)
- 使用率U = e / p
- 硬時限
- 如果錯過了最后期限, 可能會發生災難性或非常嚴重的后果
- 必須驗證: 在最壞的情況下是否也能滿足時限
- 保證確定性
- 軟時限?
- 理想情況下, 時限應該被最大滿足. 如果有時限沒有被滿足, 那么就相應地降低要求
- 盡最大努力去滿足?
滿足實時性要求的調度算法設計:
- 決定實時任務執行的順序
- 靜態優先級調度
- 動態優先級調度?
4.2 可調度性
4.3 單調速率(RM)調度
- 最佳靜態優先級調度
- 通過周期安排優先級
- 周期越短優先級越高
- 執行周期最短的任務
4.4 截止日期最早優先(EDF)
- 最佳的動態優先級調度
- Deadline越早優先級越高
- 執行Deadline最早的任務
5 多處理器調度
多處理器的CPU調度更加復雜
- 多個相同的單處理器組成一個多處理器
- 優點: 負載共享
對稱多處理器(SMP)
- 每個處理器運行自己的調度程序
- 需要在調度程序中同步
6 優先級反轉
可以發生在任何基于優先級的可搶占的調度機制中, 當系統內的環境強制使高優先級任務等待低優先級任務時發生.
發生原因(圖示):
優先級反轉的持續時間取決于其他不相關任務的不可預測的行為, 如以上例子,?的執行時間被以及影響.
解決辦法:
- 低優先級任務繼承高優先級任務的優先級依賴于他們共享的資源.?如以上例子,?在訪問時由于此時正在被所占用, 所以的優先級會動態得到提升至和相同(因為被占用的原因), 使得不被搶占.
- 優先級天花板
- 優先級天花板: "資源"的優先級和"所有可以鎖定該資源的任務中優先級最高的那個任務"的優先級相同, 如以上例子,?的優先級跟的優先級相同.
- 除非優先級高于系統中所有被鎖定的資源的優先級上線, 否則任務嘗試執行臨界區的時候會被阻塞.?如以上例子,?占用執行時, 除非再來一個進程的優先級高于此時資源的優先級, 也就是的優先級, 也就是的優先級, 其可以搶占CPU執行, 否則就會被阻塞, 也就是過來時會被阻塞.
- 持有最高優先級上限信號量的任務, 會繼承被該鎖所阻塞的任務的優先級.
總結
- 上一篇: mysql5.7.24 安装步骤_MyS
- 下一篇: 操作系统进程间通信 --- IPC