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