操作系統-多級反饋隊列


概述

1962年,Corbato首次提出多級反饋隊列,應用於兼容時分共享系統(CTSS)。Corbato因在CTSS中的貢獻和后來在Multics中的貢獻,獲得了ACM頒發的圖靈獎(Turing Award)。該調度程序經過多年的一系列優化,出現在許多現代操作系統中。

多級反饋隊列需要解決兩方面的問題:

  • 優化周轉時間(T 周轉時間= T 完成時間−T 到達時間
  • 降低響應時間(T 響應時間= T 首次運行−T 到達時間

設計

規則定義

MLFQ 中有許多獨立的隊列(queue),每個隊列有不同的優先級(priority level)。任何時刻,一個工作只能存在於一個隊列中。

  • 規則 1:如果 A 的優先級 > B 的優先級,運行 A(不運行 B)。
  • 規則 2:如果 A 的優先級 = B 的優先級,輪轉運行 A 和 B。
  • 規則 3:工作進入系統時,放在最高優先級(最上層隊列)。
  • 規則 4:一旦工作用完了其在某一層中的時間配額(無論中間主動放棄了多少次 CPU),就降低其優先級(移入低一級隊列)。
  • 規則 5:經過一段時間 S,就將系統中所有工作重新加入最高優先級隊列。

調度原則

規則1和規則2為基礎規則,保證了高優先級的先運行,同等優先級的輪轉執行。

image-20211006145941541

改變優先級

規則3描述了多級反饋隊列的初始狀態,即一個進程進入隊列時,先將其放入最高優先級隊列中。

規則4描述了多級反饋隊列的下調優先級(down)原則,采用時間配額制度(在MLFQ 的每層隊列提供更完善的 CPU 計時方式(accounting)。 調度程序應該記錄一個進程在某一層中消耗的總時間,而不是在調度時重新計時),可以防止某些惡意程序幾乎獨占CPU。

image-20211006151850200

提升優先級

規則5的存在是為了避免飢餓(starvation)問題。解決方法是周期性地提升(boost)所有工作的優先級。

image-20211006152042839

總結

MLFQ不需要對工作的運行方式有先驗知識,而是通過觀察工作的運行來給出對應的優先級。通過這種方式,MLFQ可以同時滿足各種工作的需求:對於短時間運行的交互型工作,獲得類似於SJF/STCF的很好的全局性能,同時對長時間運行的CPU密集型負載也可以公平地、不斷地穩步向前。

因此,許多系統使用某種類型的MLFQ作為自己的基礎調度程序,包括類BSD UNIX系統、Solaris以及Windows NT和其后的Window系列操作系統。

Linux Real-Time Scheduler,使用Multi-level Queue優先級調度

  • 每個任務有自己的優先級、具體策略

  • 具體策略可根據任務需求針對性選擇

    • SCHED_RR:任務執行一定時間片后掛起
    • SCHED_FIFO:任務執行至結束

image-20211006155420540

reference

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

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


免責聲明!

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



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