轉 進程的調度方式

1、概念:

不管是在批處理系統仍是分時系統中,用戶進程數通常都多於處理機數、這將致使它們互相爭奪處理機。另外,系統進程也一樣須要使用處理機。這就要求進程調度程序按必定的策略,動態地把處理機分配給處於就緒隊列中的某一個進程,以使之執行。html

2、進程的四個基本屬性:

 1.多態性 從誕生、運行,直至消滅。
 
  2.多個不一樣的進程能夠包括相同的程序
 
  3.三種基本狀態 它們之間可進行轉換
 
  4. 併發性 併發執行的進程輪流佔用處理器

3、進程的三種基本狀態:

1.等待態:等待某個事件的完成;
 
  2.就緒態:等待系統分配處理器以便運行;
 
  3.運行態:佔有處理器正在運行。
 
  運行態→等待態 每每是因爲等待外設,等待主存等資源分配或等待人工干預而引發的。
 
  等待態→就緒態 則是等待的條件已知足,只需分配處處理器後就能運行。
 
  運行態→就緒態 不是因爲自身緣由,而是由外界緣由使運行狀態的進程讓出處理器,這時候就變成就緒態。例如時間片用完,或有更高優先級的進程來搶佔處理器等。
 
  就緒態→運行態 系統按某種策略選中就緒隊列中的一個進程佔用處理器,此時就變成了運行態

4、進程調度的方式:

非剝奪方式

  分派程序一旦把 處理機分配給某進程後便讓它一直運行下去,直到進程完成或發生 
 
某事件而阻塞時,才把處理機分配給另外一個進程。

剝奪方式

  當一個進程正在運行時,系統能夠基於某種原則,剝奪已分配給它的 處理機,將之分配給其它進程。剝奪原則有:優先權原則、短進程優先原則、 時間片原則。
 
  例如,有三個進程P一、P二、P3前後到達,它們分別須要20、4和2個單位時間運行完畢。
 
  假如它們就按P一、P二、P3的 順序執行,且不可剝奪,則三進程各自的 週轉時間分別爲20、2四、
 
  26個單位時間,平均週轉時間是23.33個時間單位。
 
  假如用時間片原則的剝奪調度方式,可獲得:
 
  可見:P一、P二、P3的週轉時間分別爲2六、十、6個單位時間(假設時間片爲2個單位時間),平均週轉時間爲14個單位時間。
 
  衡量進程調度性能的指標有:週轉時間、響應時間、CPU-I/O執行期。

5、進程調度算法:

一、先進先出算法(FIFO)

  算法老是把 處理機分配給最早進入就緒隊列的進程,一個進程一旦分得處理機,便一直執行下去,直到該進程完成或阻塞時,才釋放處理機。
 
  例如,有三個進程P一、P2和P3前後進入就緒 隊列,它們的執行期分別是2一、6和3個單位時間,
 
  執行狀況以下圖:
 
  對於P一、P二、P3的 週轉時間爲2一、2七、30,平均週轉時間爲26。
 
  可見,FIFO算法服務質量不佳,容易引發做業用戶不滿,常做爲一種輔助 調度算法
 

二、最短CPU運行期優先調度算法(SCBF--Shortest CPU Burst First)

 
  該算法從就緒隊列中選出下一個「CPU執行期最短」的進程,爲之分配處理機。
 
  例如,在就緒隊列中有四個進程P一、P二、P3和P4,它們的下一個執行 
   進程調度

進程調度算法

期分別是1六、十二、4和3個單位時間,執行狀況以下圖:
 
  P一、P二、P3和P4的週轉時間分別爲3五、1九、七、3,平均週轉時間爲16。
 
  該算法雖可得到較好的調度性能,但難以準確地知道下一個CPU執行期,而只能根據每個進程的執行歷史來預測。

三、時間片輪轉法:

  前幾種算法主要用於 批處理系統中,不能做爲 分時系統中的主 調度算法,在分時系統中,都採用 時間片輪轉法。
 
  簡單輪轉法:系統將全部就緒進程按FIFO規則排隊,按必定的時間間隔把 處理機分配給隊列中的進程。這樣,就緒隊列中全部進程都可得到一個時間片的處理機而運行。

四、多級反饋隊列:

 
  多級 隊列方法:將系統中全部進程分紅若干類,每類爲一級。 多級反饋 隊列方式是在系統中設置多個就緒隊列,並賦予各隊列以不一樣的優先權。

6、引發進程調度的緣由:

進程調度發生在什麼時機呢?這與引發進程調度的緣由以及進程調度的方式有關。
 
  (1)正在執行的進程執行完畢。這時,若是不選擇新的就緒進程執行,將浪費 處理機資源。
 
  (2)執行中進程本身調用阻塞原語將本身阻塞起來進入睡眠等狀態。
 
  (3)執行中進程調用了P 原語操做,從而因資源不足而被阻塞;或調用了v原語操做激活了等待資源的進程 隊列
 
  (4)執行中進程提出I/O請求後被阻塞。
 
  (5)在 分時系統中時間片已經用完。
 
  (6)在執行完 系統調用等系統程序後返回用戶進程時,這時可看做系統進程執行完畢,從而可調度選擇一新的用戶進程執行。
 
  以上都是在不 可剝奪方式下的引發進程調度的緣由。在CPU執行方式是可剝奪時.還有
 
  (7)就緒隊列中的某進程的優先級變得高於當前執行進程的優先級,從而也將引起進程調度。

7、各類系統採用的進程調度算法:

一、UNIX系統: 

UNIX操做系統採用可剝奪的動態優先級調度算法。進程的優先級由賦給它的優先數肯定,優先數越小,優先級越高。在該算法中,進程的優先數隨着它佔用CPU的時間增長而增長。當進程佔用CPU的時間減小時,其優先數也隨着減小。
補充:做爲一個分時的、多任務、多用戶操做系統,要保證公平地對待各個用戶的進程,使各終端用戶的響應時間不至太一長.因此UNIX操做系統採用了這種調度算法。但這種算法不能知足關鍵任務的需求,從而使傳統的UNIXrK操做系統缺少實時性。

二、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的進程。一旦時間片消耗完畢,則會將該進程置於隊列的末尾,而後運行其餘相同優先級的進程,若是沒有其餘相同優先級的進程,則該進程會繼續執行。
總而言之,對於實時進程,高優先級的進程就是大爺。它執行到無法執行了,才輪到低優先級的進程執行。等級制度至關森嚴啊。

.net

相關文章
相關標籤/搜索