響應時間
T響應時間 = T首次運行 - T到達時間
引入響應時間的原因:如果使用STCF的調度方式,可以使週轉時間最短,但是,如果短任務很多,則沒有長任務執行的機會,對長任務來說很“不公平”
輪轉
輪轉的思想:設置一個時間片,一個進程使用完一個時間片後,切換到下一個進程。
使用輪轉算法,執行時間長的任務也有機會盡快的運行,從而較長的任務的響應時間也可以變短。
時間片長度必須是時鐘中斷週期的倍數。(任務的切換依賴於時鐘中斷,時鐘中斷將CPU的控制權交給操作系統)
這看起來又是一個完美的算法,是不是忽略了什麼?時間片的長度是多少?
任務切換時,需要進行上下文切換,這是一部分時間成本。如果時間片太短,頻繁的上下文切換會佔用大量的時間;如果時間片太長,則響應時間也會變長。所以,時間片具體的長度,需要權衡。
輪轉的週轉時間
如果只考慮響應時間,在時間片合適的情況下,輪轉是很好的算法。
現在,再來討論一下輪轉的週轉時間
進程編號 | 到達時刻 | 執行時間 |
---|---|---|
0 | 0 | 30 |
1 | 0 | 30 |
2 | 0 | 30 |
暫時不考慮上下文切換的時間成本
如果輪轉時間爲10,且每一個進程被調度的概率相同,則可能會有下面的運行情況:
時刻 | 0 | 10 | 20 | 30 | 40 | 50 | 60 | 70 | 80 |
---|---|---|---|---|---|---|---|---|---|
運行的進程 | 0 | 1 | 2 | 0 | 1 | 2 | 0 | 1 | 2 |
進程編號 | 完成時間 |
---|---|
0 | 70 |
1 | 80 |
2 | 90 |
平均週轉時間 = (70 + 80 + 90)/3
如果不使用輪轉,平均週轉時間 = (30 + 60 + 90)/3
可見,如果要考慮週轉時間,輪轉並不是一個好的算法