操作系統-進程調度


進程調度概述

定義

進程存在的核心目的:虛擬化CPU,從而支持多個進程在少量的物理CPU上運行(每個進程以為它獨享一個CPU)。

進程調度就是選擇一個可用的進程(可能從多個可用進程集合中選擇)到CPU上執行。單處理器系統從來不會有超過一個進程在運行。如果有多個進程,那么余下的則需要等待CPU空閑並重新調度。

調度隊列

進程進入系統時被加入到作業隊列中,該隊列包含系統中所有進程。

駐留在內存中等待運行的程序保存在就緒隊列中,該隊列常用鏈表來實現,其頭節點指向鏈表的第一個和最后一個PCB塊的指針。

操作系統也有其他隊列。等待特定IO設備的進程列表稱為設備隊列。每個設備都有自己的設備隊列。

image-20210908192642642

就緒隊列中進程在就緒隊列中等待直到被選中執行或被派遣。當進程分配到CPU執行時,可能發生:

  1. 進程發出一個IO請求,並放到IO隊列中。
  2. 進程創建新的子進程,並等待其結束。
  3. 進程由於中斷而強制釋放CPU(被搶占),並被放回到就緒隊列中。

即如下圖:

image-20210908192907951

調度的分類 & 調度程序

調度有以下幾種:

  • 長程調度(作業調度):決定加入待執行進程池
  • 中程調度:決定加入部分/全部位於內存中的進程集合(換入/換出)
  • 短程調度(進程調度):決定處理器執行哪個可運行進程(執行)
  • I/O調度:決定可用I/O設備處理哪個進程掛起的I/O請求

除I/O調度外,對應到隊列如下圖所示:

image-20210908095809806

進程會在各種調度隊列之間遷移,為了調度,操作系統必須按某種方式從這些隊列中選擇進程。進程的選擇是由相應的調度程序(scheduler)來執行的。

  • 短程調度程序 從准備執行的進程中選擇進程,並為之分配CPU。

    • 短程調度程序通常100ms至少執行一次,由於每次執行之間的時間較短,短程調度程序必須要快

    • 導致當前進程阻塞或搶占當前運行進程的事件(時鍾中斷、I/O 中斷、操作系統調用、信號)發生時,會調用短程調度程序。

  • 長程調度程序 批處理系統中,進程更多的是被提交,而不是馬上執行。這些進程通常放到磁盤的緩沖池里,以便以后執行。長程(作業)調度程序從該池中選擇進程,並裝入內存以准備執行。

    • 長程調度程序執行的並不頻繁,所以長程調度程序能使用更多的時間來選擇執行進程。長程調度程序控制多道程序設計的程度(內存中進程的數量)。長程調度程序必須仔細選擇執行進程。

    • 絕大多數進程可分為:I/O密集計算(CPU)密集。為使系統達到平衡和更好的性能,長程調度程序應當選擇一個合理的包含I/O為主的和CPU為主的組合進程以充分使用設備和短程調度程序。

    • Linux和Windows系統通常沒有長程調度程序,這些系統的穩定性依賴於物理限制,如果系統性能下降很多,會有用戶的退出。

  • 中程調度程序 分時系統中可能引入中程調度程序,其核心思想是能夠將進程從內存中移出,從而降低多道程序設計的程度,之后進程可以被換入。

三者在執行頻繁程度上有較大差別,執行頻繁程度:短程調度 > 中程調度 > 長程調度

調度算法

● 非搶占:在這種情況下,一且進程處於運行狀態,就會不斷執行直到終止,進程要么因為等待I/O,要么因為請求某些操作系統服務而阻塞自己。

● 搶占:當前正運行進程可能被操作系統中斷,並轉換為就緒態。一個新進程到達時,或中斷發生后把一個阻塞態進程置為就緒態時,或出現周期性的時間中斷時,需要進行搶占決策。

經典調度

先來先服務 FCFS

算法描述:非搶占、先請求CPU的進程先分配CPU。

缺點:在長短任務混合的場景下對短任務不友好

最短作業優先 SJF(SPN)

算法描述:非搶占、下次選擇預計時間最短的進程。

缺點:

  • 必須預知任務運行時間
  • 表現嚴重依賴於任務到達時間點
  • 不公平,有飢餓風險

在SJF中加入搶占即是最短剩余時間優先。

搶占:

最短剩余時間有限 SRT

算法描述:搶占、選擇預期剩余時間最短的進程。

缺點:

  • 必須預知任務運行時間
  • 長任務有飢餓風險

時間片輪轉(Round Robin ,RR)

算法描述:搶占、以一個周期(q)產生中斷,當中斷發生時,當前運行的程序置於就緒隊列(隊尾)中,然后基於FCFS選擇下一個就緒作業運行。

缺點:在任務運行時間相似的場景下平均周轉時間高

經典調度算法對比:

image-20210908232322970

實時調度

每個任務都有截止時間(Deadline)。

軟實時(Soft Real Time):允許超過截止時間、視頻播放,每一幀的渲染

硬實時(Hard Real Time):不允許超過截止時間、自動駕駛汽車的剎車任務

最早截止時間優先 (Earliest Deadline First, EDA )

算法描述:每次調度截止時間最近的任務

缺點:在任務不可調度時,會造成多數任務都錯過截止時間(多米諾效應)

優先級調度

算法描述:設置許多獨立的隊列(queue),每個隊列有不同的優先級(priority level)。任何時刻,一個工作只能存在於一個隊列中。優先級調度總是優先執行較高優先級的工作(即在較高級隊列中的工作)。具有同樣的優先級的作業采用輪轉調度。

做法:多級反饋隊列(Multi-level Feedback Queu, MLFQ)

公平共享調度

  • 每個用戶占用的資源是成比例的,而非被任務的數量決定
  • 每個用戶占用的資源是可以被計算的
    • 設定"權重值"以確定相對比例(絕對值不重要)
    • 例:權重為4的用戶使用資源,是權重為2的用戶的2倍

做法:彩票調度

reference

[1] 操作系統概念

[2] 操作系統-精髓與設計原理

[3] 上海交通大學並行與分布式系統研究所-進程/線程調度

[4] 操作系統導論(ostep)

[5] 現代操作系統


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM