操作系統學習筆記(3)——處理器調度




1、處理器調度

  調度原因:

  • 在多道程序系統中,進程的數量往往多於處理機的個數,進程爭用處理機的情況就在所難免。處理機調度是對處理機進行分配,就是從就緒隊列中,按照一定的算法(公平、髙效)選擇一個進程並將處理機分配給它運行,以實現進程並發地執行。 相當於快到假期了,你列舉了很多你想完成計划,但是沒有辦法同時完成所有的事情,你需要列一個時間表,把各種事情進行規划,執行的過程中也可能會有突發情況,你再根據突發情況進行解決。

 

  調度流程圖:


  處理器調度的實質:

  • 在多道程序系統中,調度實質是一種資源分配,一個作業從獲得處理機執行到作業運行完畢,可能會經歷多級處理機調度。

  處理器調度原則:

  • 合理性:既要保證系統實現特殊功能要求,同時要對各個任務合理地分配到處理器份額;
  • 有效性:處理器、內存和I/O設備得到合理有效的分配,使系統資源得到充分的利用


2、處理器調度層次:高級調度、中級調度、低級調度。

  • 高級調度(作業調度):按照某種規則,從后背隊列中選擇合適的作業將其調入內存,並為其創建進程,發送頻率最低;
  • 中級調度(內存調度):按照某種規則,從掛起隊列中農選擇合適的進程將其數據調回內存;
  • 低級調度(進程調度):按照某種規則,從就緒隊列中選擇一個進程為其分配處理機,發送頻率最高。

  


 

  作業調度(高級調度/長程調度)操作的對象是作業,此處的作業表示的是一個比程序更廣泛的意義,它既包含了程序和數據,同時還配有一份作業說明書,系統就是根據說明書來對程序的運行進行控制。每當一個作業進入系統時,便會有“作業注冊”程序為這個作業創建一個JCB(Job Control Block,作業控制塊),JCB中包含了系統對作業管理和調度所需的全部信息,其中也包含了它的類型,系統就會根據這個類型將它放到相應的后備隊列(外存)中等待作業調度。

  作業調度就是按照一定的算法從后備隊列中挑選一個或多個作業,給它們創建相應的進程(包括進程控制塊PCB等)、分配內存等必要資源,然后將它們放入就緒隊列(內存)中,以等待進程調度。

  作業調度的主要任務就是接納多少個作業,接納哪些作業。接納多少作業取決於內存中允許到少個作業同時運行,這個也成為作多道程序度;而接納哪些作業就涉及到調度的算法。

  作業調度主要用於多道批處理系統,在分時和實時系統中不設置作業調度。因為分時系統為了做到及時響應,用戶通過鍵盤輸入的命令或數據等會被直接送入內存,因而無需配置作業調度機制,但是它也需要設置某種接納控制措施來限制進入系統的用戶數目。類似地,實時系統中也不需要作業調度,但是必須要有接納控制措施。

  在批處理系統中,作業是從外存調入內存的基本單位。  

  常用的調度算法有:先來先服務(FCFS)、短作業優先(SJF)、優先級調度算法(PSA)、高響應比調度優先調度算法(HRRN)。


  進程調度是運行頻率最高的調度,分時系統中通常僅 10~100 ms 便進行一次,所以它也叫短程調度。進程調度操作的對象是進程(或內核級線程),它主要的功能是根據調度算法,決定就緒隊列中的哪個進程應獲得處理機,然后由分派程序將處理機分配給被選中的進程,因而它是最基本的一種調度,在多道批處理系統、分時、實時系統中都必須配置。

  

  進程調度方式算法流程:

  • 記住進程的狀態;
  • 決定進程什么時候獲得處理器;
  • 決定進程占用處理器多長時間;
  • 把處理器分配給進程;
  • 收回處理器。

 

  進程調度方式

 

  • 可剝奪式(可搶占式Preemptive):
    • 比正在運行的進程優先級更高的進程就緒時,可強行剝奪正在運行進程的CPU,提供給具有更高優先級的進程使用,或是當運行進程時間片用完后被剝奪,搶占方式一般滿足優先權原則、短進程優先原則、時間片原則等;
    • 其優點是可以優先處理更緊急的進程,但是搶占方式比較復雜,系統開銷大,適合分時操作系統、實時操作系統。
  • 不可剝奪式(不可搶占式Non-preemptive):
    • 某一進程被調度運行后,除非該進程終止或要求進入阻塞態,否則一直運行下去;
    • 其優點是實現簡單,系統開銷小,但是卻無法及時處理緊急任務,只適合早期批處理操作系統。

  由於進程調度的頻率之高,應當避免調度本身占用 CPU 太多時間,所以一般不用太過於復雜的調度算法。上述作業調度算法的思想也都可以用在進程調度上,除此之外,進程調度還有一些特有的調度算法,綜合起來,常見的進程調度算法有:先來先服務(FCFS)、短進程優先(SPF)、優先級調度算法(PSA)、高響應比優先(HRRN)、時間片輪轉調度算法(RR)、多級反饋隊列(MFQ)。


  內存調度也稱為中級調度,它的主要目的是提高內存的利用率和系統吞吐量,把那些暫時不能運行的進程調至外存,進程處於掛起狀態,當它們具備運行條件並且內存又有空閑的時候,再由中級調度調回就緒隊列。

  很顯然進程一旦進入掛起狀態(就緒掛起或阻塞掛起),就需要經過中級調度才能重新進入就緒隊列,而且從圖中我們也可很容易的看到,中級調度參與的雙方是就緒掛起隊列與就緒隊列,那么如果一個進程從阻塞隊列進入了阻塞掛起隊列,它就必須等到相應事件出現並調入就緒掛起隊列后,才能在下次事件出現時被調入就緒隊列。



3、作業和進程

  • 作業是用戶向計算機提交的任務實體,而進程則是完成任務的執行實體,是系統分配資源的基本單位;
  • 一個作業可由多個進程組成,且必須至少由一個進程組成,反之不成立;
  • Linux等分時系統中,並不強調作業概念。


 

4、處理器調度的算法

  調度算法的理想目標

  • 單位時間內運行盡可能多的作業;
  • 使處理器盡可能保持忙碌;
  • 響應時間和周轉時間能夠盡可能短;
  • 是各種I/O設備得以充分利用;
  • 對所有的作業都是公平合理的。

 

  調度算法的設計理念

  • 調度算法應與系統設計目標保持一致;
  • 主義系統資源均衡使用;
  • 保持提交作業在截止時間內完成;
  • 設法縮短作業平均周轉時間。

  大多數操作系統都采用比較簡單的調度算法。


  調度算法決策因素:

  • 作業到達時間
  • 預先為作業確定的優先級
  • 作業所需的CPU時間
  • 存儲要求
  • 其他的資源要求

  性能衡量指標

  • 作業平均周轉時間

假定有那個作業,其中作業i進入系統時間為Si,它被選中執行得到結果的時間為Ei,其周轉時間為:

T= E- Si

則這批作業平均周轉時間為:

T = Σ(T/ n)

  • 平均帶權周轉時間

ri為作業i的實際執行時間:

W = Σ(T/ (ri × n))

T:衡量不同調度算法對同一個作業流的性能

W:同一調度算法對不同作業流的性能衡量

  



5、作業調度和進程調度方式算法

  • 先來先服務算法(FCFS,first come first serve)
    • 算法思想:公平;
    • 算法規則:按照作業/進程到達的先后順序進行服務;
    • 用於作業調度時,考慮的是哪個作業先到達后備隊列;用於進程調度時,考慮的是哪個進程先到達就緒隊列;
    • 非搶占式的算法;
    • 優點:公平,算法實現簡單;
    • 缺點:排在長作業(進程)后面的短作業需要等待很長時間,帶權周轉時間很大,對短作業來說用戶體驗不好。即FCFS對長作業有利,對短作業不利。
  • 短作業優先算法(SJF,shortest job first)
    • 算法思想:追求最少的平均等待時間最少的平均周轉時間,最少的平均帶權周轉時間;
    • 算法規則:最短的作業、進程優先得到服務(所謂“最短”,是指要求服務時間最短);
    • 作業調度和進程調度都能使用,用於進程調度時被稱為“短進程優先算法”(SPF,shortest process first);
    • SJF和SPF是非搶占式算法,但也有搶占式的版本——最短剩余時間優先法則(SRTN,shortest remaining time next),在SRTF算法中,過程的執行可以在一段時間后停止。 在每個進程到來時,短期調度程序在可用進程列表和正在運行的進程中以最少的剩余突發時間安排進程。一旦所有進程都在就緒隊列中可用,就不會執行搶占,並且該算法將作為SJF調度工作。 當進程從執行中被移除並且下一個進程被調度時,進程的上下文被保存在進程控制塊中。 該PCB在下一次執行該過程時被訪問;
    • 優點:“最短的”平均等待時間和平均周轉時間;
    • 缺點:不公平。對短作業有利,對長作業不利。可能產生飢餓現象。另外,作業/進程的運行時間是由用戶提供的,並不一定真實,不一定能做到真正的短作業優先。
  • 高響應比優先算法(HRRN)
    • 算法思想:綜合考慮作業/進程的等待時間和要求服務的時間;
    • 算法規則:在每次調度時先計算各個作業/進程的響應比,選擇響應比最高的作業/進程為其服務;
      • 響應比 = 作業周轉時間 / 作業處理時間 = (作業處理時間 + 作業等待時間) / 作業處理時間 = 1 + (作業等待時間 / 作業處理時間)。
    • 作業調度和進程調度都能使用;
    • 是非搶占式算法,因此只有當前運行的作業/進程主動放棄處理機時,才需要調度,才需要計算響應比;
    • 綜合考慮了等待時間和運行時間(要求服務時間);等待時間相同時,要求服務時間短的優先(SJF的優點);要求服務時間相同時,等待時間長的優先(FCFS的優點);對於長作業來說,隨着等待時間越來越久,其響應比也會越來越大,從而避免了長作業飢餓的問題。

  • 時間片輪轉算法(RR,round-robin)
    • 算法思想:公平的,輪流地為各個進程服務,讓每一個進程在一定時間間隔內都可以得到相應;
    • 算法規則:按照各進程到達就緒隊列的順序,輪流讓各個進程執行一個時間片(如100ms)。若進程未在一個時間片內執行完,則剝奪處理機,將進程重新放到就緒隊列隊尾重新排隊;
    • 用於進程調度(只有作業放入內存建立了相應的進程后,才能被分配處理機時間片);
    • 可搶占式。若進程在時間片內運行完,將被強行剝奪處理機使用權,因此時間片輪轉調度算法屬於搶占式的算法。由時鍾裝置發出時鍾中斷來通知CPU時間已到;
    • 優點:公平,響應快,適用於分時操作系統;
    • 缺點:由於高頻率的進程切換,因此有一定開銷;不區分任務的緊急程度。
  • 優先級調度算法
    • 算法思想:隨着計算機的發展,特別是實時操作系統的出現,越來越多的應用場景需要根據任務的緊急程度來決定處理順序;
    • 算法規則:每個作業/進程有各自的優先級,調度時選擇優先級最高的作業/進程;
    • 作業調度和進程調度都能使用,甚至可以用於I/O調度;
    • 搶占/非搶占都有。區別在於非搶占式只需在進程主動放棄處理機時進行調度即可,而搶占式還需在就緒隊列變化時,檢查是否會發生搶占;
    • 優點:用優先級區分緊急程度,重要程度,適用於實時操作系統。可靈活的調整對各種作業/進程的偏好程度;
    • 缺點:若源源不斷地有高優先級進程到來,則可能導致飢餓。
  • 多級反饋隊列算法
    • 算法思想:對其他調度算法的折中權衡;
    • 算法規則:設置多級就緒隊列,各級隊列優先級從高到低,時間片從小到大;新進程到達時先進入第一隊列……;只有第k即隊列為空時,才會為第 k+1 級對頭的進程分配時間片;
    • 用於進程調度;
    • 搶占式的算法。在k級隊列的進程運行過程中,若更上級的隊列(1-【k-1】級)中進入了一個新進程,則由於新進程處於優先級更高的隊列中,因此新進程會搶占處理機,原來運行的進程放回k級隊列隊尾;
    • 對各類型進程相對公平(FCFS優點);每個新到達的進程都可以很快得到相應(RR的優點);短進程只用較少的時間就可完成(SPF的優點);不必實現估計進程的運行時間(避免用戶作假);可靈活地調整對各類進程的偏好程度,比如CPU密集型進程,I/O密集型進程;


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM