【操做系統】處理機調度簡述

處理機的調度

標籤(空格分隔): 進程調度 調度算法 操做系統算法


基本概念

定義
: 操做系統管理了系統的有限資源,當有多個進程(或多個進程發出的請求)要使用這些資源時,由於資源的有限性,必須按照必定的原則選擇進程(請求)來佔用資源, 咱們稱之爲調度。spa

其目的是控制資源使用者的數量,選取資源使用者許可佔用資源或佔用資源。處理機調度的三個層次:操作系統

  • 高級調度:做業調度, 調度對象爲做業.
  • 中級調度:內存調度(實質是存儲器的對換功能)
  • 低級調度:進程調度, 調度對象爲進程或內核級線程

做業調度的算法也適用於進程調度線程

服務時間\(T_s\): 系統爲做業或進程提供服務的時間
週轉時間\(T_i\): 做業或進程被提交給系統到做業或進程完成爲止的時間間隔.
一般包括:設計

做業在外存後備隊列上等待調度的時間.
進程在就緒隊列上等待進程調度的時間.
進程在cpu上執行的時間.
進程等待I/O操做完成的時間.指針

平均週轉時間:
\[T = \frac{\sum_{i=1}^n T_i}{n}\]
帶權週轉時間: 做業的週轉時間與爲它提供服務的時間之比
\[W_i = \frac{T_i}{T_s}\]
平均帶權週轉時間:
\[W = \frac{\sum_{i=1}^n \frac{T_i}{T_s}}{n}\]對象

調度時機、切換與過程

進程調度和切換程序是操做系統內核程序。當請求調度的事件發生後,纔可能會運行進程調度程序,當調度了新的就緒進程後,纔會去進行進程間的切換。理論上這三件事情應該順序執行,但在實際設計中,在操做系統內核程序運行時,若是某時發生了引發進程調度的因素,並不必定可以立刻進行調度與切換。隊列

現代操做系統中,不能進行進程的調度與切換的狀況有如下幾種狀況:進程

  1. 在處理中斷的過程當中:中斷處理過程複雜,在實現上很難作到進程切換,並且中斷處理是系統工做的一部分,邏輯上不屬於某一進程,不該被剝奪處理機資源。事件

  2. 進程在操做系統內核程序臨界區中:進入臨界區後,須要獨佔式地訪問共享數據,理論上必須加鎖,以防止其餘並行程序進入,在解鎖前不該切換到其餘進程運行,以加快該共享數據的釋放。

  3. 其餘須要徹底屏蔽中斷的原子操做過程當中:如加鎖、解鎖、中斷現場保護、恢復等原子操做。在原子過程當中,連中斷都要屏蔽,更不該該進行進程調度與切換。

若是在上述過程當中發生了引發調度的條件,並不能立刻進行調度和切換,應置系統的請求調度標誌,直到上述過程結束後才進行相應的調度與切換。

應該進行進程調度與切換的狀況有:

  1. 當發生引發調度條件,且當前進程沒法繼續運行下去時,能夠立刻進行調度與切換。若是操做系統只在這種狀況下進行進程調度,就是非剝奪調度。

  2. 當中斷處理結束或自陷處理結束後,返回被中斷進程的用戶態程序執行現場前,若置上請求調度標誌,便可立刻進行進程調度與切換。若是操做系統支持這種狀況下的運行調度程序,就實現了剝奪方式的調度。

進程切換每每在調度完成後馬上發生,它要求保存原進程當前切換點的現場信息,恢復被調度進程的現場信息。現場切換時,操做系統內核將原進程的現場信息推入到當前進程的內核堆棧來保存它們,並更新堆棧指針。內核完成重新進程的內核棧中裝入新進程的現場信息、更新當前運行進程空間指針、重設PC寄存器等相關工做以後,開始運行新的進程。

調度的方式

  • 非搶佔方式
    一旦處理機分配給某進程後, 就一直讓它運行下去, 決不會由於時鐘中斷或任何其餘緣由取搶佔當前正在運行進程的處理機, 直至該進程完成, 或發生某事件而被阻塞時, 才把處理機分配給其餘進程.
  • 搶佔方式
    系統容許調度程序根據某種原則, 取暫停某個正在執行的進程, 將已分配個該進程的處理機從新分配給另外一進程.
    "搶佔"時應遵循必定的原則:
    • 優先權原則
    • 短進程優先原則
    • 時間片原則

典型的調度算法

先來先服務調度算法(first-come first-served):

即FCFS調度算法, 既可用於做業調度, 也可用於進程調度. 系統按照做業到達的前後次序(優先考慮在就緒隊列中等待時間最長的做業)進行調度.
缺點:未考慮做業的緊迫程度, 只能順序運行

短做業(進程)優先的調度算法(short job first):

爲短做業而設立, 由於操做系統中大多爲短做業.系統在做業運行時, 選出運行時間最短的做業將其調入內存.

  1. SJF(不可搶佔):算法以做業的長短(做業須要運行的時間)來計算優先級, 做業越短, 其優先級越高.
  2. SPF(可搶佔):同上, 可是當有做業優先級較高時, 即可以搶佔資源優先執行.

缺點:

  • 必須預知做業的運行時間
  • 對做業程不利
  • 沒法實現人機交互
  • 沒有考慮到做業的緊迫程度

優先級調度算法(priority-scheduling algorithm):

PSA算法基於做業的緊迫程度, 由外部賦予做業相應的優先級, 根據做業優先級進行調度.

高響應閉優先調度算法(highest request ratio next):

HRRN算法即考慮了做業的等待時間, 又考慮了做業運行時間. 爲沒有做業引入一個動態優先級:

優先權 = (等待時間+要求服務時間) / 要求服務時間

可縮寫爲:

R = 響應時間 / 要求服務時間

特色:

  1. 做業等待時間相同, 則要求服務時間越短, 優先權越高越, 相似於SJF算法, 有利於短做業
  2. 做業要求服務時間相同時, 則做業等待時間約長, 優先權越高, 相似於FCFS算法, 有利於長做業
  3. 對於長做業(要求服務時間長), 隨着等待的時間足夠長, 也可得到較高的優先級. 不會一直等下去.

時間片輪轉調度算法(RR)

原理: 系統根據FCFS策略將全部的就緒進程排成一個就緒隊列, 並設置每隔一段時間產生依次中斷, 激活系統中的進程調度程序, 完成依次調度, 將cpu分配給新的隊首進程(或新到達的緊迫進程).

進程切換

  1. 若一個時間片還沒有用完, 正在運行的進程便已完成, 則當即激活調度程序, 將其從執行隊列中刪除, 在調度就緒隊列的隊首進程運行, 並啓動一個新的時間片.
  2. 在一個時間片用完時, 計時中斷處理程序被激活, 若是進程還沒有運行完畢, 則調度程序將它送往就緒隊列末尾, 並調度就緒隊列的隊首進程運行, 並啓動新時間片.

注意:時間片選取太小, 則將頻繁的執行進程調度和進程長下文切換, 增長系統開銷; 時間片選取過長, 則RR算法退化爲FCFS算法, 沒法知足短做業和交互式用戶需求. 時間片應選取略大於依次典型的交互所須要的時間, 是大多數進程在一個時間片內完成.

多級反饋隊列調度算法(multileved feedback queue):

  1. 設置多個就緒隊列, 併爲每一個隊列賦予不一樣的優先級, 優先級越高的隊列其時間片越小.優先級最高的隊列最早進入待調度的隊列
  2. 隊列之間採用FCFS調度算法.只有高優先級隊列中的所有進程完成時才調度下一隊列
  3. 隊列內的進程按照輪轉算法調度.新進程進入內存後首先進入優先級最高的隊列
  4. 在低優先級隊列運行時, 如有新進程到達, 那麼在運行完這個時間片後,CPU立刻分配給新到達的做業(搶佔式)。

實時系統中的進程調度算法

實時系統是指系統能及時響應外部事件的請求並及時處理這些請求.基於這一特性, 實時系統在工業(武器)控制, 多媒體等系統中常見.
實時系統中通分爲存在一個截止時間, 硬實時任務(HRT)要求在開始截止時間前必須執行, 在結束截止時間前必須結束. 軟實時任務同上, 但並不嚴格.
在實時系統中有兩類算法值得注意:最先截止時間優先算法(Earliest Deadline First)和最低鬆弛度優先算法(Least Laxity First).兩類算法均可用搶佔式和非搶佔式調度, 但後者經常使用於搶佔式調度.
在m個週期性的實時調度中, 每一個實時任務的處理時間\(C_i\), 週期時間\(P_i\), 在但處理機的狀況下, 需知足條件:$\sum_{i=1}^m\frac{C_i}{P_i} \(小於1; 多處理機條件下, 須知足條件\)\sum_{i=1}^m\frac{C_i}{P_i} $小於N, N爲處理機數量.

最先截止時間優先算法(EDF)

該算法在實時系統中根據任務的截止時間肯定其優先級.

  1. 非搶佔式

  2. 搶佔式

最低鬆弛度優先算法(LLF)

在該法中根據任務的緊急程度(鬆弛程度)賦予其優先級, 越緊急的任務優先級越高.

任務的鬆弛程度 = 必須完成時間 - 其自己運行時間 - 當前時間

系統的任務按照鬆弛度排成一個就緒隊列, 鬆弛度低的任務排在隊列前面, 即調度程序優先執行.

相關文章
相關標籤/搜索