進程調度算法(全網最細)

寫在前面:我是【程序員寶藏】的寶藏派發員,致力於創作原創乾貨。我熱愛技術、熱愛開源與分享,創作的【計算機基礎面試問題】系列文章和【計算機基礎主幹知識】系列文章廣受好評!後期會創作更多優質原創系列文章!如果您對計算機基礎知識、編程等感興趣,可以關注我,我們一起成長!

本人力薦:如果覺得CSDN排版不夠美觀,歡迎來我的個人原創公zong號【程序員寶藏】(號如其名,誠不欺你!)查看有紅色重點標記和排版美觀的全系列文章(不細你來找我要紅包
參考鏈接TCP三次握手四次揮手

好多同學問我要pdf版,我乾脆把全部文章都整理成了pdf直接打印版,在公zong號後臺回覆關鍵字【寶藏】即可免費帶回家慢慢看


相關係列文章:


正文開始

1.前導知識簡述

【問】:爲什麼要進行處理機調度?
若沒有處理機調度,同意味着要等到當前運行的進程執行完畢後,下一個進程才能執行,而實際情況中,進程時常需要等待一些外部設備的輸入,而外部設備的速度與處理機相比是非常緩慢的,若讓處理機總是等待外部設備,則對處理機的資源是極大的浪費。而引進處理機調度後,可在運行進程等待外部設備時,把處理機調度給其他進程,從而提高處理機的利用率。用一句簡單的話說,就是爲了合理地處理計算機的軟/硬件資源。

所謂進程調度方式,是指當某個進程正在處理機上執行時,若有某個更爲重要或緊迫的進程需要處理,即有優先權更高的進程進入就緒隊列,此時應如何分配處理機。通常有以下兩種進程調度方式:

  1. 非剝奪調度方式,又稱非搶佔方式。非剝奪調度方式是指當一個進程正在處理機上執行時,即使有某個更爲重要或緊迫的進程進入就緒隊列,仍然讓正在執行的進程繼續執行,直到該進程完成或發生某種事件而進入阻塞態時,才把處理機分配給更爲重要或緊迫的進程。

這種方式的優點是實現簡單、系統開銷小,適用於大多數的批處理系統,但它不能用於分時系統和大多數的實時系統。

  1. 剝奪調度方式,又稱搶佔方式。剝奪調度方式是指當一個進程正在處理機上執行時,若有某個更爲重要或緊迫的進程需要使用處理機,則立即暫停正在執行的進程,將處理機分配給這個更爲重要或緊迫的進程。採用剝奪式的調度,對提高系統吞吐率和響應效率都有明顯的好處。

但“剝奪”不是一種任意的行爲,必須遵循一定的原則,主要有優先權、段進程優先和時間片原則等

調度的基本評價準則
  1. CPU利用率
  2. 系統吞吐量:單位時間內CPU完成作業的數量
  3. 週轉時間:作業完成時間 - 作業提交時間
  4. 等待時間:等待時間指進程處於等處理機狀態的時間之和,等待時間越長,用戶滿意度越低。處理機調度算法實際上並不影響作業執行或輸入/輸出操作的時間,隻影響作業在就緒隊列中等待所花的時間。因此,衡量一個調度算法的優劣,常常只需簡單地考察等待時間。
  5. 響應時間:響應時間指從用戶提交請求到系統首次產生響應所用的時間。在交互式系統中,週轉時間不可能是最好的評價準則,一般採用響應時間作爲衡量調度算法的重要準則之一。從用戶角度來看,調度策略應儘量降低響應時間,使響應時間處在用戶能接受的範圍之內。

2.先來先服務調度算法(FCFS)

FCFS 調度算法是一種最簡單的調度算法,它既可用於作業調度,又可用於進程調度。在作業調度中,算法每次從後備作業隊列中選擇最先進入該隊列的一個或兒個作業,將它們調入內存,分配必要的資源,創建進程並放入就緒隊列。

在過程調度中, FCFS調度算法每次從就緒隊列中選擇最先進入該隊列的進程,將處理機分配給它,使之投入運行,直到完成或因某種原因而阻塞時才釋放處理機。

FCFS調度算法屬於不可剝奪算法。從表面上看,它對所有作業都是公平的,但若一個長作業先到達系統,就會使後面的許多短作業等待很長時間,因此它不能作爲分時系統和實時系統的主要調度策略。但它常被結合在其他調度策略中使用。例如,在使用優先級作爲調度策略的系統中,往往對多個具有相同優先級的進程按FCFS原則處理。

FCFS 調度算法的特點是算法簡單,但效率低;對長作業比較有利,但對短作業不利(相對SPF和高響應比);有利於CPU繁忙型作業,而不利於I/0繁忙型作業。【跨考解答】:爲什麼CPU繁忙型是長作業,因爲長短是使用CPU的長短,I/O繁忙型使用CPU比較短。

3.短進程優先調度算法(SPF)

短作業(進程)優先調度算法是指對短作業(進程)優先調度的算法。短進程優先(SPF) 調度算法從就緒隊列中選擇一個估計運行時間最短的進程,將處理機分配給它,使之立即執行,直到完成或發生某事件而阻塞時,才釋放處理機。(每次調度都選就緒隊列中最短的)

SPF調度算法也存在不容忽視的缺點:1) 該算法對長作業不利。更爲嚴重的是,若有一長進程進入就緒隊列,由於調度程序總是優先調度那些(即使是後來進來的)短作業,將導致長作業長期不被調度(飢餓)。
2)該算法完全未考慮作業的緊迫程度,因而不能保證緊追性作業會被及時處理。
3)由於作業的長短只是根據用戶所提供的估計執行時間而定的,而用戶又可能會有意或無
意地縮短其作業的估計運行時間,致使該算法不一定能真正做到短作業優先調度。

【注意】 SPF調度算法的平均等待時間、平均週轉時間最少。

4.優先級調度算法

在進程調度中,優先級調度算法每次從就緒隊列中選擇優先級最高的進程,將處理機分配給它,使之投入運行。

根據新的更高優先級進程能否搶佔正在執行的進程,可將該調度算法分爲如下兩種:

  1. 非剝奪式優先級調度算法。當一個進程正在處理機上運行時,即使有某個更爲重要或緊迫的進程進入就緒隊列,仍然讓正在運行的進程繼續運行,直到由於其自身的原因而主動讓出處理機時(任務完成或等待事件),才把處理機分配給更爲重要或緊迫的進程。
  2. 剝奪式優先級調度算法。當一個進程正在處理機上運行時,若有某個更爲重要或緊迫的進程進入就緒隊列,則立即暫停正在運行的進程,將處理機分配給更重要或緊迫的進程。

而根據進程創建後其優先級是否可以改變,可以將進程優先級分爲以下兩種:

  1. 靜態優先級。優先級是在創建進程時確定的,且在進程的整個運行期間保持不變。確定靜態優先級的主要依據有進程類型、進程對資源的要求、用戶要求。
  2. 動態優先級。在進程運行過程中,根據進程情況的變化動態調整優先級。動態調整優先級的主要依據有進程佔有CPU 時間的長短、就緒進程等待CPU 時間的長短。

一般來說,進程優先級的設置可以參照以下原則:

  1. 系統進程>用戶進程。系統進程作爲系統的管理者,理應擁有更高的優先級。
  2. 交互型進程>非交互型進程(或前臺進程>後臺進程)。大家平時在使用手機時,在前臺運行的正在和你交互的進程應該更快速地響應你,因此自然需要被優先處理,即要有更高的優先級。
  3. I/0 型進程>計算(CPU)型進程。我們知道, I/0 設備(如打印機)的處理速度要比CPU 慢得多,因此若將I/0 型進程的優先級設置得更高,就更有可能讓I/0 設備儘早開始工作,進而提升系統的整體效率。

5.時間片輪轉調度算法

時間片輪轉調度算法主要適用於分時系統。在這種算法中,系統將所有就緒進程按到達時間
的先後次序排成一個隊列,進程調度程序總是選擇就緒隊列中的第一個進程執行,即先來先服務的原則,但僅能運行一個時間片,如l00ms 。在使用完一個時間片後,即使進程並未完成其運行,它也必須釋放出(被剝奪)處理機給下一個就緒的進程,而被剝奪的進程返回到就緒隊列的末尾重新排隊,等候再次運行。

在時間片輪轉調度算法中,時間片的大小對系統性能的影響很大。若時間片足夠大,以至於所有進程都能在一個時間片內執行完畢,則時間片輪轉調度算法就退化爲先來先服務調度算法。若時間片很小,則處理機將在進程間過於頻繁地切換,使處理機的開銷增大,而真正用於運行用戶進程的時間將減少。因此,時間片的大小應選擇適當。

時間片的長短通常由以下因素確定:系統的響應時間、就緒隊列中的進程數目和系統的處理
能力。

6.高響應比優先調度算法

高響應比優先調度算法是對FCFS調度算法和SPF調度算法的一種綜合平衡,同時考慮了每個作業的等待時間和估計的運行時間。在每次進行作業調度時,先計算後備作業隊列中每個作業的響應比,從中選出響應比最高的作業投入運行。響應比的變化規律可描述爲:
響應比=(等待時間+要求服務時間)/要求服務時間
根據公式可知:

  1. 作業的等待時間相同時,要求服務時間越短,響應比越高,有利於短作業。
  2. 要求服務時間相同時,作業的響應比由其等待時間決定,等待時間越長,其響應比越高,因而它實現的是先來先服務。
  3. 對於長作業,作業的響應比可以隨等待時間的增加而提高,等待時間足夠長時,其響應比便可升到很高,從而也可獲得處理機。因此,克服了飢餓狀態,兼顧了長作業。

7.多級反饋隊列調度算法

多級反饋隊列調度算法是時間片輪轉調度算法和優先級調度算法的綜合與發展,如下圖所示。通過動態調整進程優先級和時間片大小,多級反饋隊列調度算法可以兼顧多方面的系統目標。例如,爲提高系統吞吐量和縮短平均週轉時間而照顧短進程;爲獲得較好的I/0 設備利用率和縮短響應時間而照顧I/0 型進程;同時,也不必事先估計進程的執行時間。

多級反饋隊列調度算法的實現思想如下:

  1. 設置多個就緒隊列,併爲各個隊列賦予不同的優先級,第1 級隊列的優先級最高,第2級隊列次之,其餘隊列的優先級逐次降低。
  2. 賦予各個隊列中進程執行時間片的大小各不相同。在優先級越高的隊列中,每個進程的運行時間片越小。例如,第2級隊列的時間片要比第1級隊列的時間片長1倍。
  3. 一個新進程進入內存後,首先將它放入第1 級隊列的末尾,按FCFS 原則排隊等待調度。當輪到該進程執行時,如它能在該時間片內完成,便可準備撤離系統;若它在一個時間片結束時尚未完成,調度程序便將該進程轉入第2 級隊列的末尾,再同樣按FCFS 原則等待調度執行;若它在第2 級隊列中運行一個時間片後仍未完成,再以同樣的方法放入第3級隊列……
  4. 僅當第1 級隊列爲空時,調度程序才調度第2 級隊列中的進程運行;僅當第1~(i-1)級隊列均爲空時,纔會調度第i 級隊列中的進程運行。若處理機正在執行第i 級隊列中的某進程,這時又有新進程進入優先級較高的隊列[第1~(i-1)中的任何一個隊列],則此時新進程將搶佔正在運行進程的處理機,即由調度程序把正在運行的進程放回第i 級隊列的末尾,把處理機分配給新到的更高優先級的進程。

多級反饋隊列的優勢有以下幾點:1) 終端型作業用戶:短作業優先。2) 短批處理作業用戶:週轉時間較短。3) 長批處理作業用戶:經過前面幾個隊列得到部分執行,不會長期得不到處理。

不要忘記去我的個人原創公zong號【程序員寶藏】----專注於計算機基礎、編程、分享,獲取【寶藏】哦!
在這裏插入圖片描述

作爲過來人,有考研的小夥伴可以加我好友(公zong號有二維碼,備註【考研】),免費解答相關問題,做你的知心大哥哥!我們一研爲定


覺得有收穫?希望老鐵們來個三連擊(點贊、評論、收藏),讓更多的人看到這篇文章!順便也激勵下我,嘿嘿!

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