處理機調度算法詳解----進程調度

處理機調度算法詳解----進程調度

​ 在之前的理論篇中,我們也介紹了處理機調度的層次,不同的操作系統也會根據自己的設計目標來配置不同層次的調度算法,並且因爲調度算法衆多,如果全部糅雜在一起來講,會讓人比較困惑,因此將調度算法按照層次來講解,本文會先講作業調度算法。下文涉及到的一些名詞,如果不明白,可以參考上一篇博文

​ 進程調度調度的對象是進程,其主要任務是根據某種算法,選取處於就緒隊列中的進程,並由分派程序將處理機分配給被選中的進程。進程調度是一種最基本的調度,在多道批處理、分時和實時等OS中,都必須要配置這級調度。其執行週期最短,也就是執行頻率最高,分時系統中10-100ms便要進行一次進程調度,因此也稱爲短程調度。因爲執行頻率高,進程調度算法不宜過於複雜(太過複雜會佔用太多CPU的時間)下面我們一起來看下進程調度的幾種調度算法。

​ 先來先服務、短進程優先等調度算法不在此進行介紹了,有興趣的可參考上篇博文

1.輪轉調度算法

​ 基於時間片的輪轉(round robin,RR)調度算法是實現分時系統的一個最簡單也是最常用的調度算法。該算法讓就緒隊列中的每個進程每次僅運行一個時間片,來保證每個進程都可以平均的獲得處理機。這也是我們經常說到的時分複用,可以保證每個進程每次大約獲取1/n的處理機時間。

基本原理:在RR調度算法中,系統根據FCFS策略,將所有的就緒進程排成一個就緒隊列,並設置每隔一定的時間間隔(時間片)產生一次中斷,讓CPU處理中斷並觸發進程調度(將處理機分配給下個進程)。

進程切換時間:在RR調度算法中,有兩種情況會觸發進程切換:1.在一個時間片內,正在運行的進程執行完畢,此時CPU空閒,就立即激活調度程序;2.在一個時間片用完時,中斷處理程序被激活,觸發調度,如果進程尚未運行完畢,調度程序將當前進程插入到就緒隊列隊尾。

時間片大小:時間片在RR調度算法中是一個比較重要的概念,時間片的大小對算法的性能有很大的影響。如果時間片很小,那麼在OS中會頻繁的執行進程調度和進程的上下文切換,這對系統的性能會有很大的損耗;如果過大,RR算法就退化成FCFS算法,無法滿足短作業和交互式用戶的需求。因此時間片的大小應是:略大於一次典型的交互所需要的時間,使大多數交互式進程能在一個時間片內完成,從而保證快速響應。

​ 下圖爲時間片大小分別爲q=1和q=4時,對平均週轉時間的影響。

​ 爲了讓大家方便理解輪轉調度算法的調度策略和時間片過小帶來的問題,我畫出了q=1時的進程執行情況,如下圖所示,從中我們可以看到,進程執行過程中頻繁的進行上下文的切換,並且作業的週轉時間明顯較長。

2.優先級調度算法

​ 優先級是爲了滿足進程的緊迫性而設置的,類似現實生活中的VVIP通道,可以保證緊急的進程先執行。在這裏我們講述兩種優先級。

靜態優先級:靜態優先級是在創建進程時確定的,且在進程的整個運行期間保持不變。主要由進程類型、進程對資源的需求、用戶要求三方面決定。

動態優先級:在創建進程時所賦予的優先權,是可以隨進程的推進或隨其等待時間的增加而改變的,以便獲得更好的調度性能,比如高響應比優先調度算法

3.多隊列調度算法

​ 前述的調度算法,因爲系統中僅設置一個進程就緒隊列,因此進程調度算法是固定的、單一的,無法滿足系統中不同用戶對進程調度策略的不同要求,並且在多CPU的系統中,這種缺點尤爲突出。

​ 該算法將系統中的進程就緒隊列從一個拆分爲若干個將不同類型或性質的進程固定分配在不同的就緒隊列不同的就緒隊列採用不同的調度算法,一個就緒隊列中的進程可以設置不同的優先級,不同的就緒隊列本身也可以設置不同的優先級。

​ 因爲對隊列調度算法設置了多個就緒隊列,因此可以每個就緒隊列設置不同的調度算法,可以很容易滿足多用戶的不同需求,對於多CPU系統,同樣可以很方便的爲每個處理機設置一個單獨的就緒隊列。

4.多級反饋隊列調度算法

​ 前面講到的調度算法都有一定的侷限性,比如需要知道進程的要求服務時間、優先級等信息。而有些信息是很難預先給出的,因此在多隊列調度算法的基礎上,發展出多級反饋隊列調度算法,可以不需知道各種進程所需的執行時間,還可較好的滿足各種類型進程的需要,是目前公認的一種較好的調度算法(Pis:同理,會相對來說更復雜)。

調度機制

  1. 設置多個就緒隊列。在系統中設置多個就緒隊列,併爲每個隊列賦予不同的優先級。第一個隊列的優先級最高,第二個次之,其餘隊列優先級逐個降低。併爲不同就緒隊列中進程所賦予的執行時間片大小也各不相同,優先級越高的隊列中,時間片就越小。簡言之:優先級高的爲第一級隊列,時間片最小,隨着隊列級別的降低,時間片加大
  1. 每個隊列都採用FCFS算法。每當新進程進入內存(創建工作完成),首先將它放入到第一隊列末尾,按照FCFS原則等待調度。當輪到該進程執行時,如它能在該時間片內完成,就表明進程執行完畢,可以被銷燬。否則則該進程插入到第二級隊列的末尾等待調度,調度方式依次類推。當進程最後被降到第n級隊列(優先級最低的隊列)後,在第n級隊列中按輪轉調度(RR)方式運行。

  2. 按照隊列優先級調度。調度程序首先會調度最高優先級隊列中的進程運行,僅當第一隊列空閒時才調度第二優先級對列;換言之,僅當第1~(i-1)所有隊列均空時,纔會調度第i隊列中的進程運行。(注:如果處理機正在執行第i隊列中的某一進程時,又有新的進程進入最高優先級隊列,此時必須立即吧正在運行的進程插入到第i隊列的隊尾,此時調度程序去調度高優先級的隊列)

​ 因爲結合了多隊列調度算法、先來先服務、輪轉調度算法、優先級調度算法的優點,多級反饋隊列調度算法可以較好的滿足各種類型的用戶需要,如終端型用戶、短批處理作業用戶、長批處理作業用戶。

4.基於公平原則的調度算法

​ 上述幾種調度算法所保證的只是優先運行,如優先級算法是優先級高的進程優先運行,但並不保證進程佔用多少處理機時間。另外也未考慮到調度的公平性,因此,下面介紹兩種相對公平的調度算法。

​ 1.保證調度算法:保證調度算法是另外一種類型的調度算法,它向用戶所做出的保證並不是優先運行,而是明確的性能保證,該算法可以做到調度的公平性。一種比較容易實現的性能保證是處理機分配的公平性,比如系統中有n個相同類型的進程同時運行,爲公平起見,須保證每個進程都獲得相同的處理機時間1/n。

​ 2.公平分享調度算法:對於上述的保證調度算法,是對諸進程而言體現的一定程度的公平性。但是對於用戶來講就不一定公平了。因此,在該調度算法中,調度的公平性主要針對用戶而言,是所有用戶能獲得相同的處理機時間,或者所要求的時間比例。

​ 假如系統中僅有兩個用戶,用戶1啓動了四個進程(A、B、C、D),用戶2只啓動了1個進程(E)。

​ 對於保證進程公平的調度序列爲:A B C D E A B C D E…

​ 對於保證用戶的公平的調度序列爲:A E B E C E D E A E B E C E D E…


​ 又到了分隔線以下,本文到此就結束了,本文內容全部都是由博主自己進行整理並結合自身的理解進行總結,如果有什麼錯誤,還請批評指正。

​ 如有興趣,還可以查看我的其他幾篇博客,都是OS的乾貨,喜歡的話還請點贊、評論加關注_

操作系統武功修煉心法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章