如果第一個作業的爆發時間是最高的,FCFS可能會受到佇列影響。 就像在現實生活中一樣,如果佇列在路上經過,那麼其他人可能會被堵塞,直到完全通過。 這也可以在作業系統中進行模擬。
如果CPU在就緒佇列的前端獲得較高突發時間的進程,則較低突發時間的進程可能被阻塞,這意味著如果執行中的作業具有非常高的突發時間,則它們可能永遠不會獲得CPU。 這被稱為佇列效應或飢餓。
範例
在這個例子中,我們有3
個進程被命名為P1
,P2
和P3
。 進程P1
的暴發時間最高。
下表中的周轉時間和等待時間通過公式計算,
Turn Around Time = Completion Time - Arrival Time
Waiting Time = Turn Around Time - Burst Time
在第一種情況下,雖然流程P1到達佇列中的第一個, 該過程的爆發時間是最高的。 由於排程演算法,我們所遵循的是FCFS,因此CPU將首先執行Process P1。
在這個時間表中,系統的平均等待時間將非常高。 這是因為車隊的影響。 其他進程P2,P3必須等待40個單位時間,儘管他們的爆發時間非常短。 這個時間表遭受飢餓。
進程ID | 到達時間 | 突發時間 | 完成時間 | 轉換時間 | 等待時間 |
---|---|---|---|---|---|
1 | 0 | 40 | 40 | 40 | 0 |
2 | 1 | 3 | 43 | 42 | 39 |
2 | 2 | 4 | 12 | 8 | 4 |
3 | 1 | 1 | 44 | 43 | 42 |
平均等待時間= 81/3
在第二種情況下,如果進程P1
本來就已經到達佇列的最後,而其他過程P2
和P3
早於那麼飢餓問題就不存在了。
以下範例顯示了這兩種情況的等待時間的偏差。 雖然時間表的長度是相同的,即44
個單位,但是在這個時間表中等待時間將會減少。
進程ID | 到達時間 | 突發時間 | 完成時間 | 轉換時間 | 等待時間 |
---|---|---|---|---|---|
1 | 1 | 40 | 44 | 43 | 3 |
2 | 0 | 3 | 3 | 3 | 0 |
2 | 2 | 4 | 12 | 8 | 4 |
3 | 0 | 1 | 4 | 4 | 3 |