转 进程的调度方式
進(jìn)程調(diào)度詳細(xì)總結(jié)
一、概念:
無論是在批處理系統(tǒng)還是分時系統(tǒng)中,用戶進(jìn)程數(shù)一般都多于處理機(jī)數(shù)、這將導(dǎo)致它們互相爭奪處理機(jī)。另外,系統(tǒng)進(jìn)程也同樣需要使用處理機(jī)。這就要求進(jìn)程調(diào)度程序按一定的策略,動態(tài)地把處理機(jī)分配給處于就緒隊(duì)列中的某一個進(jìn)程,以使之執(zhí)行。
二、進(jìn)程的四個基本屬性:
1.多態(tài)性 從誕生、運(yùn)行,直至消滅。 2.多個不同的進(jìn)程可以包括相同的程序 3.三種基本狀態(tài) 它們之間可進(jìn)行轉(zhuǎn)換 4.并發(fā)性?并發(fā)執(zhí)行的進(jìn)程輪流占用處理器三、進(jìn)程的三種基本狀態(tài):
1.等待態(tài):等待某個事件的完成; 2.就緒態(tài):等待系統(tǒng)分配處理器以便運(yùn)行; 3.運(yùn)行態(tài):占有處理器正在運(yùn)行。 運(yùn)行態(tài)→等待態(tài) 往往是由于等待外設(shè),等待主存等資源分配或等待人工干預(yù)而引起的。 等待態(tài)→就緒態(tài) 則是等待的條件已滿足,只需分配到處理器后就能運(yùn)行。 運(yùn)行態(tài)→就緒態(tài) 不是由于自身原因,而是由外界原因使運(yùn)行狀態(tài)的進(jìn)程讓出處理器,這時候就變成就緒態(tài)。例如時間片用完,或有更高優(yōu)先級的進(jìn)程來搶占處理器等。 就緒態(tài)→運(yùn)行態(tài) 系統(tǒng)按某種策略選中就緒隊(duì)列中的一個進(jìn)程占用處理器,此時就變成了運(yùn)行態(tài)四、進(jìn)程調(diào)度的方式:
非剝奪方式
分派程序一旦把處理機(jī)分配給某進(jìn)程后便讓它一直運(yùn)行下去,直到進(jìn)程完成或發(fā)生? 某事件而阻塞時,才把處理機(jī)分配給另一個進(jìn)程。剝奪方式
當(dāng)一個進(jìn)程正在運(yùn)行時,系統(tǒng)可以基于某種原則,剝奪已分配給它的處理機(jī),將之分配給其它進(jìn)程。剝奪原則有:優(yōu)先權(quán)原則、短進(jìn)程優(yōu)先原則、時間片原則。 例如,有三個進(jìn)程P1、P2、P3先后到達(dá),它們分別需要20、4和2個單位時間運(yùn)行完畢。 假如它們就按P1、P2、P3的順序執(zhí)行,且不可剝奪,則三進(jìn)程各自的周轉(zhuǎn)時間分別為20、24、 26個單位時間,平均周轉(zhuǎn)時間是23.33個時間單位。 假如用時間片原則的剝奪調(diào)度方式,可得到: 可見:P1、P2、P3的周轉(zhuǎn)時間分別為26、10、6個單位時間(假設(shè)時間片為2個單位時間),平均周轉(zhuǎn)時間為14個單位時間。 衡量進(jìn)程調(diào)度性能的指標(biāo)有:周轉(zhuǎn)時間、響應(yīng)時間、CPU-I/O執(zhí)行期。五、進(jìn)程調(diào)度算法:
1、先進(jìn)先出算法(FIFO)
算法總是把處理機(jī)分配給最先進(jìn)入就緒隊(duì)列的進(jìn)程,一個進(jìn)程一旦分得處理機(jī),便一直執(zhí)行下去,直到該進(jìn)程完成或阻塞時,才釋放處理機(jī)。 例如,有三個進(jìn)程P1、P2和P3先后進(jìn)入就緒隊(duì)列,它們的執(zhí)行期分別是21、6和3個單位時間, 執(zhí)行情況如下圖: 對于P1、P2、P3的周轉(zhuǎn)時間為21、27、30,平均周轉(zhuǎn)時間為26。 可見,FIFO算法服務(wù)質(zhì)量不佳,容易引起作業(yè)用戶不滿,常作為一種輔助調(diào)度算法。2、最短CPU運(yùn)行期優(yōu)先調(diào)度算法(SCBF--Shortest CPU Burst First)
該算法從就緒隊(duì)列中選出下一個“CPU執(zhí)行期最短”的進(jìn)程,為之分配處理機(jī)。 例如,在就緒隊(duì)列中有四個進(jìn)程P1、P2、P3和P4,它們的下一個執(zhí)行?進(jìn)程調(diào)度
期分別是16、12、4和3個單位時間,執(zhí)行情況如下圖: P1、P2、P3和P4的周轉(zhuǎn)時間分別為35、19、7、3,平均周轉(zhuǎn)時間為16。 該算法雖可獲得較好的調(diào)度性能,但難以準(zhǔn)確地知道下一個CPU執(zhí)行期,而只能根據(jù)每一個進(jìn)程的執(zhí)行歷史來預(yù)測。3、時間片輪轉(zhuǎn)法:
前幾種算法主要用于批處理系統(tǒng)中,不能作為分時系統(tǒng)中的主調(diào)度算法,在分時系統(tǒng)中,都采用時間片輪轉(zhuǎn)法。 簡單輪轉(zhuǎn)法:系統(tǒng)將所有就緒進(jìn)程按FIFO規(guī)則排隊(duì),按一定的時間間隔把處理機(jī)分配給隊(duì)列中的進(jìn)程。這樣,就緒隊(duì)列中所有進(jìn)程均可獲得一個時間片的處理機(jī)而運(yùn)行。4、多級反饋隊(duì)列:
多級隊(duì)列方法:將系統(tǒng)中所有進(jìn)程分成若干類,每類為一級。 多級反饋隊(duì)列方式是在系統(tǒng)中設(shè)置多個就緒隊(duì)列,并賦予各隊(duì)列以不同的優(yōu)先權(quán)。六、引起進(jìn)程調(diào)度的原因:
進(jìn)程調(diào)度發(fā)生在什么時機(jī)呢?這與引起進(jìn)程調(diào)度的原因以及進(jìn)程調(diào)度的方式有關(guān)。 (1)正在執(zhí)行的進(jìn)程執(zhí)行完畢。這時,如果不選擇新的就緒進(jìn)程執(zhí)行,將浪費(fèi)處理機(jī)資源。 (2)執(zhí)行中進(jìn)程自己調(diào)用阻塞原語將自己阻塞起來進(jìn)入睡眠等狀態(tài)。 (3)執(zhí)行中進(jìn)程調(diào)用了P原語操作,從而因資源不足而被阻塞;或調(diào)用了v原語操作激活了等待資源的進(jìn)程隊(duì)列。 (4)執(zhí)行中進(jìn)程提出I/O請求后被阻塞。 (5)在分時系統(tǒng)中時間片已經(jīng)用完。 (6)在執(zhí)行完系統(tǒng)調(diào)用等系統(tǒng)程序后返回用戶進(jìn)程時,這時可看作系統(tǒng)進(jìn)程執(zhí)行完畢,從而可調(diào)度選擇一新的用戶進(jìn)程執(zhí)行。 以上都是在不可剝奪方式下的引起進(jìn)程調(diào)度的原因。在CPU執(zhí)行方式是可剝奪時.還有 (7)就緒隊(duì)列中的某進(jìn)程的優(yōu)先級變得高于當(dāng)前執(zhí)行進(jìn)程的優(yōu)先級,從而也將引發(fā)進(jìn)程調(diào)度。七、各種系統(tǒng)采用的進(jìn)程調(diào)度算法:
1、UNIX系統(tǒng):
UNIX操作系統(tǒng)采用可剝奪的動態(tài)優(yōu)先級調(diào)度算法。進(jìn)程的優(yōu)先級由賦給它的優(yōu)先數(shù)確定,優(yōu)先數(shù)越小,優(yōu)先級越高。在該算法中,進(jìn)程的優(yōu)先數(shù)隨著它占用CPU的時間增加而增加。當(dāng)進(jìn)程占用CPU的時間減少時,其優(yōu)先數(shù)也隨著減少。 補(bǔ)充:作為一個分時的、多任務(wù)、多用戶操作系統(tǒng),要保證公平地對待各個用戶的進(jìn)程,使各終端用戶的響應(yīng)時間不至太一長.所以UNIX操作系統(tǒng)采用了這種調(diào)度算法。但這種算法不能滿足關(guān)鍵任務(wù)的需求,從而使傳統(tǒng)的UNIXrK操作系統(tǒng)缺乏實(shí)時性。2、LINUX系統(tǒng):
Linux中的進(jìn)程如果從調(diào)度策略劃分,可以分為兩類,普通進(jìn)程和實(shí)時進(jìn)程。實(shí)時進(jìn)程又可分為兩類,FIFO,RR。實(shí)時進(jìn)程的優(yōu)先級遠(yuǎn)遠(yuǎn)大于普通進(jìn)程。Linux的處理策略是如果有實(shí)時進(jìn)程處于可運(yùn)行狀態(tài),那么優(yōu)先運(yùn)行實(shí)時進(jìn)程,知道所有的實(shí)時進(jìn)程或者結(jié)束,或者被殺掉,或者處于阻塞狀態(tài)。也就是說如果實(shí)時進(jìn)程一直在運(yùn)行,那么普通的進(jìn)程就會被活活餓死。由于實(shí)時進(jìn)程和普通進(jìn)程所采用的調(diào)度策略不同,下面分別介紹。(一)普通進(jìn)程調(diào)度
每一個普通進(jìn)程都有一個靜態(tài)優(yōu)先級。這個值會被調(diào)度器用來與作為參考來調(diào)度進(jìn)程。在內(nèi)核中調(diào)度的優(yōu)先級的區(qū)間為[100,139],數(shù)字越低,優(yōu)先級越高。
(二)實(shí)時進(jìn)程調(diào)度
?
每一個實(shí)時進(jìn)程都會與一個實(shí)時優(yōu)先級相關(guān)聯(lián)。實(shí)時優(yōu)先級在1到99之間。不同與普通進(jìn)程,系統(tǒng)調(diào)度時,實(shí)時優(yōu)先級高的進(jìn)程總是先于優(yōu)先級低的進(jìn)程執(zhí)行。知道實(shí)時優(yōu)先級高的實(shí)時進(jìn)程無法執(zhí)行。實(shí)時進(jìn)程總是被認(rèn)為處于活動狀態(tài)。
如果有數(shù)個 優(yōu)先級相同的實(shí)時進(jìn)程,那么系統(tǒng)就會按照進(jìn)程出現(xiàn)在隊(duì)列上的順序選擇進(jìn)程。假設(shè)當(dāng)前CPU運(yùn)行的實(shí)時進(jìn)程A的優(yōu)先級為a,而此時有個優(yōu)先級為b的實(shí)時進(jìn)程B進(jìn)入可運(yùn)行狀態(tài),那么只要b<a,系統(tǒng)將中斷A的執(zhí)行,而優(yōu)先執(zhí)行B,直到B無法執(zhí)行(無論A,B為何種實(shí)時進(jìn)程)。
?
不同調(diào)度策略的實(shí)時進(jìn)程只有在相同優(yōu)先級時才有可比性:
1. 對于FIFO的進(jìn)程,意味著只有當(dāng)前進(jìn)程執(zhí)行完畢才會輪到其他進(jìn)程執(zhí)行。由此可見相當(dāng)霸道。
2. 對于RR的進(jìn)程。一旦時間片消耗完畢,則會將該進(jìn)程置于隊(duì)列的末尾,然后運(yùn)行其他相同優(yōu)先級的進(jìn)程,如果沒有其他相同優(yōu)先級的進(jìn)程,則該進(jìn)程會繼續(xù)執(zhí)行。
總而言之,對于實(shí)時進(jìn)程,高優(yōu)先級的進(jìn)程就是大爺。它執(zhí)行到?jīng)]法執(zhí)行了,才輪到低優(yōu)先級的進(jìn)程執(zhí)行。等級制度相當(dāng)森嚴(yán)啊。
?
轉(zhuǎn)載于:https://www.cnblogs.com/njczy2010/p/5800072.html
總結(jié)
- 上一篇: Tengine+LUA+Nginx-Gr
- 下一篇: 给iOS 模拟器“安装”app文件