450 likes | 696 Views
作業系統. 第五章 CPU 排班. 教學目標. 概觀 排班準則 排班演算法 多處理器的排班 排班演算法的評估. 概觀. 排班程式 就緒佇列 行程執行模式 CPU 排班啟動的時機 分派程式. 排班程式( 1/2 ). 行程在系統中,從要開始執行到執行結束所需碰到的排班程式 長期、中期和短期排班程式 長期排班程式 管理所有要求執行的 程式 進入系統中,並讓執行結束的 行程 離開系統 控制多工作業系統內的多工程度 進入系統的演算法 先進先出、優先權. 排班程式( 2/2 ). 短期排班程式( CPU 排班程式)
E N D
作業系統 第五章 CPU排班
教學目標 • 概觀 • 排班準則 • 排班演算法 • 多處理器的排班 • 排班演算法的評估
概觀 • 排班程式 • 就緒佇列 • 行程執行模式 • CPU排班啟動的時機 • 分派程式
排班程式(1/2) • 行程在系統中,從要開始執行到執行結束所需碰到的排班程式 • 長期、中期和短期排班程式 • 長期排班程式 • 管理所有要求執行的程式進入系統中,並讓執行結束的行程離開系統 • 控制多工作業系統內的多工程度 • 進入系統的演算法 • 先進先出、優先權
排班程式(2/2) • 短期排班程式(CPU排班程式) • 從所有準備就緒的行程中選出一個來使用CPU • 使用最頻繁、對效能影響最大,為本章主題 • 中期排班程式 • CPU使用效率 v.s.整體系統效能降低(記憶體空間不足或行程替換過於頻繁) • 為了取得平衡,會暫時讓某些程式離開記憶體,並從就緒狀態移到等待狀態 • 通常屬於記憶體管理系統(ref. ch8, ch9)
行程 v.s. 執行緒 的CPU排班 • 相異 • 代表行程的,是在就緒佇列中的行程控制表(PCB) • 代表執行緒的,是在就緒佇列中的執行緒控制表(程式計數器、堆疊記憶體內容、堆疊指標及訊號遮罩表 ) • 其它的考量點(演算法、準則等)相同,因此我們以行程的CPU排班為討論主題
就緒佇列(ready queue) • 存放準備就緒、等待執行(行程狀態為就緒)的行程的資料結構 • CPU排班演算法對此資料結構作運算 • 慣稱 • 依排班演算法和實作的不同,可能為佇列(queue)、堆疊(stack)、堆積(heap)等,不見得一定是佇列(queue)型態 • 一般以就緒佇列為其慣稱
行程執行模式 • CPU排班就是,合理分配CPU執行權給每個行程的CPU週期
CPU排班啟動的時機 • 準備就緒 • 執行結束 • 等待某個事件 • 等待的事件發生 • CPU時間分量結束
閒置行程(idle process) • 目的 • 若目前沒有任何行程能夠執行,CPU排班程式就挑它來執行,避免不可預期的結果 • 工作內容 • 讓CPU空轉 • 其它工作(啟動省電模式、記憶體回收、….) • 範例 • Linux的Init行程 • Windows的System Idle Process
分派程式(dispatcher) • 目的 • 將CPU的執行權交給由CPU排班程式挑出來的行程 • 步驟 • 本文切換 • 由核心模式切回使用者模式 • 跳到該行程接下來要執行的程式碼,讓行程重新啟動
準備就緒 執行結束 選好的下個 執行行程 觸發 CPU排班程式 分派程式 等待某個事件 本文切換 等待的事件發生 就緒佇列 行程開始執行 CPU時間分量結束 CPU排班流程示意圖
排班的準則 • 目的 • 設計、評估一個排班演算法的依據 • 項目 • CPU使用率(CPU utilization) • 整體成效(throughput) • 行程所需時間(turnaround time) • 等待時間(waiting time) • 回應時間(response time)
應用範例 • 科學計算 • CPU使用率高的演算法 • 交談式系統 • 回應時間短的演算法 • 一般狀況 • 平衡、兼顧各項準則
排班演算法 • CPU排班的核心問題 • 也可為其它領域(e.g. 磁碟排班、I/O排班、通訊封包排班等)參考 • 介紹的內容 • 先來先做 • 最短工作優先 • 優先權 • 循環式 • 多層佇列 • 多層回饋佇列
可搶先式 v.s. 不可搶先式 • 不可搶先式(non-preemptive) • 正在執行中的行程,只能主動地放棄CPU執行權,例如:行程結束、等待事件、…. • 優點:較簡單、行程所需時間(turnaround time)短 • 可搶先式(preemptive) • 正在執行中的行程,任何時候都可能被迫放棄CPU執行權給別的行程 • 優點:等待時間短、回應時間短
先來先做(first come first served;FCFS)排班演算法 • 較早來到作業系統內部的行程,會較早取得CPU的資源來執行其運算 • 佇列(queue) • 不可搶先 • 優點 • 原理簡單、容易懂、也容易實作 • 缺點 • 平均等待時間長(不適合分時系統 ) • 回應時間長(不適合交談式系統)
先來先做演算法的範例 PA、PB、PC的到達順序 平均等待時間:(0+41+43)/3=28毫秒 Pc、PB、PA的到達順序 平均等待時間:(0+1+3)/3=1.33毫秒
最短工作優先(shortest job first;SJF)排班演算法 • 或稱最短時間優先(shortest-next-cpu-burst;SNCB)演算法 • 下一次CPU執行週期時間最短的行程優先 • 預測行程的下一個CPU運算週期時間之方法 • 指數平均數(exponential average)的方法 • 可搶先 v.s 不可搶先(最短剩餘時間優先 ) • 整體的行程平均等待時間(average waiting time)最小
最短工作優先的範例 不可搶先,平均等待時間: (0+6.5+9+5.5)/4=5.25毫秒 可搶先,平均等待時間: (6+0+9+0)/4=3.75毫秒
優先權(priority)排班演算法 • 為每個行程指定它的優先權 • 選取下一個要被執行的行程時,是以當時具有最高優先權的行程為第一優先 • 可搶先 v.s.不可搶先 • 潛在問題 • 飢餓 • 可被用來模擬其他種類的排班演算法 • 例如:先來先做、後來先執行、最短工作優先
循環式(round-robin;RR)排班演算法 • 為每個行程分配一段時間分量(time quantum / time slice,通常是10~100毫秒之間) • 當執行中的行程用完其時間分量時 • 強制取得其CPU使用權 • 將此行程重新放到就緒佇列的末端 • 將CPU的使用權給就緒佇列開頭的行程
時間分量1 時間分量2 ●●● 時間分量n ●●● 行程1 行程2 行程n 遞減 執行 計時器 CPU 循環式排班演算法示意圖
循環式排班演算法的範例 時間分量為3,平均等待時間: (12+1.5+7+3.5)/4=6毫秒
循環式演算法的問題—即時反應與整體效能的平衡之考量循環式演算法的問題—即時反應與整體效能的平衡之考量
循環式與優先權排班的結合 • 目標 • 在循環式排班演算法中,加入優先權的性質 • 方法 • 在就緒佇列中放置多份代表某一行程的資料結構,優先權越高的越多份 • 直接分配較多的時間分量給高優先權的行程
多層佇列(multilevel-queue)排班演算法 • 將就緒佇列分成幾個分類較細的就緒佇列 • 校長、教授、助教、學生工作的就緒佇列 • 前景行程、背景行程就緒佇列 • 高、中、低優先權就緒佇列 • 可對各個就緒佇列採用不同的排班演算法 • 例如:對前景行程用循環式、背景行程用先來先做 • 優點 • 因應各性質的行程、彈性高 • 缺點 • 行程飢餓(starvation)
多層回饋佇列(multilevel-feedback-queue)排班演算法 • 多層佇列+允許行程在不同的就緒佇列中移動 • 解決行程飢餓問題 • 低優先權佇列的行程太久沒被執行,就移往較高優先權佇列 • 範例 • Windows XP和Linux對一般等級的行程所設定的排班演算法
多處理器系統的排班 • 概觀 • 分類 • 硬體特性 • 工作性質 • 共用佇列與專屬佇列 • 負載平衡 • 處理器偏好
多處理器系統排班之概觀 • 優點 • 理論上,多一個處理器就可以同時多執行一項工作,使系統的執行效能得到加倍提昇 • 挑戰 • 所面對的問題遠比單處理器複雜 • 例如:共用資源的存取、各處理器的工作負荷不平均
多處理器系統的分類—硬體特性 • 異質 • 每個處理器本身可以做的工作就不相同 • 例如:MCU+DSP • 同質 • 每個處理器本身可以做的工作性質都是相同的 • 例如:目前流行的雙核心、四核心處理器
多處理器系統的分類—工作性質 • 非對稱式多重處理 • 主從式的模式 • 運作單純、整體效能比較差 • 異質多處理器系統只能採用本模式 • 對稱式多重處理(SMP) • 每個處理器的地位相當,都有自己所屬的CPU排班程式 • 目前大部分的現代作業系統都有支援SMP,也是我們討論的主題
SMP系統排班的主要考量 • 共用佇列與專屬佇列 • 負載平衡 • 處理器偏好
共用佇列與專屬佇列 • 所有就緒行程的佇列安排方式: • 共用佇列 • 全放到一個共用的佇列中,每個處理器的排班程式再到共用佇列中取得行程來執行 • 同步問題 • 專屬佇列 • 分散到各個處理器專屬的佇列中,每個處理器的排班程式到各專屬的佇列中挑取行程來執行 • 大部分的SMP系統採用專屬佇列
就緒佇列 就緒佇列 就緒佇列 同步控制 排班程式 排班程式 排班程式 排班程式 CPU[n] CPU[1] ●● CPU[n] CPU[1] ●● 使用共用佇列的SMP 使用專屬佇列的SMP SMP共用佇列與專屬佇列示意圖
負載平衡(load balance) • 狀況 • 某些處理器可能會一直很忙碌,並且還有一堆行程等待處理 • 而某些處理器卻閒置著 • 目的 • 讓每個處理器都能維持忙碌的狀態,以提高系統最大的效能
達成負載平衡的作法 • 拉遷移 • 閒置的處理器主動到忙碌的處理器之就緒佇列中,「拉」一或多個等待執行的行程回來執行 • 推遷移 • 一特定行程,週期性地檢查每個處理器的負載情況 • 發現有負載不平衡時,從負載過重的處理器那「推」幾個行程給閒置中或負載過輕的處理器 • 兩種作法可並存
處理器偏好(processor affinity) • 原因 • 將某行程移到另一個處理器執行的時候,必須把已經放在原處理器的記憶體和各層快取中的所有資料作廢,另外再搬移到新處理器的記憶體和各層的快取裡 • 很耗系統時間 • 某個行程會「偏好」於某個處理器執行,避免浪費系統資源
處理器偏好的分類 • 軟性偏好 • 作業系統會儘量讓行程待在同一個處理器執行,但是不保證一定不會被移到別的處理器 • 硬性偏好 • 作業系統允許行程設定成它只會在某個處理器執行,並保證不會被移到別的處理器 • 注意 • 負載平衡和處理器偏好兩者是互相違背的
排班演算法的評估 • 定量評估 • 使用一個事先想像好的狀況,模擬各個演算法的執行效率 • 模擬 • 寫模擬程式,求得實際的演算法數據 • 實作 • 依照演算法的流程,實際撰寫真實系統中的程式碼片段
小結(1/2) • 行程在系統中,從要開始執行到執行結束所需碰到的排班程式,包括長期、中期和短期排班程式 • CPU(短期)排班演算法是討論的主題,設計、評估的準則有CPU使用率、整體成效、行程所需時間、等待時間、回應時間 • 討論的CPU排班演算法,包括先來先做、最短工作優先、優先權、循環式、多層佇列以及多層回饋佇列
小結(2/2) • 多處理器系統的排班考量,包括對稱式多重處理和非對稱式多重處理、共用佇列與專用佇列、處理器偏好以及負載平衡等 • 硬性即時排班演算法為另一個其它常見的主題,常見於即時系統(ch14)和要求服務品質(QoS)的系統(ch15) • 評估各種排班演算法效率的方法,通常包括定量評估、模擬與實作