程序排程演算法

2021-10-04 23:04:03 字數 2332 閱讀 3376

最近在看《作業系統導論》這本書,裡面介紹了幾種程序排程演算法,在此總結一下。

在開始介紹演算法前,先介紹兩個排程指標。

1. 周轉時間

周轉時間定義為任務完成時間減去任務到達時間。

2. 響應時間

相應時間定義為從任務到達系統到首次執行的時間。

首先對系統中執行的程序作如下假設:

1.每乙個工作的執行時間相同。

2.所有工作同時到達。

3.一旦開始,每個工作保持執行直到完成。

4.所有工作只是占用cpu。

5.每個工作的執行時間已知。

先進先出(fifo)

簡單理解就是誰先到誰先執行(讓我想到了資料結構的佇列)。

例子:3個工作a、b、c在大致相同的時間到達系統(a比b早一點點,b比c早一點點),假設每個任務工作10s,則a先開始執行,10s時,a執行完,b開始執行,20s時,b執行完,c開始執行,30s時,c執行完。則平均周轉時間為:(10+20+30)/3 =20。

現在思考下,假設a需要執行100s,b、c還是10s。則周轉時間為:(100+110+120)/3 =110。這就好比你去超市僅僅買了一瓶水,在排隊結賬時,你前面那個人買了整整3大車東西,你這個焦急的心態。

最短任務優先(sjf)

在上面,我們發現了fifo的一些問題,而sjf解決了這個問題。 它讓最短的任務先執行,其次是次短,依次往下排。

例子:我們來看fifo中最後那個問題(還是認為3個工作a、b、c在大致相同的時間到達系統),現在則是b先執行,其次是c,最後是a,則周轉時間為:(10+20+120)/3=50,比fifo有相當大的改善。

現在假設a比b早到10s(b、c到達時間差不多),那麼根據sjf,a在0s時開始執行,b、c要等到a與執行完,即第100s開始執行,110s時,b執行完,b的周轉時間為110-10=100,同理得c的周轉時間為110。則平均周轉時間為:(100+(110-10)+(120-10))/3=103.33。顯然這不是我們希望看到的。

最短完成時間優先(stcf)

根據上面的討論,我們可以想到,如果可以打斷a的執行(讓a暫停),先執行b、c,是不是相應時間會好點。這就是stcf, ,每當有新工作進入系統時,它就會確定剩餘工作和新工作中,誰的時間最少,就先執行該工作。

例子:則上面那個問題,a在0s時開始執行,10s時,b、c進入系統,此時系統檢測到a還剩90s,而b、c只需要10s,所以先執行b、c,故平均周轉時間為:(120+10+20)/3=50,顯著提高。

輪轉(rr)

思考下,假設a、b、c到達系統時間大致相同,且工作時間為10s,則其平均響應時間為(0+10+20)/3=10。現在我們不讓乙個工作一直占用cpu一直到它完成,這就是rr。在乙個時間片內,執行乙個工作,然後切換到下乙個工作。注意時間片的長度必須是時鐘中斷週期的倍數。

例子:現在我們假設乙個時間片為1s,則a的響應時間為0s,b的響應時間為1s,c的響應時間為2s,則平均響應時間為(0+1+2)/3=1,顯著提高。

上面問題你可能會想到,這樣做平均周轉時間會變大((28+29+30)/3)。沒錯,rr優化了響應時間,但其周轉時間沒有stcf好。

以周轉時間為指標,則選stcf,以相應時間為指標,則選rr

多級反饋佇列(mlfq)

mlfq中有許多優先順序不同的佇列,每個佇列可以有很多任務,在同一佇列中的任務優先順序相同。mlfq總是先執行優先順序高的佇列。在同一時刻,任何乙個工作只能處於乙個佇列中。

mlfq的規則(a、b為兩個工作):

如果a的優先順序大於b的優先順序,則執行a,不執行b。

如果a、b優先順序相同,則a、b輪轉執行(rr)。

工作剛開始進入系統時,都放在最高優先順序。

一旦工作用完了其在某一層中的時間配額,就降低其優先順序。

經過一段時間s,就將系統中所有工作重新加入最高優先順序佇列。

彩票排程

假設現有a、b、c三個工作,則為他們都有一定數量的彩票。a的彩票號為0-99,b的為100-149,c的為150-199(注意,擁有彩票的個數佔彩票總數的百分比,就是它占有資源的份額。如上,a佔50%的cpu時間,b、c各占用25%)。現在隨機生成乙個數(範圍為0-199),假設為66,則a執行。

彩票排程最精彩的地方在於其利用了隨機性。

程序排程演算法(程序排程策略)

程序排程演算法 排程演算法是指 根據系統的資源分配策略所規定的資源分配演算法。一 先來先服務和短作業 程序 優先排程演算法 1.先來先服務排程演算法。先來先服務 fcfs 排程演算法是一種最簡單的排程演算法,該演算法既可用於作業排程,也可用於程序排程。fcfs演算法比較有利於長作業 程序 而不利於短...

程序排程演算法

排程演算法是指 根據系統的資源分配策略所規定的資源分配演算法。一 先來先服務和短作業 程序 優先排程演算法 1.先來先服務排程演算法。先來先服務 fcfs 排程演算法是一種最簡單的排程演算法,該演算法既可用於作業排程,也可用於程序排程。fcfs演算法比較有利於長作業 程序 而不利於短作業 程序 由此...

程序排程演算法

先來先服務 first come first service,fcfs 排程演算法按照程序進入就緒佇列的先後順序選擇可以占用處理器的程序。這是一種不可搶占方式的排程演算法,優點是實現簡單,缺點是後來的程序等待cpu的時間較長。它現今主要用作輔助排程法 例如結合在優先順序排程演算法中使用,當有兩個最高...