進程調度:根據週轉時間優化

先進先出(FIFO)

先進先出的調度方式,看名字就知道,“大家”先來後到排好隊,一個一個調度。

這樣的調度方式實現起來很簡單,但僅僅這樣就夠了嗎?顯然不是,對於進程的調度,當然有性能的要求。

因此,要先引入一個評價性能的指標,來判斷FIFO的性能。

週轉時間和平均週轉時間

T週轉時間 = T完成時間 - T週轉時間

平均週轉時間,就是將進程的週轉時間加起來,再除以進程數。

T平均週轉時間 = (T進程1週轉時間 + T進程2週轉時間 + ... + T進程n週轉時間)/n

週轉時間是一個性能指標

評價FIFO的性能

先做一個假設,假設可以提前知道進程的運行時間

假設有3個進程:

進程編號 到達時刻 執行時間 完成時刻 週轉時間
0 0 10 10 10
1 1 50 60 59
2 3 5 65 62

所以,平均週轉時間 = (10 + 59 + 62)/3

可以看到,使用FIFO調度的方式,並不是最優的。它只是簡單

思考一下:
如果0號進程運行完成,現在1號進程和2號進程都在等待調度,因爲2號進程的執行時間短,讓2號先執行,這樣就可以減少平均週轉時間。

進程編號 到達時刻 執行時間 完成時刻 週轉時間
0 0 10 10 10
2 3 5 15 12
1 1 50 65 64

平均週轉時間 = (10 + 12 + 64)/3

顯然,平均週轉時間更少了。

短任務優先(SJF)

其實,上面提到個改進方式就是短任務優先。

如果有多個進程可以被調度,則優先調度執行時間短的那個

這樣就能保證平均週轉時間最小嗎?不能

進程編號 到達時刻 執行時間 完成時刻 週轉時間
0 0 10 10 10
1 1 50 60 59
2 15 5 65 50

如果2好進程的執行時間很短,卻要等很長的時間,如果允許2號進程“插隊”,可以減少週轉時間

對於這種“插隊”(搶佔)的改進方式,就有了另一種調度方法:最短完成時間優先(STCF)

最短完成時間優先(STCF)

給SJF添加搶佔,就有了最短完成時間優先

進程編號 到達時刻 執行時間
0 0 10
1 1 50
2 15 5
時刻 0 1 10 15 20 65
0號進程 到達 執行中 執行完成 - - -
1號進程 - 到達 開始執行 被搶佔 開始執行 執行完成
2號進程 - - - 開始執行 執行完成 -

平均週轉時間 = (10 + 64 + 5)/3

這是最好的調度算法嗎?如果僅考慮週轉時間,它是最好的。但是,對於調度算法,並不能只通過週轉時間來衡量。還有另一個指標:響應時間

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章