作業系統(十六)排程演算法(一)

2021-10-03 12:10:23 字數 4295 閱讀 2993

目錄

2.2.4 排程演算法

2.2.4.1 先來先服務(fcfs, first come first serve)

2.2.4.2 短作業/程序優先(sj/pf, shortest job/progress first)

2.2.4.3 高相應比優先演算法(hrrn, highest response ratio next)

2.2.4.4 三種排程演算法的比較

顧名思義。按照「公平」原則,兌先來的程序/作業進行排程。

最短的作業/

程序優先得到服務(所謂「最短」,是指要求服務時間最短),可分為搶占式和非搶占式。

下面我們用乙個例項來演示一下兩種排程演算法到底是怎麼樣執行的:有如下表所示的四個程序,按照先來先服務以及短作業優先演算法計算其指標。

先來先服務:先來的程序先接受服務,所以程序的排程順序就是p1->p2->p3->p4,排程順序如下圖所示

周轉時間=完成時間-到達時間p1:7-0=7;p2: 11-2=9; p3: 12-4=8; p4: 16-5=11

等待時間=完成時間-到達時間-執行時間=周轉時間-執行時間p1=7-7=0

;p2=9-4=5

;p3=8-1=7

;p4=11-4=7

平均周轉時間= (7+9+8+11)/4 = 8.75

平均帶權周轉時間= (1+2.25+8+2.75)/4 = 3.5

平均等待時間

= (0+5+7+7)/4 = 4.75

短作業優先(sjf):每次排程時選擇當前已到達且執行時間最短的作業/程序(非搶占式)。程序最初的到達情況如下:

那麼程序排程順序為:

周轉時間 = 完成時間 - 到達時間p1=7-0=7;p3=8-4=4;p2=12-2=10;p4=16-5=11

帶權周轉時間 = 周轉時間

/執行時間

p1=7/7=1

;p3=4/1=4

;p2=10/4=2.5

;p4=11/4=2.75

等待時間 = 周轉時間

– 執行時間 p1=7-7=0

;p3=4-1=3

;p2=10-4=6

;p4=11-4=7

平均周轉時間

= (7+4+10+11)/4 = 8

平均帶權周轉時間

= (1+4+2.5+2.75)/4 = 2.56

平均等待時間

= (0+3+6+7)/4 = 4

顯然對比fcfs演算法的結果,spf演算法的平均等待/周轉/帶權周轉時間都要更低。

基於搶占式的短作業優先演算法又稱「最短剩餘時間優先演算法(srtn)」:每當有程序加入就緒佇列改變時就需要排程,如果新到達的程序剩餘時間比當前執行的程序剩餘時間更短,則由新程序搶占處理機,當前執行程序重新回到就緒佇列。另外,當乙個程序完成時也需要排程。

現在我們用最短剩餘時間的排程方法來分析一下排程的順序:

0時刻p1到達,剩餘時間為7即

p1(7);

2時刻p2到達,此時p1(5),

p2(4),程序p2搶占p1,p1暫時停止; 4

時刻(p3

到達): p1

(5)、 p2(

2)、 p3

(1),程序p3搶占p2,p2暫時停止;

5時刻(p3

完成且p4

剛好到達):p1

(5)、 p2(

2)、 p

4(4),程序p2搶占p3,p3暫時停止,p2繼續執行;

7時刻(p2

完成):p1

(5)、 p4(

4),程序p4搶占p2,p2暫時停止;

11時刻(p4

完成) :p1

(5),p1執行;

周轉時間 =

完成時間

-到達時間p1=16-0=16

;p2=7-2=5

;p3=5-4=1

;p4=11-5=6

執行時間p1=16/7=2.28

;p2=5/4=1.25

;p3=1/1=1

;p4=6/4=1.5

等待時間 = 周轉時間 –

執行時間  p1=16-7=9

;p2=5-4=1

;p3=1-1=0

;p4=6-4=2

平均周轉時間= (16+5+1+6)/4 = 7

平均帶權周轉時間= (2.28+1.25+1+1.5)/4 = 1.50

平均等待時間= (9+1+0+2)/4 = 3

fcfs 演算法是在每次排程的時候選擇乙個等待時間最長的作業(程序)為其服務。但是沒有考慮到作業的執行時間,因此導致了對短作業不友好的問題。sjf 演算法是選擇乙個執行時間最短的作業為其服務。但是又完全不考慮各個作業的等待時間,因此導致了對長作業不友好的問題,甚至還會造成飢餓問題。於是人們想出了一種既考慮各個作業等待時間又考慮作業執行時間的演算法--高相應比優先演算法(hrrn, highest response ratio next)。

在每次排程時先計算各個作業/程序的響應比,選擇響應比最高的作業/程序為其服務。其中相應比=(等待時間

+要求服務時間)/要求服務時間。需要一提的是高相應比優先演算法是一種非搶占式的演算法。還是上例,運用高相應比優先演算法進行程序排程。

0時刻:只有 p1到達就緒佇列,

p1上處理機

7時刻(p1

主動放棄

cpu): 就緒佇列中有 p2

(響應比

=(5+4)/4=2.25)、 p

3((3+1)/1=4)、 p

4((2+4)/4=1.5),

8時刻(p3

完成): p2

(2.5)、 p

4(1.75)

12時刻(p2

完成):就緒佇列中只剩下 p4

因此排程順序為p1->p3->p2->p4。

演算法搶占?

優點缺點

考慮因素

會不會飢餓

fcfs

非搶占公平;實現簡單

對短作業不利

等待時間

不會sjf

預設為非搶占式,也有sjf的搶占式版本最短剩餘時間優先演算法(srtn)

「最短的」平均等待/周轉時間;

對長作業不利,可能導致飢餓;難以做到真正的短作業

優先執行時間

會hrrn

非搶占上述兩種演算法的權衡折中,綜合考慮的等待時間和執行時間

二者兼顧

不會

作業系統排程演算法

include include include include using namespace std const int maxnum 101 typedef struct information node struct node1 此結構體用於優先順序演算法的搶占式 int priority i...

作業系統排程演算法

在作業系統中存在多種排程演算法,其中有的排程演算法適用於作業排程,有的排程演算法適用於程序排程,有的排程演算法兩者都適用。下面介紹幾種常用的排程演算法。fcfs排程演算法是一種最簡單的排程演算法,該排程演算法既可以用於作業排程也可以用於程序排程。在作業排程中,演算法每次從後備作業佇列中選擇最先進入該...

作業系統 排程演算法

fcfs是最簡單的排程演算法,既可以用於作業排程,也可以用於程序排程,系統將按照作業到達的先後次序來進行排程。sjf演算法是以作業的長短來計算優先順序,作業越短,優先順序越高。作業的長短是以作業所要求的執行時間來衡量的。可以分別用於作業排程和程序排程。缺點 必須預知作業的執行時間 對長作業很不利,長...