進程是如何調度的?


本文是操作系統系列第四篇文章,介紹處理機調度進程相關算法。進程調度的算法和調度框架(Kubernetes)類似,可以相互借鑒。原文鏈接,更多內容見公號機器學習與系統,歡迎與我互動~

概念

發生進程切換時,本質是CPU資源占用者間的切換。此時需要保存當前進程在PCB中的執行上下文(CPU狀態),然后恢復下一個進程的執行上下文。

處理機調度涉及兩個方面,一是選擇進程:從就緒隊列中挑選下一個占用CPU運行的進程。二是選擇CPU資源:從多個可用CPU中挑選就緒進程可使用的CPU資源。

准則

調度策略是指確定如何從就緒隊列中選擇下一個執行進程,可以理解為調度算法。評價算法的基准有以下幾個:

  1. CPU使用率:CPU處於忙狀態的時間百分比
  2. 吞吐量:單位時間內完成的進程數量
  3. 周轉時間:進程從初始化到結束(包括等待)的總時間
  4. 就緒等待時間:進程在就緒隊列中的總時間
  5. 響應時間:從提交請求到產生響應所花費的總時間

另外,處理機調度需要保證公平:

  1. 保證每個進程占用相同的CPU時間
  2. 保證每個進程的等待時間相同

算法

先來先服務算法(FCFS: First Come, First Served)

FCFS依據進程進入就緒狀態的先后順序排列,它簡單、易於實現。

但是也存在一些缺點,以上圖為例,進程到達次序不同,對周轉時間影響較大。總結如下:

  1. 平均等待時間波動較大:短進程可能排在長進程后面
  2. I/O資源和CPU資源的利用率較低:CPU密集型進程會導致I/O設備閑置時,I/O密集型進程也等待

短進程優先算法(SPN)

SPN是FCFS算法的改進,它選擇預期執行時間最短進程占用CPU進入運行狀態。SPN算法的優點是具有最優平均周轉時間。缺點:

  1. 可能導致飢餓:連續的短進程流會使長進程無法獲得CPU資源
  2. 需要預知未來:如何評估進程執行時間的長短?一個方法是基於歷史數據估計

最高響應比優先算法(HRRN: Highest Response Ratio Next)

選擇就緒隊列中響應比R值最高的進程,R計算方法如下:
R=(w+s)/s
w: 等待時間(waiting time)
s: 執行時間(service time)

時間片輪轉算法(RR: Round Robin)

RR算法是對FCFS的改進,在FCFS的基礎上加入對進程執行時間(CPU時間片)的限制。當進程的時間片用完后,按照FCFS的規則選擇下一個進程。

上圖是RR算法的示意圖,三個進程按照P1、P2和P3的順序到達,執行時間分別為53、16和68。基准數據如下:

  1. 等待時間
    • P1=(56-20)+(96-76)=56
    • P2=(20-0)=20
    • P3=(36-0)+(76-56)+(109-96)=56+13=69
  2. 平均等待時間:(56+20+69)/3=48.33

RR算法主要開銷在進程的上下文切換,重點是選擇合適的時間片(delta)。

  • delta過大,進程的等待時間過長,易退化成FCFS
  • delta過小,反應快,但是上下文切換頻繁,影響系統吞吐量

根據經驗規則,delta應保證上下文切換開銷處於1%以內。

多級隊列調度算法(MQ)

該算法的思想是把就緒隊列根據更細的維度划分成不同的子隊列,不同隊列選擇不同的算法。如前台交互就緒隊列后台批處理就緒隊列,前台使用RR,后台使用FCFS。

多級反饋隊列算法(MLFQ: Multi Level Feedback Queues)

將就緒隊列中進程按照不同的優先級分成不同的隊列,優先級越高時間片反而越小,進程可以在不同的隊列間移動,如進程在當前的時間片沒有完成,則降到下一個優先級。

MLFQ算法中,CPU密集型進程的優先級下降很快,I/O密集型進程停留在高優先級。

公平共享調度算法(FSS: Fair Share Scheduling)

FSS強調資源的公平分配,對用戶進行分組。用戶組比其他用戶組更重要,則分配更多的資源。未使用的資源按比例分配,沒有達到資源使用率目標的組獲得更高的優先級,這樣就避免不重要的用戶壟斷資源。

傳統算法總結

算法 特點
先來先服務算法(FCFS) 不公平,平均等待時間較差
短進程優先算法(SPN) 不公平,平均等待時間較差
需要精確預測計算時間
可能導致飢餓
最高響應比優先算法(HRRN) 可能導致飢餓
不可搶占
時間片輪轉算法(RR) 可能導致飢餓
多級反饋隊列算法(MLFQ) 多種算法的集成
公平共享調度算法(FSS) 強調公平

實時調度

對時間的要求很嚴格,要求操作系統在一定時間內完成相應功能。它的性能指標有兩個:

  • 時間約束的及時性(deadlines)
  • 速度和平均性能相對不重要

實時操作系統可分為兩類:

  • 強實時操作系統:指定的時間內必須完成重要的任務
  • 弱實時操作系統:重要進程有高優先級,要求盡量但非必須完成

實時調度算法:

  1. 速率單調調度算法(RM, Rate Monotonic)
    • 通過周期安排優先級
    • 周期越短優先級越高
    • 執行周期最短的任務
  2. 最早截止時間優先算法(EDF, Earliest Deadline First)
    • 截止時間越早優先級越高
    • 執行截止時間最早的任務

多處理機調度

即多個處理機組成一個多處理機系統,處理機間可負載共享。

對稱多處理器(SMP, Symmetric multiprocessing)調度

該調度中,每個處理器運行自己的調度程序,調度程序對共享資源的訪問需要進行同步。在分配進程時有靜態進程分配和動態進程分配。

  1. 靜態進程分配
    • 進程從開始到結束都被分配到一個固定的處理機上執行
    • 每個處理機有自己的就緒隊列
    • 調度開銷小
    • 各處理機可能忙閑不均
  2. 動態進程分配
    • 進程在執行中可分配到任意空閑處理機執行
    • 所有處理機共享一個公共的就緒隊列
    • 調度開銷大
    • 各處理機的負載是均衡的

優先級反置

優先級反置是一種現象,發生在基於優先級的調度算法中,即高優先級進程等待低優先級進程的現象。主要原因是資源的占用現象,低優先級占用資源,等待資源使用結束后才能釋放資源,需要相同資源的高優先級進程就需要等待。

下面介紹兩個解決方法。

  1. 優先級繼承(Priority Inheritance):簡單說就是升高占用資源的低優先級進程的優先級,升高成等待資源的高優先級進程。
  2. 優先級天花板協議(priority ceiling protocol):占用資源進程的優先級和所有可能申請該資源的進程的最高優先級相同。

總結

本文介紹了操作系統中進程調度的算法,包括單處理器和多處理器。調度算法的應用很廣泛,從操作系統中的進程到Kubernetes中的Pod調度等,值得深入學習,順便給自己埋個坑,希望完成調度算法系列...

文章持續更新,可以微信搜索「 機器學習與系統 」閱讀最新內容,回復資料 內推 考研獲取我准備的計算機學習資料、工作內推考研參考。


免責聲明!

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



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