日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

【Linux系统编程】进程常用调度算法

發(fā)布時間:2024/4/21 linux 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Linux系统编程】进程常用调度算法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

00. 目錄

文章目錄

    • 00. 目錄
    • 01. 概述
    • 02. 先來先服務(wù)調(diào)度算法
    • 03. 時間片輪轉(zhuǎn)調(diào)度法
    • 04. 短作業(yè)(SJF)優(yōu)先調(diào)度算法
    • 05. 最短剩余時間優(yōu)先
    • 06. 高響應(yīng)比優(yōu)先調(diào)度算法
    • 07. 優(yōu)先級調(diào)度算法
    • 08. 多級反饋隊(duì)列調(diào)度算法

01. 概述

調(diào)度算法是指:根據(jù)系統(tǒng)的資源分配策略所規(guī)定的資源分配算法

02. 先來先服務(wù)調(diào)度算法

? 先來先服務(wù)調(diào)度算法是一種最簡單的調(diào)度算法,也稱為先進(jìn)先出或嚴(yán)格排隊(duì)方案。當(dāng)每個進(jìn)程就緒后,它加入就緒隊(duì)列。當(dāng)前正運(yùn)行的進(jìn)程停止執(zhí)行,選擇在就緒隊(duì)列中存在時間最長的進(jìn)程運(yùn)行。該算法既可以用于作業(yè)調(diào)度,也可以用于進(jìn)程調(diào)度。先來先去服務(wù)比較適合于常作業(yè)(進(jìn)程),而不利于段作業(yè)(進(jìn)程)。

FCFS調(diào)度算法是一種最簡單的調(diào)度算法,該調(diào)度算法既可以用于作業(yè)調(diào)度也可以用于進(jìn)程調(diào)度。在作業(yè)調(diào)度中,算法每次從后備作業(yè)隊(duì)列中選擇最先進(jìn)入該隊(duì)列的一個或幾個作業(yè),將它們調(diào)入內(nèi)存,分配必要的資源,創(chuàng)建進(jìn)程并放入就緒隊(duì)列。

? 在進(jìn)程調(diào)度中,FCFS調(diào)度算法每次從就緒隊(duì)列中選擇最先進(jìn)入該隊(duì)列的進(jìn)程,將處理機(jī)分配給它,使之投入運(yùn)行,直到完成或因某種原因而阻塞時才釋放處理機(jī)。

? 下面通過一個實(shí)例來說明FCFS調(diào)度算法的性能。假設(shè)系統(tǒng)中有4個作業(yè),它們的提交時間分別是8、8.4、8.8、9,運(yùn)行時間依次是2、1、0.5、0.2,系統(tǒng)釆用FCFS調(diào)度算法,這組作業(yè)的平均等待時間、平均周轉(zhuǎn)時間和平均帶權(quán)周轉(zhuǎn)時間如下表所示。

作業(yè)號提交時間運(yùn)行時間開始時間等待時間完成時間周轉(zhuǎn)時間帶權(quán)周轉(zhuǎn)時間
182801021
28.41101.6112.62.6
38.80.5112.211.52.75.4
490.211.52.511.72.713.5

平均等待時間 t = (0+1.6+2.2+2.5)/4=1.575
平均周轉(zhuǎn)時間 T = (2+2.6+2.7+2.7)/4=2.5
平均帶權(quán)周轉(zhuǎn)時間 W = (1+2.6+5.牡13.5)/4=5.625

? FCFS調(diào)度算法屬于不可剝奪算法。從表面上看,它對所有作業(yè)都是公平的,但若一個長作業(yè)先到達(dá)系統(tǒng),就會使后面許多短作業(yè)等待很長時間,因此它不能作為分時系統(tǒng)和實(shí)時系統(tǒng)的主要調(diào)度策略。但它常被結(jié)合在其他調(diào)度策略中使用。例如,在使用優(yōu)先級作為調(diào)度策略的系統(tǒng)中,往往對多個具有相同優(yōu)先級的進(jìn)程按FCFS原則處理。

? FCFS調(diào)度算法的特點(diǎn)是算法簡單,但效率低;對長作業(yè)比較有利,但對短作業(yè)不利(相對SJF和高響應(yīng)比);有利于CPU繁忙型作業(yè),而不利于I/O繁忙型作業(yè)。

03. 時間片輪轉(zhuǎn)調(diào)度法

時間片輪轉(zhuǎn)調(diào)度算法主要適用于分時系統(tǒng)。在這種算法中,系統(tǒng)將所有就緒進(jìn)程按到達(dá)時間的先后次序排成一個隊(duì)列,進(jìn)程調(diào)度程序總是選擇就緒隊(duì)列中第一個進(jìn)程執(zhí)行,即先來先服務(wù)的原則,但僅能運(yùn)行一個時間片,如100ms。在使用完一個時間片后,即使進(jìn)程并未完成其運(yùn)行,它也必須釋放出(被剝奪)處理機(jī)給下一個就緒的進(jìn)程,而被剝奪的進(jìn)程返回到就緒隊(duì)列的末尾重新排隊(duì),等候再次運(yùn)行。

? 在時間片輪轉(zhuǎn)調(diào)度算法中,時間片的大小對系統(tǒng)性能的影響很大。如果時間片足夠大,以至于所有進(jìn)程都能在一個時間片內(nèi)執(zhí)行完畢,則時間片輪轉(zhuǎn)調(diào)度算法就退化為先來先服務(wù)調(diào)度算法。如果時間片很小,那么處理機(jī)將在進(jìn)程間過于頻繁切換,使處理機(jī)的開銷增大,而真正用于運(yùn)行用戶進(jìn)程的時間將減少。因此時間片的大小應(yīng)選擇適當(dāng)。

? 時間片的長短通常由以下因素確定:系統(tǒng)的響應(yīng)時間、就緒隊(duì)列中的進(jìn)程數(shù)目和系統(tǒng)的處理能力。

04. 短作業(yè)(SJF)優(yōu)先調(diào)度算法

? 短作業(yè)(進(jìn)程)優(yōu)先調(diào)度算法是指對短作業(yè)(進(jìn)程)優(yōu)先調(diào)度的算法。短作業(yè)優(yōu)先(SJF)調(diào)度算法是從后備隊(duì)列中選擇一個或若干個估計運(yùn)行時間最短的作業(yè),將它們調(diào)入內(nèi)存運(yùn)行。而短進(jìn)程優(yōu)先(SPF)調(diào)度算法,則是從就緒隊(duì)列中選擇一個估計運(yùn)行時間最短的進(jìn)程,將處理機(jī)分配給它,使之立即執(zhí)行,直到完成或發(fā)生某事件而阻塞時,才釋放處理機(jī)。

? 短作業(yè)優(yōu)先調(diào)度算法是一個非搶占策略,他的原則是下一次選擇預(yù)計處理時間最短的進(jìn)程,因此短進(jìn)程將會越過長作業(yè),跳至隊(duì)列頭。該算法即可用于作業(yè)調(diào)度,也可用于進(jìn)程調(diào)度。但是他對長作業(yè)不利,不能保證緊迫性作業(yè)(進(jìn)程)被及時處理,作業(yè)的長短只是被估算出來的。

缺點(diǎn):

  • 該算法對長作業(yè)不利,SJF調(diào)度算法中長作業(yè)的周轉(zhuǎn)時間會增加。更嚴(yán)重的是,如果有一長作業(yè)進(jìn)入系統(tǒng)的后備隊(duì)列,由于調(diào)度程序總是優(yōu)先調(diào)度那些 (即使是后進(jìn)來的)短作業(yè),將導(dǎo)致長作業(yè)長期不被調(diào)度(“饑餓”現(xiàn)象,注意區(qū)分“死鎖”。后者是系統(tǒng)環(huán)形等待,前者是調(diào)度策略問題)。
  • 該算法完全未考慮作業(yè)的緊迫程度,因而不能保證緊迫性作業(yè)會被及時處理。
  • 由于作業(yè)的長短只是根據(jù)用戶所提供的估計執(zhí)行時間而定的,而用戶又可能會有意或無意地縮短其作業(yè)的估計運(yùn)行時間,致使該算法不一定能真正做到短作業(yè)優(yōu)先調(diào)度。

【注意】 SJF調(diào)度算法的平均等待時間、平均周轉(zhuǎn)時間最少。

05. 最短剩余時間優(yōu)先

? 最短剩余時間是針對最短進(jìn)程優(yōu)先增加了搶占機(jī)制的版本。在這種情況下,進(jìn)程調(diào)度總是選擇預(yù)期剩余時間最短的進(jìn)程。當(dāng)一個進(jìn)程加入到就緒隊(duì)列時,他可能比當(dāng)前運(yùn)行的進(jìn)程具有更短的剩余時間,因此只要新進(jìn)程就緒,調(diào)度程序就能可能搶占當(dāng)前正在運(yùn)行的進(jìn)程。像最短進(jìn)程優(yōu)先一樣,調(diào)度程序正在執(zhí)行選擇函數(shù)是必須有關(guān)于處理時間的估計,并且存在長進(jìn)程饑餓的危險。

06. 高響應(yīng)比優(yōu)先調(diào)度算法

? 根據(jù)比率:R=(w+s)/s (R為響應(yīng)比,w為等待處理的時間,s為預(yù)計的服務(wù)時間)

如果該進(jìn)程被立即調(diào)用,則R值等于歸一化周轉(zhuǎn)時間(周轉(zhuǎn)時間和服務(wù)時間的比率)。R最小值為1.0,只有第一個進(jìn)入系統(tǒng)的進(jìn)程才能達(dá)到該值。調(diào)度規(guī)則為:當(dāng)前進(jìn)程完成或被阻塞時,選擇R值最大的就緒進(jìn)程,它說明了進(jìn)程的年齡。當(dāng)偏向短作業(yè)時,長進(jìn)程由于得不到服務(wù),等待時間不斷增加,從而增加比值,最終在競爭中贏了短進(jìn)程。和最短進(jìn)程優(yōu)先、最短剩余時間優(yōu)先一樣,使用最高響應(yīng)比策略需要估計預(yù)計服務(wù)時間。

? 高響應(yīng)比優(yōu)先調(diào)度算法主要用于作業(yè)調(diào)度,該算法是對FCFS調(diào)度算法和SJF調(diào)度算法的一種綜合平衡,同時考慮每個作業(yè)的等待時間和估計的運(yùn)行時間。在每次進(jìn)行作業(yè)調(diào)度時,先計算后備作業(yè)隊(duì)列中每個作業(yè)的響應(yīng)比,從中選出響應(yīng)比最高的作業(yè)投入運(yùn)行。

根據(jù)公式可知:

  • 當(dāng)作業(yè)的等待時間相同時,則要求服務(wù)時間越短,其響應(yīng)比越高,有利于短作業(yè)。
  • 當(dāng)要求服務(wù)時間相同時,作業(yè)的響應(yīng)比由其等待時間決定,等待時間越長,其響應(yīng)比越高,因而它實(shí)現(xiàn)的是先來先服務(wù)。
  • 對于長作業(yè),作業(yè)的響應(yīng)比可以隨等待時間的增加而提高,當(dāng)其等待時間足夠長時,其響應(yīng)比便可升到很高,從而也可獲得處理機(jī)??朔损囸I狀態(tài),兼顧了長作業(yè)。

07. 優(yōu)先級調(diào)度算法

優(yōu)先級調(diào)度算法又稱優(yōu)先權(quán)調(diào)度算法,該算法既可以用于作業(yè)調(diào)度,也可以用于進(jìn)程調(diào)度,該算法中的優(yōu)先級用于描述作業(yè)運(yùn)行的緊迫程度。

在作業(yè)調(diào)度中,優(yōu)先級調(diào)度算法每次從后備作業(yè)隊(duì)列中選擇優(yōu)先級最髙的一個或幾個作業(yè),將它們調(diào)入內(nèi)存,分配必要的資源,創(chuàng)建進(jìn)程并放入就緒隊(duì)列。在進(jìn)程調(diào)度中,優(yōu)先級調(diào)度算法每次從就緒隊(duì)列中選擇優(yōu)先級最高的進(jìn)程,將處理機(jī)分配給它,使之投入運(yùn)行。

根據(jù)新的更高優(yōu)先級進(jìn)程能否搶占正在執(zhí)行的進(jìn)程,可將該調(diào)度算法分為:

  • 非剝奪式優(yōu)先級調(diào)度算法。當(dāng)某一個進(jìn)程正在處理機(jī)上運(yùn)行時,即使有某個更為重要或緊迫的進(jìn)程進(jìn)入就緒隊(duì)列,仍然讓正在運(yùn)行的進(jìn)程繼續(xù)運(yùn)行,直到由于其自身的原因而主動讓出處理機(jī)時(任務(wù)完成或等待事件),才把處理機(jī)分配給更為重要或緊迫的進(jìn)程。
  • 剝奪式優(yōu)先級調(diào)度算法。當(dāng)一個進(jìn)程正在處理機(jī)上運(yùn)行時,若有某個更為重要或緊迫的進(jìn)程進(jìn)入就緒隊(duì)列,則立即暫停正在運(yùn)行的進(jìn)程,將處理機(jī)分配給更重要或緊迫的進(jìn)程。

而根據(jù)進(jìn)程創(chuàng)建后其優(yōu)先級是否可以改變,可以將進(jìn)程優(yōu)先級分為以下兩種:

  • 靜態(tài)優(yōu)先級。優(yōu)先級是在創(chuàng)建進(jìn)程時確定的,且在進(jìn)程的整個運(yùn)行期間保持不變。確定靜態(tài)優(yōu)先級的主要依據(jù)有進(jìn)程類型、進(jìn)程對資源的要求、用戶要求。

  • 動態(tài)優(yōu)先級。在進(jìn)程運(yùn)行過程中,根據(jù)進(jìn)程情況的變化動態(tài)調(diào)整優(yōu)先級。動態(tài)調(diào)整優(yōu)先級的主要依據(jù)為進(jìn)程占有CPU時間的長短、就緒進(jìn)程等待CPU時間的長短。

08. 多級反饋隊(duì)列調(diào)度算法

多級反饋隊(duì)列算法,不必事先知道各種進(jìn)程所需要執(zhí)行的時間,他是當(dāng)前被公認(rèn)的一種較好的進(jìn)程調(diào)度算法。

多級反饋隊(duì)列調(diào)度算法的實(shí)現(xiàn)思想如下:

  • 應(yīng)設(shè)置多個就緒隊(duì)列,并為各個隊(duì)列賦予不同的優(yōu)先級,第1級隊(duì)列的優(yōu)先級最高,第2級隊(duì)列次之,其余隊(duì)列的優(yōu)先級逐次降低。
  • 賦予各個隊(duì)列中進(jìn)程執(zhí)行時間片的大小也各不相同,在優(yōu)先級越高的隊(duì)列中,每個進(jìn)程的運(yùn)行時間片就越小。例如,第2級隊(duì)列的時間片要比第1級隊(duì)列的時間片長一倍, ……第i+1級隊(duì)列的時間片要比第i級隊(duì)列的時間片長一倍。
  • 當(dāng)一個新進(jìn)程進(jìn)入內(nèi)存后,首先將它放入第1級隊(duì)列的末尾,按FCFS原則排隊(duì)等待調(diào)度。當(dāng)輪到該進(jìn)程執(zhí)行時,如它能在該時間片內(nèi)完成,便可準(zhǔn)備撤離系統(tǒng);如果它在一個時間片結(jié)束時尚未完成,調(diào)度程序便將該進(jìn)程轉(zhuǎn)入第2級隊(duì)列的末尾,再同樣地按FCFS 原則等待調(diào)度執(zhí)行;如果它在第2級隊(duì)列中運(yùn)行一個時間片后仍未完成,再以同樣的方法放入第3級隊(duì)列……如此下去,當(dāng)一個長進(jìn)程從第1級隊(duì)列依次降到第 n 級隊(duì)列后,在第 n 級隊(duì)列中便釆用時間片輪轉(zhuǎn)的方式運(yùn)行。
  • 僅當(dāng)?shù)?級隊(duì)列為空時,調(diào)度程序才調(diào)度第2級隊(duì)列中的進(jìn)程運(yùn)行;僅當(dāng)?shù)? ~ (i-1)級隊(duì)列均為空時,才會調(diào)度第i級隊(duì)列中的進(jìn)程運(yùn)行。如果處理機(jī)正在執(zhí)行第i級隊(duì)列中的某進(jìn)程時,又有新進(jìn)程進(jìn)入優(yōu)先級較高的隊(duì)列(第 1 ~ (i-1)中的任何一個隊(duì)列),則此時新進(jìn)程將搶占正在運(yùn)行進(jìn)程的處理機(jī),即由調(diào)度程序把正在運(yùn)行的進(jìn)程放回到第i級隊(duì)列的末尾,把處理機(jī)分配給新到的更高優(yōu)先級的進(jìn)程。
  • 多級反饋隊(duì)列的優(yōu)勢有:

    • 終端型作業(yè)用戶:短作業(yè)優(yōu)先。
    • 短批處理作業(yè)用戶:周轉(zhuǎn)時間較短。
    • 長批處理作業(yè)用戶:經(jīng)過前面幾個隊(duì)列得到部分執(zhí)行,不會長期得不到處理。

    總結(jié)

    以上是生活随笔為你收集整理的【Linux系统编程】进程常用调度算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。