排程算法
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISPrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdsATOfd3bkFGazxCMx8VesATMfhHLlN3XnxCMwEzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5iY1QmMxQjY0ITZmJTO4EGMkFmNjFzM5UGMwEmY1EDN58CXwIzLclDMxIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL0M3Lc9CX6MHc0RHaiojIsJye.png)
一、先來先服務(FCFS,First Come First Serve)
例題:各程序到達就緒隊列的時間、需要的運作時間如下表所示。使用先來先服務排程算法,計算各程序的等待時間、平均等待時間、周轉時間、平均周轉時間、帶權周轉時間、平均帶權周轉時間。
先來先服務排程算法:按照到達的先後順序排程,事實上就是等待時間越久的越優先得到服務。
是以,排程順序為:P1 →P2→P3→P4
注意:本例中的程序都是純計算型的程序,一個程序到達後要麼在等待,要麼在運作。如果是又有計算、又有I/O操作的程序,其等待時間就是周轉時間-運作時間-I/O操作的時間
二、短作業優先(SJF, Shortest Job First )
例題:各程序到達就緒隊列的時間、需要的運作時間如下表所示。使用非搶占式(嚴格來說,用于程序排程應該稱為短程序優先排程算法(SPF))的短作業優先排程算法,計算各程序的等待時間、平均等待時間、周轉時間、平均周轉時間、帶權周轉時間、平均帶權周轉時間。
短作業/程序優先排程算法:每次排程時選擇目前已到達且運作時間最短的作業/程序。
是以,排程順序為:P1→P3→P2→P4
對比FCFS算法的結果,顯然SPF算法的平均等待/周轉/帶權周轉時間都要更低
例題:各程序到達就緒隊列的時間、需要的運作時間如下表所示。使用搶占式(搶占式的短作業優先算法又稱“最短剩餘時間優先算法(SRTN))的短作業優先排程算法,計算各程序的等待時間、平均等待時間、周轉時間、平均周轉時間、帶權周轉時間、平均帶權周轉時間。
最短剩餘時間優先算法:每當有程序加入就緒隊列改變時就需要排程,如果新到達的程序剩餘時間比目前運作的程序剩餘時間更短,則由新程序搶占處理機,目前運作程序重新回到就緒隊列。另外,當一個程序完成時也需要排程
需要注意的是,當有新程序到達時就緒隊列就會改變,就要按照上述規則進行檢查。以下Pn(m)表示目前Pn程序剩餘時間為m。各個時刻的情況如下:
0時刻(P1到達):P1(7)
2時刻(P2到達)????1(5)、 P2(4)
4時刻(P3到達)????1(5) 、 P2(2)、 P3(1)
5時刻(P3完成且P4剛好到達): P1(5)、 P2(2) 、 P4(4)
7時刻(P2完成)????1(5)、 P4 (4)
11時刻(P4完成):P1(5)
對比非搶占式的短作業優先算法,顯然搶占式的這幾個名額又要更低
注意幾個小細節:
1.如果題目中未特别說明,所提到的“短作業/程序優先算法”預設是非搶占式的
2.很多書上都會說“SJF排程算法的平均等待時間、平均周轉時間最少”
嚴格來說,這個表述是錯誤的,不嚴謹的。之前的例子表明,最短剩餘時間優先算法得到的平均等待時間、平均周轉時間還要更少。應該加上一個條件“在所有程序同時可運作時,采用SJF排程算法的平均等待時間、平均周轉時間最少”;或者說“在所有程序都幾乎同時到達時,采用SJF排程算法的平均等待時間、平均周轉時間最少”;如果不加上述前提條件,則應該說“搶占式的短作業/程序優先排程算法(最短剩餘時間優先, SRNT算法)的平均等待時間、平均周轉時間最少”
3.雖然嚴格來說,SIF的平均等待時間、平均周轉時間并不一定最少,但相比于其他算法(如FCFS),SJF依然可以獲得較少的平均等待時間、平均周轉時間
4.如果選擇題中遇到“SJF算法的平均等待時間、平均周轉時間最少”的選項,那最好判斷其他選項是不是有很明顯的錯誤,如果沒有更合适的選項,那也應該選擇該選項
對FCFS和SJF兩種算法的思考..
FCFS算法是在每次排程的時候選擇一個等待時間最長的作業(程序)為其服務。但是沒有考慮到作業的運作時間,是以導緻了對短作業不友好的問題
SJF算法是選擇一個執行時間最短的作業為其服務。但是又完全不考慮各個作業的等待時間,是以導緻了對長作業不友好的問題,甚至還會造成饑餓問題
能不能設計一個算法,即考慮到各個作業的等待時間,也能兼顧運作時間呢?
三、高響應比優先(HRRN,Highest Response Ratio Next)
例題:各程序到達就緒隊列的時間、需要的運作時間如下表所示。使用高響應比優先排程算法,計算各程序的等待時間、平均等待時間、周轉時間、平均周轉時間、帶權周轉時間、平均帶權周轉時間。
高響應比優先算法:非搶占式的排程算法,隻有目前運作的程序主動放棄CPU時(正常/異常完成,或主動阻塞),才需要進行排程,排程時計算所有就緒程序的響應比,選響應比最高的程序上處理機。