操作系统调度策略
操作系統調度是為了再有限的資源下,通過對多個程序執行過程的國立,盡可能滿足系統和應用的 指標,如等待響應時間,完成時間,系統得資源利用率、吞吐量、功耗等。
設計一個令用戶滿意的調度器絕非易事,主要有以下挑戰:
- 調度指標多樣性。不同場景下的調度指標的選取有所不同,用戶在切換應用場景時,新舊場景的調度指標不一定適用。
- 調度可參考的信息有限。調度器沒有“上帝視角”,且應用場景可能動態變換,調度器只能通過有限的信息做出調度決策。
- 任務間的復雜交互。同一程序的任務間可能會有相互關聯的邏輯,需要相互依賴,調度器不能夠獨立地調度這些任務。
- 許多地方存在權衡。調度器的設計實現與系統的設計實現一樣,存在多種權衡。
單核調度策略
1.經典調度
1)先到先得(FIFO)
特點:簡單直觀,但在長短任務混合的場景下對短任務不友好,對I/O密集型任務不友好
2)最短任務優先(SJF)
在調度時會選擇運行時間最短的任務執行
特點:必須與之任務的運行時間,嚴重依賴于任務到達時間點
3)最短完成時間任務優先(STCF)
搶占式版本的SJF,在任務到達系統時回進行調度,有可能會終端當前正在執行的任務,轉而執行其他任務,即搶占式調度
特點:長任務饑餓,STCF策略傾向于完成時間較短的任務,長任務可能會無法占用CPU資源,一直處于饑餓狀態。
4)時間片輪轉(RR)
為了定時相應用戶,需要為任務設置時間片,限定任務每次執行的時間,當前任務執行完時間片后,就切換到運行隊列中的下一個任務。
特點:RR策略的關鍵點在于時間片的大小,在任務運行時間相似的場景下平均周轉時間高。
2.優先級調度
1)多級隊列(MLQ)
每個人物會被分配預先設置好的優先級,每個優先級對應一個隊列,任務會被存儲在對應的優先級隊列中。
特點:MLQ策略是一個靜態優先級調度策略,但會出現低優先級任務饑餓的問題。
2)多級反饋隊列(MLFQ)
在多級隊列的基礎上增加了動態設置任務優先級的策略。
MLFQ維護多個優先級隊列,任務根據優先級存于不同隊列中,高優先級任務先于低優先級任務執行,處于相同優先級的任務則采用RR策略執行。MLFQ策略會先對任務的運行時間進行評估,預計運行時間較短的任務會放入優先級較高的隊列中。
特點:低優先級的任務采用更長的時間片,定時地將所有任務的優先級提升至最高。
3.公平共享調度
這類調度會量化任務對系統資源的占有比例,實現對資源的公平調度。
1)彩票調度
根據每個任務所占有的份額成比例地分配CPU時間,在每次調度時,會根據隨機數確定任務是否被調度。任務所占的份額越大,隨機數就越有可能落在它的份額之內,即越有可能會被調度。
隨機數帶來的問題:彩票調度通過使用隨機的方式實現一個簡單而又近似公平共享的調度器,但是,隨機數會導致某一任務占有CPU時間的比例,需要在該任務經歷多次調度后,才能趨近于該任務的份額在所有任務總份額中的比例。
基于彩票的優化方法:
- 彩票轉讓
- 彩票貨幣
?????? 通過添加一層彩票貨幣的抽象,讓任務組更加靈活地修改自己持有的份額,避免影響從屬于它們的任務。
- 彩票通脹
?????? 給任務一定自由度,允許任務根據當前對CPU資源的需求決定自己的份額。
2)步幅調度
步幅調度通過設置虛擬時間的方式,讓任務在每次調度時增加一定的虛擬時間,即步幅。經歷虛擬時間相同的任務,它們使用的CPU時間之比就是步幅的倒數之比。即任務的份額之比對應于任務的步幅的倒數之比。
4.實時調度
實時操作系統是指需要實時處理任務請求的操作系統。
分類:
1)根據任務超過截止時間所造成的后果分類:
- 硬實時任務
?? 該類任務必須在截止時間之前完成,否則系統無法承擔任務處理超過截止時間的后果
- 軟實時任務
該類任務允許偶爾超過截止時間完成,其后果可以接受的。
2)根據被觸發的時間分類:
- 周期任務
指到達系統時間遵循一定周期的任務
- 偶發任務
指不會周期性地到達系統的任務,且還要滿足連續兩個相同偶發任務到達系統的時間間隔有最小值,即系統不會在同一時刻處理兩個相同的偶發任務。
- 非周期任務
指到達系統時間隨機的任務。相比于偶發任務,非周期任務沒有了相同任務間最小時間間隔的限制。
1)速率調度(RM)
是一個用于調度周期任務的靜態優先級實時調度策略。
該調度策略需要預知任務的周期T,并且根據周期靜態地為每個任務分配優先級,任務的周期越短,意味著其截止時間要求越迫切,其優先級越高。
2)最早截止時間優先(EDF)
任務的截止時間越近則優先級越高·
5.其他調度
借用虛擬時間(BVT)
BVT策略允許其“向自己的未來借用一定虛擬時間”。即BVT策略允許人物在短時間內將自己的pass值降低,以達到被優先調用的目的。
多核調度策略
在多核系統中,任務會同時在多個CPU核心上并行執行,相比于單核調度策略,多核調度策略需要考慮的因素更加復雜。
1.負載分擔
2.協同調度
協同調度的目的在于盡可能讓一組任務并行執行,避免調度器同時調度有依賴關系的兩組任務,同時避免關聯任務執行效率低的問題。
3.兩級調度
為了減少開銷,每個任務盡可能只在一個CPU核心上進行調度。將任務綁定到特定的CPU核心上進行調度執行,避免了任務在多核間切換。
為每個CPU核心都引入一個本地調度器,并用它管理對應核心上執行的任務。改調度策略使用全局調度器和本地調度器,構成了層級化結構。
4.負載追蹤與負載均衡
負載均衡是通過追蹤每個CPU核心當前的負載情況,將處于高負載的CPU核心管理的任務遷移到低負載的CPU核心上,盡可能地保證每個核心的負載大致相同。
總結
- 上一篇: Servlet的生命周期和线程安全问题
- 下一篇: 英飞凌的模拟硅麦