1. 程式人生 > >可剝奪式處理機排程問題例項及程序排程演算法

可剝奪式處理機排程問題例項及程序排程演算法

問題一:

在0時刻,程序A進入系統,按照這個順序,在30時刻,程序B和程序C也抵達;在90時刻,程序D和程序E也抵達。一個時間片是10個單元。(程序A需要佔用CPU 50個單元;程序B需要佔用CPU 40個單元;程序C需要佔用CPU 30個單元;程序D需要佔用CPU 20個單元;程序E需要佔用CPU 10個單元;)如果按照短作業優先順序的方法,哪個程序最後結束?

問題一求解:

解析:短作業優先=最短剩餘時間作業優先,即是可剝奪式處理機排程問題,支援搶佔。!!!!

看圖一目瞭然。
這裡寫圖片描述

如果按短作業優先順序的方法,程序B最後結束。

問題二:

某多道程式設計系統配有一臺處理器和兩臺外設IO1和IO2,現有3個優先順序由高到低的作業J1、J2和J3都已裝入了主存,它們使用資源的順序和佔用時間分別是:

J1:IO2(30ms),CPU(10ms),IO1(30ms),CPU(10ms) J2:IO1(20ms),CPU(20ms),IO2(40ms)
J3:CPU(30ms),IO1(20ms) 

處理器排程採用可搶佔的優先順序演算法,忽略其他輔助操作時間,回答下列問題:
(1)分別計算作業J1、J2和J3從開始到完成所用的時間
(2)3個作業全部完成時CPU的利用率

問題二求解:

這裡寫圖片描述

注意:CPU不可同時使用(單CPU);每個IO裝置也不可同時使用,如IO1。!!!!

分析:
(1)J1佔用IO2傳輸30ms時,J1傳輸完成,搶佔J2的CPU,執行10ms,再傳輸30ms,執行10ms,完成。由圖可見,J1從開始到完成所用的時間為:30+10+30+10=80ms。

J2與其並行地在IO1上傳輸20ms,搶佔J3的CPU,J2執行10ms後,被J1搶佔CPU,等待10ms之後,J2再次得到CPU,執行10ms,J2啟動IO2傳輸,40ms完成。由圖可見,J2從開始到完成所用的時間為:20+10+10+10+40=90ms。

J3在CPU上執行20ms,被J2搶佔CPU,等待30ms,再執行10ms,等待10ms,J3啟動IO1進行20ms的傳輸,完成。J3從開始到完成所用的時間為:20+30+10+10+20=90ms。

(2)三個作業全部完成時,CPU的利用率為:(10+20+30+10)/90=7/9=78%。

(3)三個作業全部完成時,外設IO1的利用率為:(20+30+20)/90=7/9=78%。

擴充套件知識:作業系統程序排程演算法

FCFS: 先來先服務,也可以稱為先進先出輪轉:以一個週期性間隔產生時鐘中斷,此時當前正在執行的程序被置於就緒佇列,基於FCFS選擇下一個就緒程序執行。

SPN:最短程序優先,下一次選擇所需處理時間最短的程序SRT:最短剩餘時間優先,總是選擇預期剩餘時間最短的程序;

FPF:優先權排程演算法型別,當把該演算法用於作業排程時,系統將從後備佇列中選擇若干個優先權最高的作業裝入記憶體。當用於程序排程時,該演算法是把處理機分配給就緒佇列中優先權最高的程序;又分為:
1)非搶佔式優先權演算法。在這種方式下,系統一旦把處理機分配給就緒佇列中優先權最高的程序後,該程序便一直執行下去,直至完成;或因發生某事件使該程序放棄處理機時,系統方可再將處理機重新分配給另一優先權最高的程序。
2)搶佔式優先權排程演算法:在這種方式下,系統同樣是把處理機分配給優先權最高的程序,使之執行。但在其執行期間,只要又出現了另一個其優先權更高的程序,程序排程程式就立即停止當前程序(原優先權最高的程序)的執行,重新將處理機分配給新到的優先權最高的程序。

HRRN:在批處理系統中,短作業優先演算法是一種比較好的演算法,其主要的不足之處是長作業的執行得不到保證。如果我們能為每個作業引入前面所述的動態優先權,並使作業的優先順序隨著等待時間的增加而以速率a 提高,則長作業在等待一定的時間後,必然有機會分配到處理機。最高響應比優先,R=(w+s)/s,其中R表示響應比,w表示已經等待的時間,s表示期待服務的時間;

時間片輪轉法:在早期的時間片輪轉法中,系統將所有的就緒程序按先來先服務的原則排成一個佇列,每次排程時,把CPU 分配給隊首程序,並令其執行一個時間片。時間片的大小從幾ms 到幾百ms。當執行的時間片用完時,由一個計時器發出時鐘中斷請求,排程程式便據此訊號來停止該程序的執行,並將它送往就緒佇列的末尾;然後,再把處理機分配給就緒佇列中新的隊首程序,同時也讓它執行一個時間片。
多級反饋佇列排程演算法:它是目前被公認的一種較好的程序排程演算法。程序第一次進入系統是放置於RQ0,第一次被強佔並返回就緒態時,放入RQ1,以後每次被強佔就下降一級。如果程序處於最低等級,則不再降級,反覆返回到該佇列,直到結束。