【操作系统】进程调度(2b):STCF(最短完成时间优先) 算法 原理与实践
0 前言
接上一篇文章:進程調(diào)度(2a):SJF(短任務(wù)優(yōu)先) 算法 原理與實踐
1 前提鋪墊
與上一篇同。
2 STCF 原理
STCF(Shortest Time-to-Completion First)最短完成時間優(yōu)先。
2.1 算法
還記得上一個算法SJF嗎?它是非搶占式的,只能傻傻地等著長任務(wù)A完成,這顯然是“懦弱”的,并且降低了系統(tǒng)的效率,因此,讓我們給它添加一個搶占功能吧!
搶占什么呢?當然是A了,還是用上次的例子
- A:100
- B:10
- C:20
A在0時刻到達并執(zhí)行,B和C在10時刻到達。之前B和C只能等著A結(jié)束執(zhí)行再按照B、C的順序執(zhí)行,現(xiàn)在,我們有搶占功能了!
在時刻10的時候,Scheduler(調(diào)度器)發(fā)現(xiàn)B和C的執(zhí)行時間比A短,那么好,A你就不要再執(zhí)行了,讓B先來吧! 這里,我們也使用到了上下文切換機制,先保存了A執(zhí)行的狀態(tài),等B、C執(zhí)行完,再讓A繼續(xù)執(zhí)行。
一個問題:究竟是識別A剩余執(zhí)行時間,還是全部執(zhí)行時間,又或者什么呢?A、B和C的執(zhí)行時間,系統(tǒng)又怎樣得知?這些我們以后再談,并且這設(shè)計到了具體實現(xiàn)的層次,現(xiàn)在,我們的假設(shè)還是運行時間是已知的,并且是在抽象層次在談?wù)摗?/p>
這樣,看起來就比之前的SJF棒多了!起碼它學(xué)會了“搶車位”。
現(xiàn)在,Average Turnaround Time = (10 + 30 + 130)/ 3 = 56.67,要知道,之前可是110。
不過,這個算法也會有一些問題,我們下面說一下。
2.2 缺點:長任務(wù)“饑餓”
試想一下,對于一個長任務(wù),如果有遠遠不斷地短任務(wù)進入,那么這個長任務(wù)可能永遠不會被執(zhí)行了……(它也太慘了……)
不僅如此,對于一個交互型程序來說,與用戶交互的響應(yīng)時間(我們下一講說這個指標,簡單來說,就是用戶發(fā)送命令,到看見屏幕產(chǎn)生變化的時間,這應(yīng)該很快才對)就會非常長,想象一下,你敲擊鍵盤的字母A后,等待10s才看見屏幕上顯示了A……這簡直讓人發(fā)瘋!
說明:在原書中沒有給出STCF算法的模擬,因此暫時沒有實踐內(nèi)容,不過因為該算法與SJF的區(qū)別就在于搶占,因此比較容易理解。
2.3 關(guān)注點:順序執(zhí)行的打破
我們之前看到的進程,都是從一開始執(zhí)行,就一直執(zhí)行到完成才停止,這個過程并不需要上下文切換機制(前面的篇章好像寫錯了……),而這一次,我們看到了任務(wù)A被分成了兩段來執(zhí)行,這時候就使用到了上下文切換機制了,被打斷的A,必須要保存現(xiàn)場,然后下一次被執(zhí)行的時候,恢復(fù)現(xiàn)場繼續(xù)執(zhí)行。
這也是我們第一次見到,多個任務(wù)不是順序執(zhí)行的,而是切換執(zhí)行的,下一篇輪轉(zhuǎn)算法,你將更清晰地體會到這一點!
3 核心思想
STCF與SJF本質(zhì)是一樣的,區(qū)別就是,前者是搶占式,后者是非搶占式的。
核心思想就是,讓運行時間短的任務(wù)先執(zhí)行。
這樣做的缺點也分析過,長任務(wù)可能一直得不到執(zhí)行,后續(xù)我們會解決這個問題的。
4 預(yù)告:進程調(diào)度(3):RR(輪轉(zhuǎn)) 算法 原理與實踐
我們接下來會使用輪轉(zhuǎn)算法解決交互式程序的響應(yīng)時間問題。這樣能讓用戶獲得很好的體驗。
下一篇鏈接:RR(輪轉(zhuǎn)) 算法 原理與實踐
總結(jié)
以上是生活随笔為你收集整理的【操作系统】进程调度(2b):STCF(最短完成时间优先) 算法 原理与实践的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 成都欢乐谷最高的过山车叫什么
- 下一篇: 【操作系统】进程调度(4):I/O、不可