操作系统中常见的进程调度算法
一、調(diào)度與調(diào)度算法
調(diào)度:操作系統(tǒng)管理了系統(tǒng)的有限資源,當(dāng)有多個(gè)進(jìn)程(或多個(gè)進(jìn)程發(fā)出的請(qǐng)求)要使用這些資源時(shí),因?yàn)橘Y源的有限性,必須按照一定的原則選擇進(jìn)程(請(qǐng)求)來占用資源。這就是調(diào)度。目的是控制資源使用者的數(shù)量,選取資源使用者許可占用資源或占用資源,實(shí)質(zhì)是一種資源分配。
調(diào)度算法:根據(jù)系統(tǒng)的資源分配策略所規(guī)定的資源分配算法。對(duì)于不同的的系統(tǒng)和系統(tǒng)目標(biāo),通常采用不同的調(diào)度算法。
調(diào)度算法要求:高資源利用率、高吞吐量、用戶滿意等原則,進(jìn)程調(diào)度所采用的算法是與整個(gè)系統(tǒng)的設(shè)計(jì)目標(biāo)相一致的:
1.批處理系統(tǒng):增加系統(tǒng)吞吐量和提高系統(tǒng)資源的利用率。(吞吐量是指單位時(shí)間內(nèi)CPU完成的作業(yè)數(shù)量)
2.分時(shí)系統(tǒng):保證每個(gè)分時(shí)用戶能容忍的響應(yīng)時(shí)間。
3.實(shí)時(shí)系統(tǒng):保證對(duì)隨機(jī)發(fā)生的外部事件做出實(shí)時(shí)響應(yīng)。
?
二、常見的進(jìn)程調(diào)度算法:
1.先來先服務(wù)調(diào)度算法
先來先服務(wù)(FCFS)調(diào)度算法是一種最簡(jiǎn)單的調(diào)度算法,該算法既可用于作業(yè)調(diào)度,也可用于進(jìn)程調(diào)度。當(dāng)在作業(yè)調(diào)度中采用該算法時(shí),每次調(diào)度都是從后備作業(yè)隊(duì)列中選擇一個(gè)或多個(gè)最先進(jìn)入該隊(duì)列的作業(yè),將它們調(diào)入內(nèi)存,為它們分配資源、創(chuàng)建進(jìn)程,然后放入就緒隊(duì)列。在進(jìn)程調(diào)度中采用FCFS算法時(shí),則每次調(diào)度是從就緒隊(duì)列中選擇一個(gè)最先進(jìn)入該隊(duì)列的進(jìn)程,為之分配處理機(jī),使之投入運(yùn)行。該進(jìn)程一直運(yùn)行到完成或發(fā)生某事件而阻塞后才放棄處理機(jī)。
2.短作業(yè)(進(jìn)程)優(yōu)先調(diào)度算法
短作業(yè)(進(jìn)程)優(yōu)先調(diào)度算法SJ(P)F,是指對(duì)短作業(yè)或短進(jìn)程優(yōu)先調(diào)度的算法。它們可以分別用于作業(yè)調(diào)度和進(jìn)程調(diào)度。短作業(yè)優(yōu)先(SJF)的調(diào)度算法是從后備隊(duì)列中選擇一個(gè)或若干個(gè)估計(jì)運(yùn)行時(shí)間最短的作業(yè),將它們調(diào)入內(nèi)存運(yùn)行。而短進(jìn)程優(yōu)先(SPF)調(diào)度算法則是從就緒隊(duì)列中選出一個(gè)估計(jì)運(yùn)行時(shí)間最短的進(jìn)程,將處理機(jī)分配給它,使它立即執(zhí)行并一直執(zhí)行到完成,或發(fā)生某事件而被阻塞放棄處理機(jī)時(shí)再重新調(diào)度。
3.優(yōu)先權(quán)調(diào)度算法的類型
為了照顧緊迫型作業(yè),使之在進(jìn)入系統(tǒng)后便獲得優(yōu)先處理,引入了最高優(yōu)先權(quán)優(yōu)先(FPF)調(diào)度算法。此算法常被用于批處理系統(tǒng)中,作為作業(yè)調(diào)度算法,也作為多種操作系統(tǒng)中的進(jìn)程調(diào)度算法,還可用于實(shí)時(shí)系統(tǒng)中。當(dāng)把該算法用于作業(yè)調(diào)度時(shí),系統(tǒng)將從后備隊(duì)列中選擇若干個(gè)優(yōu)先權(quán)最高的作業(yè)裝入內(nèi)存。當(dāng)用于進(jìn)程調(diào)度時(shí),該算法是把處理機(jī)分配給就緒隊(duì)列中優(yōu)先權(quán)最高的進(jìn)程,這時(shí),又可進(jìn)一步把該算法分成如下兩種。
1) 非搶占式優(yōu)先權(quán)算法
在這種方式下,系統(tǒng)一旦把處理機(jī)分配給就緒隊(duì)列中優(yōu)先權(quán)最高的進(jìn)程后,該進(jìn)程便一直執(zhí)行下去,直至完成;或因發(fā)生某事件使該進(jìn)程放棄處理機(jī)時(shí),系統(tǒng)方可再將處理機(jī)重新分配給另一優(yōu)先權(quán)最高的進(jìn)程。這種調(diào)度算法主要用于批處理系統(tǒng)中;也可用于某些對(duì)實(shí)時(shí)性要求不嚴(yán)的實(shí)時(shí)系統(tǒng)中。
2) 搶占式優(yōu)先權(quán)調(diào)度算法
在這種方式下,系統(tǒng)同樣是把處理機(jī)分配給優(yōu)先權(quán)最高的進(jìn)程,使之執(zhí)行。但在其執(zhí)行期間,只要又出現(xiàn)了另一個(gè)其優(yōu)先權(quán)更高的進(jìn)程,進(jìn)程調(diào)度程序就立即停止當(dāng)前進(jìn)程(原優(yōu)先權(quán)最高的進(jìn)程)的執(zhí)行,重新將處理機(jī)分配給新到的優(yōu)先權(quán)最高的進(jìn)程。因此,在采用這種調(diào)度算法時(shí),是每當(dāng)系統(tǒng)中出現(xiàn)一個(gè)新的就緒進(jìn)程i 時(shí),就將其優(yōu)先權(quán)Pi與正在執(zhí)行的進(jìn)程j 的優(yōu)先權(quán)Pj進(jìn)行比較。如果Pi≤Pj,原進(jìn)程Pj便繼續(xù)執(zhí)行;但如果是Pi>Pj,則立即停止Pj的執(zhí)行,做進(jìn)程切換,使i 進(jìn)程投入執(zhí)行。顯然,這種搶占式的優(yōu)先權(quán)調(diào)度算法能更好地滿足緊迫作業(yè)的要求,故而常用于要求比較嚴(yán)格的實(shí)時(shí)系統(tǒng)中,以及對(duì)性能要求較高的批處理和分時(shí)系統(tǒng)中。
4.高響應(yīng)比優(yōu)先調(diào)度算法
在批處理系統(tǒng)中,短作業(yè)優(yōu)先算法是一種比較好的算法,其主要的不足之處是長(zhǎng)作業(yè)的運(yùn)行得不到保證。如果我們能為每個(gè)作業(yè)引入前面所述的動(dòng)態(tài)優(yōu)先權(quán),并使作業(yè)的優(yōu)先級(jí)隨著等待時(shí)間的增加而以速率a 提高,則長(zhǎng)作業(yè)在等待一定的時(shí)間后,必然有機(jī)會(huì)分配到處理機(jī)。該優(yōu)先權(quán)的變化規(guī)律可描述為:
由于等待時(shí)間與服務(wù)時(shí)間之和就是系統(tǒng)對(duì)該作業(yè)的響應(yīng)時(shí)間,故該優(yōu)先權(quán)又相當(dāng)于響應(yīng)比RP。據(jù)此,又可表示為:
由上式可以看出:
(1) 如果作業(yè)的等待時(shí)間相同,則要求服務(wù)的時(shí)間愈短,其優(yōu)先權(quán)愈高,因而該算法有利于短作業(yè)。
(2) 當(dāng)要求服務(wù)的時(shí)間相同時(shí),作業(yè)的優(yōu)先權(quán)決定于其等待時(shí)間,等待時(shí)間愈長(zhǎng),其優(yōu)先權(quán)愈高,因而它實(shí)現(xiàn)的是先來先服務(wù)。
(3) 對(duì)于長(zhǎng)作業(yè),作業(yè)的優(yōu)先級(jí)可以隨等待時(shí)間的增加而提高,當(dāng)其等待時(shí)間足夠長(zhǎng)時(shí),其優(yōu)先級(jí)便可升到很高,從而也可獲得處理機(jī)。簡(jiǎn)言之,該算法既照顧了短作業(yè),又考慮了作業(yè)到達(dá)的先后次序,不會(huì)使長(zhǎng)作業(yè)長(zhǎng)期得不到服務(wù)。因此,該算法實(shí)現(xiàn)了一種較好的折衷。當(dāng)然,在利用該算法時(shí),每要進(jìn)行調(diào)度之前,都須先做響應(yīng)比的計(jì)算,這會(huì)增加系統(tǒng)開銷。
5.時(shí)間片輪轉(zhuǎn)法
1) 基本原理
在早期的時(shí)間片輪轉(zhuǎn)法中,系統(tǒng)將所有的就緒進(jìn)程按先來先服務(wù)的原則排成一個(gè)隊(duì)列,每次調(diào)度時(shí),把CPU 分配給隊(duì)首進(jìn)程,并令其執(zhí)行一個(gè)時(shí)間片。時(shí)間片的大小從幾ms 到幾百ms。當(dāng)執(zhí)行的時(shí)間片用完時(shí),由一個(gè)計(jì)時(shí)器發(fā)出時(shí)鐘中斷請(qǐng)求,調(diào)度程序便據(jù)此信號(hào)來停止該進(jìn)程的執(zhí)行,并將它送往就緒隊(duì)列的末尾;然后,再把處理機(jī)分配給就緒隊(duì)列中新的隊(duì)首進(jìn)程,同時(shí)也讓它執(zhí)行一個(gè)時(shí)間片。這樣就可以保證就緒隊(duì)列中的所有進(jìn)程在一給定的時(shí)間內(nèi)均能獲得一時(shí)間片的處理機(jī)執(zhí)行時(shí)間。換言之,系統(tǒng)能在給定的時(shí)間內(nèi)響應(yīng)所有用戶的請(qǐng)求。
6.多級(jí)反饋隊(duì)列調(diào)度算法
前面介紹的各種用作進(jìn)程調(diào)度的算法都有一定的局限性。如短進(jìn)程優(yōu)先的調(diào)度算法,僅照顧了短進(jìn)程而忽略了長(zhǎng)進(jìn)程,而且如果并未指明進(jìn)程的長(zhǎng)度,則短進(jìn)程優(yōu)先和基于進(jìn)程長(zhǎng)度的搶占式調(diào)度算法都將無法使用。而多級(jí)反饋隊(duì)列調(diào)度算法則不必事先知道各種進(jìn)程所需的執(zhí)行時(shí)間,而且還可以滿足各種類型進(jìn)程的需要,因而它是目前被公認(rèn)的一種較好的進(jìn)程調(diào)度算法。在采用多級(jí)反饋隊(duì)列調(diào)度算法的系統(tǒng)中,調(diào)度算法的實(shí)施過程如下所述。
(1) 應(yīng)設(shè)置多個(gè)就緒隊(duì)列,并為各個(gè)隊(duì)列賦予不同的優(yōu)先級(jí)。第一個(gè)隊(duì)列的優(yōu)先級(jí)最高,第二個(gè)隊(duì)列次之,其余各隊(duì)列的優(yōu)先權(quán)逐個(gè)降低。該算法賦予各個(gè)隊(duì)列中進(jìn)程執(zhí)行時(shí)間片的大小也各不相同,在優(yōu)先權(quán)愈高的隊(duì)列中,為每個(gè)進(jìn)程所規(guī)定的執(zhí)行時(shí)間片就愈小。例如,第二個(gè)隊(duì)列的時(shí)間片要比第一個(gè)隊(duì)列的時(shí)間片長(zhǎng)一倍,……,第i+1個(gè)隊(duì)列的時(shí)間片要比第i個(gè)隊(duì)列的時(shí)間片長(zhǎng)一倍。
(2) 當(dāng)一個(gè)新進(jìn)程進(jìn)入內(nèi)存后,首先將它放入第一隊(duì)列的末尾,按FCFS原則排隊(duì)等待調(diào)度。當(dāng)輪到該進(jìn)程執(zhí)行時(shí),如它能在該時(shí)間片內(nèi)完成,便可準(zhǔn)備撤離系統(tǒng);如果它在一個(gè)時(shí)間片結(jié)束時(shí)尚未完成,調(diào)度程序便將該進(jìn)程轉(zhuǎn)入第二隊(duì)列的末尾,再同樣地按FCFS原則等待調(diào)度執(zhí)行;如果它在第二隊(duì)列中運(yùn)行一個(gè)時(shí)間片后仍未完成,再依次將它放入第三隊(duì)列,……,如此下去,當(dāng)一個(gè)長(zhǎng)作業(yè)(進(jìn)程)從第一隊(duì)列依次降到第n隊(duì)列后,在第n?隊(duì)列便采取按時(shí)間片輪轉(zhuǎn)的方式運(yùn)行。
(3) 僅當(dāng)?shù)谝魂?duì)列空閑時(shí),調(diào)度程序才調(diào)度第二隊(duì)列中的進(jìn)程運(yùn)行;僅當(dāng)?shù)?/span>1~(i-1)隊(duì)列均空時(shí),才會(huì)調(diào)度第i隊(duì)列中的進(jìn)程運(yùn)行。如果處理機(jī)正在第i隊(duì)列中為某進(jìn)程服務(wù)時(shí),又有新進(jìn)程進(jìn)入優(yōu)先權(quán)較高的隊(duì)列(第1~(i-1)中的任何一個(gè)隊(duì)列),則此時(shí)新進(jìn)程將搶占正在運(yùn)行進(jìn)程的處理機(jī),即由調(diào)度程序把正在運(yùn)行的進(jìn)程放回到第i隊(duì)列的末尾,把處理機(jī)分配給新到的高優(yōu)先權(quán)進(jìn)程。
?
三、linux進(jìn)程調(diào)度算法
1、linux內(nèi)核的三種調(diào)度方法:?
1).SCHED_OTHER 分時(shí)調(diào)度策略。
實(shí)時(shí)進(jìn)程將得到優(yōu)先調(diào)用,實(shí)時(shí)進(jìn)程根據(jù)實(shí)時(shí)優(yōu)先級(jí)決定調(diào)度權(quán)值。
分時(shí)進(jìn)程則通過nice和counter值決定權(quán)值,nice越小,counter越大,被調(diào)度的概率越大,也就是曾經(jīng)使用了cpu最少的進(jìn)程將會(huì)得到優(yōu)先調(diào)度。
2).SCHED_FIFO實(shí)時(shí)調(diào)度策略,先到先服務(wù)
3).SCHED_RR實(shí)時(shí)調(diào)度策略,時(shí)間片輪轉(zhuǎn)
?
SHCED_RR和SCHED_FIFO的不同:
當(dāng)采用SHCED_RR策略的進(jìn)程的時(shí)間片用完,系統(tǒng)將重新分配時(shí)間片,并置于就緒隊(duì)列尾。放在隊(duì)列尾保證了所有具有相同優(yōu)先級(jí)的RR任務(wù)的調(diào)度公平。
SCHED_FIFO一旦占用cpu則一直運(yùn)行。一直運(yùn)行直到有更高優(yōu)先級(jí)任務(wù)到達(dá)或自己放棄。如果有相同優(yōu)先級(jí)的實(shí)時(shí)進(jìn)程(根據(jù)優(yōu)先級(jí)計(jì)算的調(diào)度權(quán)值是一樣的)已經(jīng)準(zhǔn)備好,FIFO時(shí)必須等待該進(jìn)程主動(dòng)放棄后才可以運(yùn)行這個(gè)優(yōu)先級(jí)相同的任務(wù)。而RR可以讓每個(gè)任務(wù)都執(zhí)行一段時(shí)間。
?
SHCED_RR和SCHED_FIFO的相同點(diǎn):
SHCED_RR和SHCED_FIFO都只用于實(shí)時(shí)任務(wù)。
2、三種算法的執(zhí)行
所有任務(wù)都采用linux分時(shí)調(diào)度策略時(shí):
1). 創(chuàng)建任務(wù)指定采用分時(shí)調(diào)度策略,并指定優(yōu)先級(jí)nice值(-20~19)。
2). 將根據(jù)每個(gè)任務(wù)的nice值確定在cpu上的執(zhí)行時(shí)間(counter)。
3). 如果沒有等待資源,則將該任務(wù)加入到就緒隊(duì)列中。
4). 調(diào)度程序遍歷就緒隊(duì)列中的任務(wù),通過對(duì)每個(gè)任務(wù)動(dòng)態(tài)優(yōu)先級(jí)的計(jì)算(counter+20-nice)結(jié)果,選擇
計(jì)算結(jié)果最大的一個(gè)去運(yùn)行,當(dāng)這個(gè)時(shí)間片用完后(counter減至0)或者主動(dòng)放棄cpu時(shí),該任務(wù)將被放在就緒隊(duì)列末尾(時(shí)間片用完)或等待隊(duì)列(因等待資源而放棄cpu)中。
5). 此時(shí)調(diào)度程序重復(fù)上面計(jì)算過程,轉(zhuǎn)到第4步。
6). 當(dāng)調(diào)度程序發(fā)現(xiàn)所有就緒任務(wù)計(jì)算所得的權(quán)值都為不大于0時(shí),重復(fù)第2步。
?
所有任務(wù)都采用FIFO時(shí):
1). 創(chuàng)建進(jìn)程時(shí)指定采用FIFO,并設(shè)置實(shí)時(shí)優(yōu)先級(jí)rt_priority(1-99)。
2). 如果沒有等待資源,則將該任務(wù)加入到就緒隊(duì)列中。
3). 調(diào)度程序遍歷就緒隊(duì)列,根據(jù)實(shí)時(shí)優(yōu)先級(jí)計(jì)算調(diào)度權(quán)值(1000+rt_priority),選擇權(quán)值最高的任務(wù)使用cpu,該FIFO任務(wù)將一直占有cpu直到有優(yōu)先級(jí)更高的任務(wù)就緒(即使優(yōu)先級(jí)相同也不行)或者主動(dòng)放棄(等待資源)。
4). 調(diào)度程序發(fā)現(xiàn)有優(yōu)先級(jí)更高的任務(wù)到達(dá)(高優(yōu)先級(jí)任務(wù)可能被中斷或定時(shí)器任務(wù)喚醒,再或被當(dāng)前運(yùn)行的任務(wù)喚醒,等等),則調(diào)度程序立即在當(dāng)前任務(wù)堆棧中保存當(dāng)前cpu寄存器的所有數(shù)據(jù),重新從高優(yōu)先級(jí)任務(wù)的堆棧中加載寄存器數(shù)據(jù)到cpu,此時(shí)高優(yōu)先級(jí)的任務(wù)開始運(yùn)行。重復(fù)第3步。
5). 如果當(dāng)前務(wù)因等待資源而主動(dòng)放棄cpu使用權(quán),則該任務(wù)將從就緒隊(duì)列中刪除,加入等待隊(duì)列,此時(shí)重復(fù)第3步。
?
所有任務(wù)都采用RR調(diào)度策略時(shí):
1). 創(chuàng)建任務(wù)時(shí)指定調(diào)度參數(shù)為RR,并設(shè)置任務(wù)的實(shí)時(shí)優(yōu)先級(jí)和nice值(nice值將會(huì)轉(zhuǎn)換為該任務(wù)的時(shí)間片的長(zhǎng)度)。
2). 如果沒有等待資源,則將該任務(wù)加入到就緒隊(duì)列中。
3). 調(diào)度程序遍歷就緒隊(duì)列,根據(jù)實(shí)時(shí)優(yōu)先級(jí)計(jì)算調(diào)度權(quán)值(1000+rt_priority),選擇權(quán)值最高的任務(wù)使用cpu。
4). 如果就緒隊(duì)列中的RR任務(wù)時(shí)間片為0,則會(huì)根據(jù)nice值設(shè)置該任務(wù)的時(shí)間片,同時(shí)將該任務(wù)放入就緒隊(duì)列的末尾。重復(fù)步驟3。
5). 當(dāng)前任務(wù)由于等待資源而主動(dòng)退出cpu,則其加入等待隊(duì)列中。重復(fù)步驟3。
?
四、CentOS release 6.5 (Final)
?????? 1、輸入"uname -a ",可顯示電腦以及操作系統(tǒng)的相關(guān)信息
?????? 2、輸入"cat /proc/version",說明正在運(yùn)行的內(nèi)核版本。
???????? 3、輸入"cat/etc/issue",?顯示的是發(fā)行版本信息
?
?
總結(jié)
以上是生活随笔為你收集整理的操作系统中常见的进程调度算法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sitemesh应用
- 下一篇: 当前系统时间与服务器时间,操作系统时间和