首页
/
每日頭條
/
科技
/
操作系統的進程調度
操作系統的進程調度
更新时间:2026-01-27 06:12:46

更多go語言、區塊鍊、後端、架構等内容,公衆号(Go語言之美)持續更新

關于操作系統是如何虛拟化 CPU 的我們上一篇文章已經聊過了,今天再深入一下,聊一聊進程調度那些事。

我們已經知道,對 CPU 虛拟化的目的就是能夠同時運行多個進程(這不是唯一目的),而實質就是對進程的切換,也就是快速的切換執行多個進程,這樣對于用戶而言,所有的進程都是同時進行的,但是我們應該如何對多個進程來公平合理并安全高效的運行呢?所以,我們就出現了很多的進程調度算法。這裡我們由淺入深,來講一下目前比較廣泛的算法。

第一個就是最簡單的先進先出(FIFO),也可以叫做先到先服務。這個算法的最大優點就是簡單。沒錯,就是我們理解的那個進程先來了,CPU 就先處理哪個,等當前的處理結束,在處理下一個。我們假設有三個進程,每一個進程處理需要10s,這時,無論哪個進程先來,最後一個進程的完成時間都是30s,也就是說這種情況下最大完成時間是所有進程需要時間之和。但是如果同樣有三個進程,其中兩個進程需要10s,另外一個進程需要100s,這種情況,最大完成時間就是120s,由于三個進程的各自完成時間不同,所以根據他們到達的順序不同最終的影響也有很大差異。假設三個進程 A(10s)、B(10s)、C(100s),如果按照 A、B、C 的順序到達,那麼執行的過和我們預想的是一樣的,開始十秒鐘,A 執行結束,二十秒後,B 執行結束,一百二十秒後,C執行結束。但是如果是按照相反的順序到達的呢?C、B、A,這樣開始一百秒後,C 執行結束,一百一十秒後,B 執行結束,一百二十秒後,A 執行結束。很顯然,這種情況下,B 和 A 都要等待時間最長的 C 結束才可以執行,所以這個算法的效率根據到達的順序有很大關系。顯然,這并不是我們想要的。在這裡我們計算一下進程的平均周轉時間,當三個進程都需要10s的時候平均周轉時間:(10 20 30)/3=20,因為 A 在第10s完成,B 在第20s完成,C 在第30s完成。大家想一下當進程 A、B、C 時間分别為 10s、10s、100s呢?此時進程的順序是 C、B、A,那麼平均周轉時間就是:(100 110 120)/3=110。這是我們不能接受的。這個問題通常被稱為護航效應(convoy effect)。這種情況在我們生活中也是非常常見的,例如我們去一個地方辦一件事,大多數人隻需要一分鐘就可以辦完,但是前面有一個人需要三十分鐘才可以辦完,那麼後面的人都要一起等待這三十分鐘。

針對上面的問題,我們有新的解決方案:最短任務優先(SJF)與最短完成時間優先(STCF)。

最短任務優先顧名思義,就是需要占用 CPU 時間短的進程先執行,也就是在上面的例子中(A需要10s、B需要20s、C需要100s),先讓A和B先到達,執行結束後在執行C。但是這種算法中,我們依然不能保證C一定最後到達,如果C依然是最先到達,情況依然糟糕,情況下圖:

操作系統的進程調度(操作系統的進程調度算法)1

SJF

為了解決這個問題,我們放款條件,就是我們不需要保證所有的進程必須一次都執行完。現在我們在假設最壞的情況,C先到達,之後才是A和B。當C總執行時間需要100s時,剛開始執行到了10s的時候,B到達,此時我們不需要保證C執行全部完成,發現B的時間隻需要10s就可以結束,此時就暫停C同時開始執行B,當B執行結束後,A又到達,此時我們同樣不執行C而是執行A,當A結束後,我們再回到C,這樣性能又上升了一個台階。如下圖:

操作系統的進程調度(操作系統的進程調度算法)2

STCF

上面的算法中主要考量的是平均周轉時間,但是現實中如果用這樣的算法依然是不可靠的,試想我們打開一個軟件,某一個功能需要等待100s後才反應,那我們豈不是要瘋掉?此時新的度量指标出現了:響應時間(響應時間=首次運行-到達時間)。

我們再介紹新的算法,輪轉(Round-Robin,RR)。顧名思義,就是輪訓執行進程。在一個時間片内運行一個工作,然後切換到運行隊列中的下一個任務。重複執行,直到所有結束。這裡我們有一點需要注意,就是時間片需要是時鐘中斷周期的倍數,時鐘中斷部分這裡不再細講,上一篇文章我們已經聊過了。假如時鐘中斷周期是10ms,那麼時間片可以是10ms、20ms、30ms或者10ms的任何倍數。三個進程A、B、C,所需時間都是5,如果使用RR這種算法,執行過程就是如下圖:

操作系統的進程調度(操作系統的進程調度算法)3

RR

但是這種算法還要付出另外的代價,就是上下文切換的成本。所以說需要找一個合理的時間片。但是最主要的問題是,這種算法與之前的最短任務優先與最短完成時間優先是有些相反的,也就是說,這種算法導緻了周轉時間變得更長。如圖例子,A程序在13完成,B在14,C在15,這是非常可怕的。

現在我們有了兩種算法,各自的度量标準不同,一個是周轉時間,另一個是響應時間,但是魚與熊掌不可兼得的道理大家都知道,那麼我們具體應該怎麼做呢?下一篇文章我們繼續聊更加完善的兩個算法多級反饋隊列與比例份額。​這兩個算法内容較多,所以再單獨拿出來。

今天說的是比較基礎的東西,可以說的進程調度思想的一個起步,有了這個基礎我們就可以更加深入的理解後面的多級反饋隊列算法與比例份額。再啰嗦幾句,最近為什麼要寫操作系統相關的内容呢?因為我覺得這對生産是有很大幫助的,尤其在生産環境中找問題,性能提升等,所以建議大家可以了解一些。這也是我一直所提倡的,語言隻是工具,框架也是工具,但是百變不離其宗,隻有掌握了最核心,最基礎的才能所向披靡。感謝閱讀。​(更多go語言、區塊鍊、後端、架構等内容,公衆号(Go語言之美)持續更新)

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
嬰幼兒奶粉排行
嬰幼兒奶粉排行
第一、惠氏奶粉含有DHA和AA平衡配方比例,牛磺酸和膽堿有助于寶寶的大腦發育。高品質的阿爾法乳清蛋白增強維生素D,幫助寶寶的身體發育。第二、伊利奶粉含有豐富的優質蛋白質,牛奶香氣濃郁,溶解度很高,奶粉不含蔗糖,口感柔滑純正。第三、雀巢奶粉獨特的益生元組合可确保嬰兒大腦中營養素的吸收,幫助寶寶的腸道健康,以及大腦所需的關鍵營養素。第四、諾優能奶粉,DHA和AA有助于大腦和視力發育。鐵和鋅的營養成分可
2026-01-27
騎電動車技巧是什麼
騎電動車技巧是什麼
1、新手學習電動車容易造成傾斜,感覺不穩,也不安全。事實上這些都是沒把握好平衡的表現。學會電動車的首要前提條件是要把握好車子的平衡。對于會騎自行車的人來說,把握平衡并不是一件很困難的事,這時隻需要慢慢轉動油門,掌握好油門增減的幅度,多加練習便可掌握。如果不會騎自行車,那麼學起來自然需要更長的時間,首先要練習把握車子的平衡。2、新手練習平衡時,要保持車子直立,慢慢啟動油門,但要保證車子行駛足夠的動力
2026-01-27
視頻封面圖片怎麼設置
視頻封面圖片怎麼設置
1、首先點擊清爽視頻編輯器”首頁熱門工具中的視頻編輯”功能。2、進入視頻導入頁面後,直接點擊所需要設置封面視頻中的+”,然後點擊下一步”将視頻導入編輯頁面。3、進入新的頁面後,點擊在視頻編輯頁面設置模塊中的封面”功能,進入封面選擇頁面。4、在選擇頁面中,點擊選擇視頻”或選擇相冊”選擇需要的照片或視頻,為視頻進行添加封面。5、返回視頻編輯頁面後,點擊頁面右上角的發布”,将制作完成的視頻分享給其他人。
2026-01-27
opporeno5充電特效怎麼設置
opporeno5充電特效怎麼設置
演示機型:Opporeno5系統版本:ColorOS111、手機選擇點擊自帶的“設置”選項進入設置中心。2、進入設置中心點擊“動态效果”選項按鈕。3、進入動态效果面闆點擊“充電動畫”選項。4、在充電動畫面闆下選擇自己喜歡的“動畫格式”。5、充電動畫設置完成點擊“應用”按鈕即可。O
2026-01-27
iTunes找不到設備怎麼辦
iTunes找不到設備怎麼辦
1、iTunes找不到設備解決途徑通過控制面闆—管理工具—服務—AppleMobileDevice,将其的服務狀态改為啟動”即可。2、如果不想下次再出現iTunes找不到設備的情況出現,還是建議将此服務進程設置為全自動”開啟。3、iTunes找不到設備主要的原因是Apple移動設備服務被禁用或沒有被打開,iPhone、iPad連接電腦打開iTunes提示此iPhone不能使用。大多數比例的情況是安
2026-01-27
Copyright 2023-2026 - www.tftnews.com All Rights Reserved