Linux 常見的進程調度算法

 

1.在介紹進程調度以前,先對進程的狀態的概念應該有所瞭解,下面是關於進程狀態的一些基本概念;進程的狀態分爲三種,分別爲:算法

 

  1).運行態:該狀態代表進程在實際佔用CPU性能

  2).就緒態: 該狀態下進程能夠運行,但由於其餘進程正在運行而暫時中止spa

  3).阻塞態: 該狀態下進程不能運行,除非某種外部事件的發送操作系統

運行態→等待態 每每是因爲等待外設,等待主存等資源分配或等待人工干預而引發的。htm

等待態→就緒態 則是等待的條件已知足,只需分配處處理器後就能運行。隊列

運行態→就緒態 不是因爲自身緣由,而是由外界緣由使運行狀態的進程讓出處理器,這時候就變成就緒態。例如時間片用完,或有更高優先級的進程來搶佔處理器等。進程

就緒態→運行態 系統按某種策略選中就緒隊列中的一個進程佔用處理器,此時就變成了運行態事件

2.處理機內存

高級、中級和低級調度做業從提交開始直到完成,每每要經歷下述三級調度:資源

  高級調度:(High-Level Scheduling)又稱爲做業調度,它決定把後備做業調入內存運行;

  低級調度:(Low-Level Scheduling)又稱爲進程調度,它決定把就緒隊列的某進程得到CPU;

  中級調度:(Intermediate-Level Scheduling)又稱爲在虛擬存儲器中引入,在內、外存對換區進行進程對換。

3.進程調度的方式

非剝奪方式

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

剝奪方式

  當一個進程正在運行時,系統能夠基於某種原則,剝奪已分配給它的處理機,將之分配給其它進程。剝奪原則有:優先權原則、短進程優先原則、時間片原則。

  例如,有三個進程P一、P二、P3前後到達,它們分別須要20、4和2個單位時間運行完畢。

  假如它們就按P一、P二、P3的順序執行,且不可剝奪,則三進程各自的週轉時間分別爲20、2四、26個單位時間,平均週轉時間是23.33個時間單位。

  假如用時間片原則的剝奪調度方式,可獲得:

  可見:P一、P二、P3的週轉時間分別爲2六、十、6個單位時間(假設時間片爲2個單位時間),平均週轉時間爲14個單位時間。

  衡量進程調度性能的指標有:週轉時間、響應時間、CPU-I/O執行期。

 

3.關於調度便是若是隻有一個CPU可用,那麼就必須選擇下一個要運行的進程,在操做系統中,完成選擇工做的這一部分稱爲調度程序,該程序使用的算法稱爲進程算

法。進度調度就是按照必定的策略,動態地把處理機分配給處於就緒隊列的進程,使之執行。

常見的進程調度算法:

1.先來先服務和短做業(進程)優先調度算法

  1)先來先服務調度算法 

  先來先服務(FCFS)調度算法是一種最 簡單的調度算法,該算法既可用於做業調度,也可用於進程調度。當在做業調度中採用該算法時,每次調度都是從後備做業隊列中選擇一個或多個最早進入該隊列的 做業,將它們調入內存,爲它們分配資源、建立進程,而後放入就緒隊列。在進程調度中採用FCFS算法時,則每次調度是從就緒隊列中選擇一個最早進入該隊列 的進程,爲之分配處理機,使之投入運行。該進程一直運行到完成或發生某事件而阻塞後才放棄處理機。

  2)短做業(進程)優先調度算法 

短做業(進程)優 先調度算法SJ(P)F,是指對短做業或短進程優先調度的算法。它們能夠分別用於做業調度和進程調度。短做業優先(SJF)的調度算法是從後備隊列中選擇 一個或若干個估計運行時間最短的做業,將它們調入內存運行。而短進程優先(SPF)調度算法則是從就緒隊列中選出一個估計運行時間最短的進程,將處理機分 配給它,使它當即執行並一直執行到完成,或發生某事件而被阻塞放棄處理機時再從新調度。

2.高優先權優先調度算法

   優先權調度算法的類型 

  爲了照顧緊迫型做業,使之在進入系統後便得到優先處理,引入了最高優先權優先(FPF)調度算法。此算法常被用於批處理系統中,做爲做業調度算法,也做爲多種操做系統中的進程調度算法,還可用於實時系統中。當把該算法用於做業調度時,系統將從後備隊列中選擇若干個優先權最高的做業裝入內存。當用於進程調度時,該算法是把處理機分配給就緒隊列中優先權最高的進程,這時,又可進一步把該算法分紅以下兩種。 

  1) 非搶佔式優先權算法 

  在這種方式 下,系統一旦把處理機分配給就緒隊列中優先權最高的進程後,該進程便一直執行下去,直至完成;或因發生某事件使該進程放棄處理機時,系統方可再將處理機重 新分配給另外一優先權最高的進程。這種調度算法主要用於批處理系統中;也可用於某些對實時性要求不嚴的實時系統中。 

  2) 搶佔式優先權調度算法 

  在這種方式 下,系統一樣是把處理機分配給優先權最高的進程,使之執行。但在其執行期間,只要又出現了另外一個其優先權更高的進程,進程調度程序就當即中止當前進程(原 優先權最高的進程)的執行,從新將處理機分配給新到的優先權最高的進程。所以,在採用這種調度算法時,是每當系統中出現一個新的就緒進程i 時,就將其優先權Pi與正在執行的進程j 的優先權Pj進行比較。若是Pi≤Pj,原進程Pj便繼續執行;但若是是Pi>Pj,則當即中止Pj的執行,作進程切換,使i 進程投入執行。顯然,這種搶佔式的優先權調度算法能更好地知足緊迫做業的要求,故而經常使用於要求比較嚴格的實時系統中,以及對性能要求較高的批處理和分時系 統中。

  高響應比優先調度算法 

  在批處理系統中,短做業優先算法是一種比 較好的算法,其主要的不足之處是長做業的運行得不到保證。若是咱們能爲每一個做業引入前面所述的動態優先權,並使做業的優先級隨着等待時間的增長而以速率a 提升,則長做業在等待必定的時間後,必然有機會分配處處理機。該優先權的變化規律可描述爲:
操做系統
  因爲等待時間與服務時間之和就是系統對該做業的響應時間,故該優先權又至關於響應比RP。據此,又可表示爲:
操做系統
  由上式能夠看出: 

  (1) 若是做業的等待時間相同,則要求服務的時間愈短,其優先權愈高,於是該算法有利於短做業。

   (2) 當要求服務的時間相同時,做業的優先權決定於其等待時間,等待時間愈長,其優先權愈高,於是它實現的是先來先服務。 

  (3) 對於長做業,做業的優先級能夠隨等待時間的增長而提升,當其等待時間足夠長時,其優先級即可升到很高,從而也可得到處理機。簡言之,該算法既照顧了短做 業,又考慮了做業到達的前後次序,不會使長做業長期得不到服務。所以,該算法實現了一種較好的折衷。固然,在利用該算法時,每要進行調度以前,都須先作響 應比的計算,這會增長系統開銷。

3.基於時間片的輪轉調度算法

  1)時間片輪轉法 

  基本原理 

  在早期的時間 片輪轉法中,系統將全部的就緒進程按先來先服務的原則排成一個隊列,每次調度時,把CPU 分配給隊首進程,並令其執行一個時間片。時間片的大小從幾ms 到幾百ms。當執行的時間片用完時,由一個計時器發出時鐘中斷請求,調度程序便據此信號來中止該進程的執行,並將它送往就緒隊列的末尾;而後,再把處理機 分配給就緒隊列中新的隊首進程,同時也讓它執行一個時間片。這樣就能夠保證就緒隊列中的全部進程在一給定的時間內均能得到一時間片的處理機執行時間。換言 之,系統能在給定的時間內響應全部用戶的請求。

  2)多級反饋隊列調度算法 

  前面介紹的各類用做進程調度的算法都有一 定的侷限性。如短進程優先的調度算法,僅照顧了短進程而忽略了長進程,並且若是並未指明進程的長度,則短進程優先和基於進程長度的搶佔式調度算法都將沒法 使用。而多級反饋隊列調度算法則沒必要事先知道各類進程所需的執行時間,並且還能夠知足各類類型進程的須要,於是它是目前被公認的一種較好的進程調度算法。 在採用多級反饋隊列調度算法的系統中,調度算法的實施過程以下所述。

   (1) 應設置多個就緒隊列,併爲各個隊列賦予不一樣的優先級。第一個隊列的優先級最高,第二個隊列次之,其他各隊列的優先權逐個下降。該算法賦予各個隊列中進程執 行時間片的大小也各不相同,在優先權愈高的隊列中,爲每一個進程所規定的執行時間片就愈小。例如,第二個隊列的時間片要比第一個隊列的時間片長一倍,……, 第i+1個隊列的時間片要比第i個隊列的時間片長一倍。 

   (2) 當一個新進程進入內存後,首先將它放入第一隊列的末尾,按FCFS原則排隊等待調度。當輪到該進程執行時,如它能在該時間片內完成,即可準備撤離系統;如 果它在一個時間片結束時還沒有完成,調度程序便將該進程轉入第二隊列的末尾,再一樣地按FCFS原則等待調度執行;若是它在第二隊列中運行一個時間片後仍未 完成,再依次將它放入第三隊列,……,如此下去,當一個長做業(進程)從第一隊列依次降到第n隊列後,在第隊列便採起按時間片輪轉的方式運行。

   (3) 僅當第一隊列空閒時,調度程序才調度第二隊列中的進程運行;僅當第1~(i-1)隊列均空時,纔會調度第i隊列中的進程運行。若是處理機正在第i隊列中爲 某進程服務時,又有新進程進入優先權較高的隊列(第1~(i-1)中的任何一個隊列),則此時新進程將搶佔正在運行進程的處理機,即由調度程序把正在運行 的進程放回到第i隊列的末尾,把處理機分配給新到的高優先權進程。

相關文章
相關標籤/搜索