在搶佔式優先順序排程中,在進程到達就緒佇列時,其優先順序與就緒佇列中存在的其他進程的優先順序以及CPU在該點執行的優先順序進行比較。 在所有可用的進程中具有最高優先順序的那個將被賦予CPU。
搶先優先順序排程和非搶佔優先順序排程之間的區別在於,在搶先優先順序排程中,正在執行的作業可以在更高優先順序作業到達時停止。
一旦所有作業在就緒佇列中可用,演算法將表現為非搶占式優先順序排程,這意味著計劃的作業將執行直至完成並且不會執行搶占。
範例
有7個過程P1,P2,P3,P4,P5,P6和P7給出。 下表列出了他們各自的優先順序,到達時間和爆發時間。
進程Id | 優先順序 | 到達時間 | 爆發時間 |
---|---|---|---|
1 | 2(L) | 0 | 1 |
2 | 6 | 1 | 7 |
3 | 3 | 2 | 3 |
4 | 5 | 3 | 6 |
5 | 4 | 4 | 5 |
6 | 10(H) | 5 | 6 |
7 | 9 | 15 | 8 |
甘特圖製備
在時間0,P1以1單位的爆發時間和優先順序2到達。由於沒有其他進程可用,因此這將被安排到下一個作業到達或完成(以較小者為準)。
在時間1,P2到達。 P1已經完成執行,此時沒有其他進程可用,因此作業系統必須安排它,而不管分配給它的優先順序如何。
下一個進程P3在時間單元2到達,P3的優先順序高於P2。 因此,P2的執行將被停止,並且P3將被安排在CPU上。
在執行P3期間,還有三個進程P4,P5和P6可用。 因為,所有這三個優先順序都低於執行過程,因此PS無法搶佔進程。 P3將完成其執行,然後P5將按照可用進程中的優先順序排列。
同時執行P5,所有進程都可以在就緒佇列中使用。 此時,演算法將開始表現為非搶占式優先順序排程。 因此,現在,一旦所有進程在就緒佇列中都可用,作業系統就會將進程的優先順序最高並執行該進程直到完成。 在這種情況下,P4將按計劃執行,直至完成。
由於P4已完成,因此就緒佇列中具有最高優先順序的其他進程為P2。 因此P2將在下一個時間安排。
P2被給予CPU直到完成。 由於其剩餘的爆發時間為6個單位,因此P7將在此之後安排。
唯一剩下的進程是P6,其優先順序最低,作業系統除非執行它,否則別無選擇。 這將在最後執行。
每個過程的完成時間在GANTT圖表的幫助下確定。 周轉時間和等待時間可以通過以下公式計算。
周轉時間 = 完成時間 - 到達時間
等待時間 = 轉身時間 - 爆發時間
進程Id | 優先順序 | 到達時間 | 爆發時間 | 完成時間 | 周轉時間 | 等待時間 |
---|---|---|---|---|---|---|
1 | 2 | 0 | 1 | 1 | 1 | 0 |
2 | 6 | 1 | 7 | 22 | 21 | 14 |
3 | 3 | 2 | 3 | 5 | 3 | 0 |
4 | 5 | 3 | 6 | 16 | 13 | 7 |
5 | 4 | 4 | 5 | 10 | 6 | 1 |
6 | 10 | 5 | 15 | 45 | 40 | 25 |
7 | 9 | 6 | 8 | 30 | 24 | 16 |
平均等待時間=(0 + 14 + 0 + 7 + 1 + 25 + 16)/ 7 = 63/7 = 9個單位