作業系統精髓設計原理 程式排程

凡古一往發表於2020-12-18

第二章 程式管理 -排程

2.7 排程的型別

  • 長程排程:決定哪個程式能進入系統成為程式,是建立程式的部分,用時最長
  • 中程排程:決定哪個程式能進入記憶體,是換入程式的部分,用時中等
  • 短程排程:決定哪個程式下次執行,是就緒轉換為執行的部分,用時最短

執行頻繁程度:短程排程>中程排程>長程排程

cpu密集型程式:主要執行計算工作,偶爾用到I/O裝置
I/O密集型程式:執行時間主要取決於I/O操作的時間
排程的目的:滿足系統目標(效能),把程式分配到一個或多個cpu上去

2.7.1 長程排程

  • 控制哪個程式能進來,即控制了併發度(程式密度)
  • 決策參考因素:FCFS、priority、ddl、I/O需求

2.7.2 中程排程

  • 決定哪些程式換入,哪些換出
  • 中程排程是交換功能的一部分
  • 換入取決於系統併發度要求和換出程式的儲存需求

2.7.3 短程排程(分派程式)

  • 決定哪個程式先得到cpu
  • 當前程式阻塞或搶佔發生時,呼叫短程排程

2.8 短程排程的規則

效能指標
  • 響應時間:使用者提出請求到接收響應的時間=輸入傳送t+處理t+響應傳送t
  • 截止時間:任務必須開始的時間或DDL
  • 系統吞吐量:單位時間完成程式數
  • cpu使用率:cpu忙狀態佔比
  • 週轉時間(駐留時間):程式提交到完成的時間=等待資源t+處理t(計算:完成時刻-提交時刻)
  • 平均週轉時間:平均的週轉時間
  • 帶權週轉時間(歸一化週轉時間):週轉時間/系統真正為程式提供服務的時間
  • 平均帶權週轉時間:平均的帶權週轉時間

上面的效能指標按面向使用者和麵向系統分為:
面向使用者:響應時間、週轉時間等、截止時間
面向系統:吞吐量、cpu利用率

非效能指標
  • 可預測性
  • 公平性(無飢餓)
  • 強制優先順序
  • 平衡資源

面向使用者的指標在任何系統都很重要,面向系統的指標在單使用者系統不重要,這些規則不能同時達到最優

2.9 排程的決策模式

分為兩類

  • 搶佔:當前程式可被OS中途停止,轉而執行另一個程式
  • 非搶佔:程式只會被自己阻塞
搶佔的時機
  1. 新程式到達時
  2. 中斷後把一個阻塞態置為就緒態
  3. 時鐘中斷
排程的選擇函式

決定下一個程式是誰
三個引數:

  • w 到目前為止的等待時間
  • e 到目前為止的等待時間
  • s 程式所需總服務時間,s>=e,且需估計或由使用者提供

2.10 排程演算法(重點)

飢餓的理解

輪到該程式使用CPU時,另一個程式以某種原因搶先佔用CPU(搶佔)
幾個人一起吃一塊蛋糕,輪到你吃時,你後邊的人搶到你前面吃掉了你的那一份,沒吃到原本該你吃的東西,你會很飢餓

非搶佔

FCFS、SPN、HRRN

搶佔

RR、SRT、Feedback

開銷小

FCFS、RR

有飢餓

SPN、SRT、Feedback

2.10.1 FCFS先來先服務

  • 按照請求cpu順序執行
  • 對短程式不利,參考超市購物
  • 對I/O密集型不利,因為cpu需求小
  • 屬於非搶佔,無飢餓,響應時間可能很長
  • 早晨食堂排隊買早餐就是先來先服務

2.10.2 RR時間片輪轉排程演算法RoundRobin

  • 在FCFS中加入加入時鐘中斷

  • 在分時系統或事務處理系統中特別有效

  • 屬於搶佔,無飢餓演算法,效能與時間片設定密切

    • 時間片長:對長作業有利
    • 時間片短:對短作業有利
  • 對I/O密集型不利:I/O密集型程式每次短暫使用CPU後,都會再加入佇列尾進行排程,而cpu密集型則可以佔用cpu更長時間,I/O密集型程式所用時間大於預期時間。

    • 你早餐去食堂排隊買兩個雞蛋(短作業),到你的時候買了一個雞蛋飯卡沒錢了(I/O中斷),你只能去充卡,卡充好後(I/O滿足),你再回來排隊,只能從隊尾排起
  • 改進的演算法:URR

  • 新增I/O阻塞完成的程式佇列佇列,該佇列優先順序高於就緒佇列,比RR更公平

    • 你早餐去食堂排隊買兩個雞蛋(短作業),到你的時候買了一個雞蛋飯卡沒錢了(I/O中斷),你只能去充卡,卡充好後(I/O滿足),你再回來排隊,可以只排因為充卡中斷買雞蛋的人排成的隊,而不用去排沒買過飯的人排成的隊
  • 早晨食堂排隊買早餐的基礎上,增加一個時間限制,你30秒之內買不完飯就要重新排隊…

2.10.3 短作業優先SJF/SPN/SPF

  • 該演算法照顧短作業,所以必須事先知道誰“短”,所以該演算法前提為所有程式執行時間已知
  • 屬於非搶佔、有飢餓演算法
  • 減少了平均週轉時間,因為非搶佔,不適用於分時、事務處理系統
  • 使用者估計不準時不能做到SJF
  • 早晨食堂排隊買早飯,誰買東西快誰先買,但一個人正在買的時候另一個人不能插隊

2.10.4 剩餘時間最短者優先演算法SRT

  • 選擇預期剩餘時間最短的程式,是在短作業優先的基礎上增加了搶佔機制
  • 屬於搶佔、有飢餓演算法
  • 該程式必須記錄程式已執行時間
  • 在平均週轉時間上優於短作業優先,也需要預估程式執行時間
  • 早晨食堂排隊買早飯,誰買東西快誰先買,如果小張還有1分鐘才能買完,這時候來了一個還差59秒就能買完的人,新來的人就能插到小張前面買

2.10.5 HRRN 最高響應比優先演算法

  • 當前程式執行完成時,下一個選用響應比最高的程式

  • 屬於非搶佔,有飢餓演算法

  • 響應比=(waitTime+serveTime)/serveTime=1+waitTime/serveTime

  • 你去食堂是為了買早飯,你到食堂的排隊時間+買飯時間再除以買飯時間就是響應比,這個值越大,你買早飯的效率就越低

  • 短作業serveTime小,waitTime/serveTime更大,響應比更大,優先排程

  • 長作業等待時間長了之後,waitTime/serveTime增大,響應比變大,優先排程

  • 該演算法是一種動態優先順序調整演算法,結合了FCFS和SJF

  • 該演算法既照顧了短程式,又不讓長程式長時間飢餓

  • 該程式需要進行響應比計算,需要預估執行時間

  • 去食堂排隊買早飯,小張急著上課,買東西快,或者小李買的慢,但是被插隊了好幾次,阿姨為了不讓大家生氣,允許他倆插隊打飯

2.10.6 FeedBack 反饋排程演算法

  • 該演算法的思路是懲罰長程式,而像SJF、SRT、HRRN是給短程式優惠

  • 屬於搶佔、有飢餓演算法

  • 設定多個優先順序佇列區別對待,各個佇列中時間片可以不一樣長,優先順序高的佇列時間片短

  • 新來的程式位於最高階優先順序佇列尾

  • 先執行優先順序高佇列中的程式,程式時間片用完還沒執行完就會降級到優先順序更低的佇列尾

  • 一般優先順序為i的佇列時間片為2^i

  • 能夠較好的滿足各種型別使用者需求

  • 終端型使用者、短作業使用者:互動作業常為短作業、在比較高的優先順序佇列就能執行完

  • 長程式使用者:程式隨著佇列下降,分配的時間片足夠執行完

  • 去食堂排隊買早飯,有好幾個視窗,但只有一個打飯阿姨,阿姨讓大家排成一個隊,輪流來第一個視窗打飯,在10秒內沒打完飯的人去第二個視窗排隊,等第一個視窗沒人了,阿姨來第二個視窗幫大家打飯,20秒內沒打完的人再去第三個視窗排隊,第三個視窗可能時間限制是40秒,第四個第五個以此類推,要是這時候又來了一個人打飯,阿姨要回到第一個視窗在10秒內幫他打飯,打不完這個人也要挨個去更長時間的視窗排隊

2.11 實時系統與實時排程

一些概念

計算結果存在時效性,過期無意義,如新聞

  • 實時系統:系統可及時(即使)響應外部請求,在規定時間內完成對該事件的處理,並控制所有實時任務協調一致執行
  • 實時任務:具有及時性要求,常常重複執行的特定程式
  • 開始截止時間:到點必須開始
  • 完成截止時間:deadline

2.11.1 實時任務分類

  1. 按有無截止時間
  • 硬實時:必須滿足截止時間,否則產生破環性影響(截止日期前交期末論文
  • 軟實時:不強制要求,超時仍有意義(打算晚上十一點前睡覺,雖然十一點沒睡著,但是比平常睡得早
  1. 按有無週期
  • 非週期性任務:有總的ddl,(3點開始寫寒假作業,6點前寫完
  • 週期性任務:有周期性ddl, (3點開始寫寒假作業,4點前寫完語文部分,5點前寫完數學部分,6點前寫完英語部分

2.11.2 實時OS特點

  • 可確定性:可按約定的固定時間段執行操作
  • 可響應性:關注為中斷提供服務的時間
  • 使用者控制:由使用者區分軟硬實時、設定優先順序
  • 可靠性:實時響應
  • 失效弱化:不能滿足所有程式的實時性時,優先滿足優先順序高的任務的實時性要求,減小損失

2.11.3 實時排程

  1. 靜態表排程:輸入週期性到達時間、執行時間、週期性的最後結束期限和每個任務的相對優先順序,輸出排程表,用於排程實時任務
  • 用於排程週期性實時任務
  • EDF(最早截止時間優先)演算法屬於此類排程
  • 不靈活,任何變動都會引起排程表的修改
  • 有好幾門期末考試,你安排了個日程表來複習,但是有幾個考試改了時間,你之前的日程表也要修改
  1. 靜態優先順序搶佔排程:根據優先順序搶佔
  • 用於排程非實時多道程式系統
  • 一般根據任務的截止時間制定優先順序
  • 複習的時候,想先複習比較重要的科目,再複習不太重要的科目
  1. 動態規劃排程(動態表排程):為新到達的實時任務和當前任務動態建立排程表
  • 在當前任務不會超時的條件下,若新任務也能完成,則執行新任務
  • 複習的時候,每新公佈一門考試的時間,你就將它加到複習計劃裡面
  1. 動態盡力排程
  • 為新到達的任務依據屬性賦予優先順序,優先順序高的先排程
  • 盡最大努力優先排程最高階的任務
  • 缺點:不知道能不能滿足約束時間,有可能會使得原來不會超時的任務也超時
  • 實現簡單,用於非週期性實時任務
  • 複習的時候,還有三天考高數,本來能複習完,突然宣佈高數前一天考大物,只好先去複習大物,結果可能兩個都沒複習完
搶佔方式
  1. 時間片輪轉
  • 響應時間:秒級
  • 時間片執行完由FCFS下一個程式搶佔
  • 廣泛用於分時系統及一般不嚴格的實時處理系統
  1. 優先順序非搶佔
  • 響應時間:百毫秒~秒級
  • 實時程式優先順序更高,優先執行,當前程式完成或阻塞時排程下一個
  • 多用於多道批處理系統及不太嚴格的實時系統
  1. 優先順序搶佔
  • 響應時間:數毫秒~數十毫秒
  • 優先順序+時鐘中斷:實時程式在程式時鐘中斷點或程式阻塞時根據優先順序搶佔
  • 用於一般實時系統
  1. 立即搶佔
  • 響應時間:微秒~毫秒級
  • 按照優先順序直接搶佔
  • 用於苛刻的實時系統

2.11.4 實時排程示例

實時任務排程的參考資訊
  • 就緒時間
  • 開始截止時間
  • 完成截止時間
  • 執行所需時間
  • 資源需求
  • 優先順序
  • 子任務結構:必須執行的部分(硬實時部分)和可選執行的部分
排程思路
  1. 決定排程演算法:根據DDL決定優先順序,誰最早截止先處理誰(EDF)
  2. 決定搶佔方式
  • 開始截止時間明確:採取非搶佔方式(當前程式到點就阻塞,開始排程臨期的程式,臨期程式就不會超時)
  • 完成截止時間明確:採取搶佔方式(根據截止時間判斷什麼時候搶佔)

如:對於完成截止時間明確的週期性實時任務

  • 週期性任務->靜態排程表->EDF演算法
  • 完成截止時間明確->搶佔方式

對於開始截止時間明確的非週期性實時任務

  • 非週期性->允許CPU空閒的EDF演算法
  • 優先排程截止時間最早的任務,並讓其執行完
  • CPU利用率不高,但可以保證系統任務都完成
速率單調排程演算法 RMS
  • 任務速率:任務週期(秒)的倒數,單位為赫茲
  • 優先順序確定
  • 任務週期越短,任務速率越高,優先順序越高
  • 即優先順序函式是任務速率的單調遞增函式
實時系統處理能力限制

即實時任務系統處理要滿足的條件:
系統中各個任務的處理器利用率總和不能超過1

2.11.5 優先順序反轉

  • 即低優先順序搶佔高優先順序的情況,曾發生在美國國家航空航天局的火星探路者上
  • 可發生於任何基於優先順序的可搶佔的排程方案中
  • 解決:優先順序繼承:優先順序較低的任務繼承任何與其共享同一資源的優先順序較高的任務的優先順序

相關文章