4.操作系統_處理器調度

1. 處理器調度

1.1. 概念

在計算機系統中,可能有很多批處理作業同時存放在磁盤的後備作業隊列中,或者有很多終端與主機相連,交互塑作業不斷地進人系統,這樣主存和處理器等資源便供不應求。按照何種原則挑選批處理作業進入主存運行、能否繼續接納分時用戶. 如何在進程之間分配處理器資源,無疑是操作系統進行資源管理所要面對的重要問題,由處理器調度完成涉及處理器調度和資源分配的工作。

1.2. 處理器調度的層次

1.2.1. 高級調度

高級調度( high level scheduling)又稱作業調度、長程調度,在多道批處理操作系統中,從輸人系統的一批作業中按照預定的調度策略挑選若干作業進入主存,爲其分配所需資源,並創建作業的相應用戶進程後便完成啓動階段的高級調度任務,已經爲進程做好運行前的準備工作,等待進程調度挑選進程運行,在作業完成後還要做結束階段的善後工作。高級調度將控制多道程序的道數,被選擇進人主存的作業越多,每個作業所獲得的CPU時間就越少,爲了向用戶提供滿意的服務,有時需要限制多道程序的道數。

1.2.2. 中級調度

中級調度(mediumlevelscheduling)又稱平衡調度、中程調度,根據主存資源決定主存中所能容納的進程數目,並根據進程的當前狀態來決定輔助存儲器和主存中的進程的對換。當主存資源緊缺時,會把暫時不能運行的進程換出主存,此時這個進程處於“掛起”狀態,不參與低級調度;當進程具備運行條件且主存資源有空閒時,再將進程重新調回主存工作,起到短期均衡系統負載的作用,充分提高主存的利用率和系統吞吐率。

1.2.3. 低級調度

低級調度(low level scheduling) 又稱進程調度/線程調度、短程調度,其主要功能是;根據某種原則決定就緒隊列中的哪個進程/內核級線程獲得處理器,並將處理器出讓給它使用

1.2.4. 處理器三級調度模型

處理器三級調度模型

1.2.5. 處理器二級調度模型

處理器二級調度模型

1.3. 選擇調度算法的原則

1.3.1. 資源利用率

  • CPU利用率=CPU有效工作時間/CPU總的運行時間
  • CPU總的運行時間=CPU有效工作時間+CPU空閒等待時間。

1.3.2. 響應時間

  • 交互式進程從提交一個請求(命令)到接收到響應之間的時間間隔稱響應時間。
  • 使交互式用戶的響應時間儘可能短,或儘快處理實時任務。
  • 這是分時系統和實時系統衡量調度性能的一個重要指標。

1.3.3. 週轉時間

  • 批處理用戶從作業提交給系統開始,到作業完成爲止的時間間隔稱作業週轉時間,應使作業週轉時間或平均作業週轉時間儘可能短。
  • 這是批處理系統衡量調度性能的一個重要指標。

1.3.4. 吞吐率

  • 單位時間內處理的作業數。

1.3.5. 公平性

  • 確保每個用戶每個進程獲得合理的CPU份額或其他資源份額,不會出現餓死情況。

1.4. 作業週轉時間

1.4.1. 作業週轉與平均週轉時間

如果作業i提交給系統的時刻是ts,完成時刻是tf,該作業的週轉時間ti爲:ti = tf - ts
實際上,它是作業在系統裏的等待時間與運行時間之和。爲了提高系統的性能,要讓若干個用戶的平均作業週轉時間和平均帶權週轉時間最小。
平均作業週轉時間 T = (Σti) / n

1.4.2. 作業帶權週轉時間和平均作業帶權週轉時間

如果作業i的週轉時間爲ti,所需運行時間爲tk,則稱wi=ti /tk爲該作業的帶權週轉時間。ti是等待時間與運行時間之和,故帶權週轉時間總大於1。
平均作業帶權週轉時間W = (Σwi) / n

1.5. 作業的管理與調度

根據作業處理方式的不同,作業可分爲批處理作業和交互型作業。

1.5.1. 批處理作業的組織和管理

作業調度與進程調度的關係及作業和進程的狀態轉換

  • 批處理作業的輸人
    批處理作業採用脫機控制方式,作業由程序、數據和作業說明書組成。程序和數據用於解決用戶的應用問題或完成業務處理;作業說明書體現用戶對作業的控制意圖,彙集作業的基本描述、控制描述和資源要求描述,作業說明書與程序和數據一起提交給系統管理員,SPOOLing系統成批接收並控制作業的輸人,將其存放在輸人並,然後,在系統的管理和控制下被調度和執行。

  • 批處理作業的建立
    爲了有效地管理作業,必須像進程管理那樣爲進入系統的每個作業建立一個作業控制塊(Job Control Block,JCB) ,所有JCB組成作業表。JCB是在批處理作業進入系統時由SPOOLing和作業管理模塊建立的,它是批處理作業存在於系統的標誌,作業撒離時其JCB也被撤銷。作業控制塊的內容主要從用戶的作業說明書中獲得,包括:作業情況(用戶名、作業名、語言名等),資源需求(CPU運行估計時間、截止時間、主存容量、設備類型及臺數、文件數和輸出量、函數庫/實用程序等),資源使用情況(進人系統時間、開始運行時間、已運行時間、主存地址、外設編號等),作業控制(優先級、聯機/脫機提作順序、出錯處理等),作業類型(CPU繁忙型、I/O繁忙型、均衡型等)信息。作業挖制塊是一個共享數據結構,SPOOLing預輸人程序、進程管理程序、緩輸出程序及作業調度程序、作業控制程序等都需要訪問它,把已輸入並建好作業控制塊的作業排入後備作業隊列,以便等待作業調度。

  • 批處理作業的調度
    批處理作業調度是指按照某種算法從後備作業隊列中選擇部分作業進人主存運行,當作業運行結束時做好善後工作。作業調度程序需要完成以下幾項任務

    • 選擇作業:由系統規定作業調度算法,按此算法從後備作業隊列中挑選作業。作業控制塊中列出作業所需要的資源,由於資源要求被滿足的作業可能有多個,需要根據資源狀況和多道程序的道數決定選中哪些作業
    • 分配資源:作業調度程序與主存管理和設備管理程序進行通信,爲作業分配所需要的資源。
    • 創建進程:每當選中作業且將其裝人主存時,系統就爲此作業創建應用進程,生成PCB及各種進程實體,這些進程將在低級調度的控制下佔用處理器運行。可以把多個作業同時裝人主存並啓動運行,這些進程要競爭處理器,也就實現了多道程序設計。所以。進入計算機系統的批處理作業至少要經過兩級調度之後才能佔用處理器。第–級是作業調度,作業通過竟爭進入主存,同時生成相應的進程;第二級是低級調度,進程競爭處理器資源。作業調度與低級調度相配合能夠實現多道作業同時執行。
    • 作業控制:作業按照JCL書寫的作業說明書運行,作業啓動、作業步轉接、程序調人、數據I/O、異常處理均由作業控制塊和SPOOLing管理程序完成。
    • 後續處理:作業正常結束或出錯終止時,作業調度程序要做好作業撒離和善後工作,如打印輸出信息、回收各種資源、撤銷作業控制塊等。同時,啓動作業調度程序選擇新的作業進入主存運行。

1.5.2. 交互性作業的組織和管理

  • 操作系統在啓動時,爲連接至系統的每個終端設備創建一個終端進程,此進程執行命令解釋程序,其處理過程如下:輸出命令提示符,從終端設備讀入命令,等待鍵盤中斷的到來,每當用戶輸人一條命令(暫存於命令緩衝區)並回車換行時,申請鍵盤中斷;CPU響應後,將控制權交給命令解釋程序,讀人命令緩衝區的內容,分析命令並接收參數;若爲簡單命令則立即轉向命令處理代碼執行;否則創建子進程,傳遞參數,加載和執行命令處理文件;命令處理結束後,再次輸出命令提示符,等待下一條命令。若當前的終端命令是一條後臺命令,則處理子進程可以和下一條終端命令的處理子進程並行執行,各予進程在運行過程中可以根據需要創建於孫進程,當終端命令所對應的進程結束之後,命令功能也處理完畢。用戶本次上機全部結束後,通過輸人退出命令來結束本次上機過程。
  • 分時系統的作業就是用戶的一次上機交互過程,可認爲終端進程的創建是一個交互型作業的開始,退出命令運行結束代表用戶交互型作業的中止。
  • 交互作業的情況和資源需求通過操作命令告知系統,分時用戶逐條輸入命令,即提交作業(步)和控制作業運行,系統則逐條執行並給出應答,每鍵入一條或一組有關操作命令,便在系統內部創建一個進程或若干進程來完成相應命令。
  • 鍵盤命令有:作業控制類;資源申請類;文件操作類;目錄操作類;設備控制類等。

1.6. 處理器調度算法

1.6.1. 低級調度的功能和類型

1.6.1.1. 低級調度的主要功能

調度程序兩項任務:調度和分派。
調度實現調度策略:確定就緒進程/線程競爭使用處理器的次序的裁決原則,即進程/線程何時應放棄CPU和選擇哪個來執行;
分派實現調度機制:確定如何時分複用CPU,處理上下文交換細節,完成進程/線程和CPU的綁定和放棄的實際工作。

從概念上來講,調度機制由3個邏輯功能程序模塊組成:

  • 隊列管理程序:當一個進程/線程轉換爲就緒態時,其PCB/TCB會被更新以反映這種變化,隊列管理程序(queuer)將PCB/TCB指針放人等待CPU資源的進程/線程列表中,每當把進程/線程移人就緒隊列時,可計算爲此進程/線程分配CPU的優先級備用。
  • 上下文切換程序:當調度程序把CPU從正在運行的進程/線程那裏切換至另一個進 程/線程時,上下文切換程序(contexr switcher)將當前運行進程/線程的上下文信息保存至其PCB/TCB中,恢復選中進程/線程的上下文信息,從而使其佔用處理器運行。
  • 分派程序:當一個進程/線程讓出CPU資源後,分派程序(dispatcher)被激活。當然,爲了運行分派程序,需要將其上下文裝人CPU,分派程序從就緒隊列中選擇進程/線程,而後完成從其自身到所選擇的進程/線程間的又–次上下文切換,把CPU讓給被選中的進程/線程。

1.6.1.2. 低級調度的基本類型

低級調度的基本類型是指調度策略選擇下一個運行進程的時間點和仲裁方式,在其他時間不能改變巳獲得處理器的進程的分派情況。據此,低級調度有兩類基本的調度方式。

第一類稱剝奪式(preemptive):又稱搶先式。,剝奪原則:

  1. 一是高優先級進程/線程可剝奪低優先級進程/線程
  2. 二是當運行進程/線程時間片用完後被剝奪

第二類稱非剩奪式(nonpreemptivc);又稱非搶先式。,剝奪原則:
一旦某個進程/線程開始運行後便不再讓出處理器除非此進程/線程運行結束,或主動放棄處理器,或因發生某個事件而不能繼續執行。

剝奪式策略的開銷比非剝奪式策略的開銷要大,主要是調度程序自身的開銷,及主存和磁盤對換程序數據的開銷,但是由於可以避免進程/線程長時間地獨佔處理器,對於實時系統和分時系統有利,能爲用戶提供高性能的服務。很多操作系統使用兩種調度策略的組合,內核關鍵程序是非剝奪式的,用戶進程是剝奪式的。

1.6.2. 作業調度和低級調度算法

在操作系統中,存在多種調度算法,有的算法僅適用於作業調度,有的算法僅適用於進程/線程調度,但大多數調度算法對兩者都適用。

1.6.2.1. 先來先服務算法(FCFS)

先來先服務調度算法既可以用於作業調度也可以用於進程調度。

在作業調度中,算法每次從後備作業隊列中選擇最先進入該隊列的一個或幾個作業,將它們調入內存,分配必要的資源,創建進程並放入就緒隊列。
在進程調度中,FCFS調度算法每次從就緒隊列中選擇最先進入該隊列的進程,將處理機分配給它,使之投入運行,直到完成或因某種原因而阻塞時才釋放處理機

  • 特點:

    • 非剝奪式調度算法,易於實現,但效率不高
  • 缺點:

    • 不利於短作業而優待長作業
    • 不利於I/O繁忙型作業而有利於CPU繁忙型作業
    • 有時爲了等待長作業執行結束,短作業的週轉時間和帶權週轉時間將變得很大,從而使若干作業的平均週轉時間和平均帶權週轉時間也變得很大
  • 優點:

    • 算法簡單
  • 假設系統中有4個作業,它們的提交時間分別是8、8.4、8.8、9,運行時間依次是2、1、0.5、0.2,

    • 等待時間=開始時間-提交時間;

    • 完成時間=開始時間+運行時間;

    • 週轉時間=作業完成時刻—作業到達時刻;

    • 帶權週轉時間=週轉時間/服務時間;

    • 平均週轉時間=作業週轉總時間/作業個數;

    • 平均帶權週轉時間=帶權週轉總時間/作業個數;

      作業號 提交時間 運行時間 開始時間 等待時間 完成時間 週轉時間 帶權週轉時間
      1 8 2 8 0 (8+2)10 (10-8)2 1
      2 8.4 1 10 (10-8.4)1.6 (10+1)11 (11-8.4)2.6 2.6
      3 8.8 0.5 11 (11-8.8)2.2 (11+0.5)11.5 (11.5-8.8)2.7 5.4
      4 9 0.2 11.5 (11.5-9)2.5 (11.5+0.2)11.7 (11.7-9)2.7 13.5
  • 相關結果:

    • 平均等待時間=(0+1.6+2.2+2.5)/4=1.575;
    • 平均週轉時間=(2+2.6+2.7+2.7)/4=2.5;
    • 平均帶權週轉時間=(1+2.6+5.4+13.5)/4=5.625

1.6.2.2. 最短作業優先算法(SJF)

最短作業優先算法(ShortestJobFirst,SJF)以進人系統的作業所要求的CPU運行時間的長短爲標準,總是選取預計計算時間最短的作業投入運行。

  • 特點:

    • 非剝奪式調度算法,能夠克服FCFS算法偏愛長作業的缺點,易於實現,但執行效率也不高
  • 缺點:

    • 一是要預先知道作業所需要的CPU運行時間,很難精確估算,如果估值過低,系統可能提前終止此作業;
    • 二是忽視作業的等待時間,由於系統不斷地接受新作業,作業調度程序總是選擇計算時間短的作業投入運行,因此,進人系統時間早但計算時間長的長作業的等待時間會過長,出現飢餓現象;
    • 三是儘管能克服對長作業的偏愛,但由於缺少剝奪機制,對於分時、實時處理仍然不理想。
  • 優點

    • 能夠克服FCFS算法偏愛長作業的缺點

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-fTRUDIe7-1580803545236)(https://gitee.com/zrj99123/pic/raw/master/os/process/22.最短作業優先算法(SJF)].jpg)

1.6.2.3. 最短剩餘時間優先算法(SRTF)

SRTF把SJF算法改爲搶佔式的。一個新作業進入就緒狀態,如果新作業需要的CPU時間比當前正在執行的作業剩餘下來還需的CPU時間短,SRTF強行趕走當前正在執行作業。稱最短剩餘時間優先算法
此算法不但適用於JOB調度,同樣也適用於進程調度。

最短剩餘時間優先算法

1.6.2.4. 響應比最高者優先算法(HRRF)

FCFS與SJF是片面的調度算法。FCFS只考慮作業等候時間而忽視了作業的計算時問,SJF只考慮用戶估計的作業計算時間而忽視了作業等待時間。
HRRF是介乎這兩者之間的折衷算法,既考慮作業等待時間,又考慮作業的運行時間,既照顧短作業又不使長作業的等待時間過長,改進了調度性能。

  • 響應比:響應比 =1+已等待時間/估計運行時間

    • 短作業容易得到較高響應比
    • 長作業等待時間足夠長後,也將獲得足夠高的響應比,
    • 飢餓現象不會發生。
  • 舉例:

    進程 到達時刻 運行時間/ms
    P1 0 10
    P2 1 1
    P3 2 2
    P4 3 1
    P5 4 5
  • 分析:

    1. 0時刻P1運行,10時刻,P1運行完,此時P2-P5的響應比分別爲:P2:1+9/1=10 P3:1+8/2=5 P4:1+7/1=8 P5:5+6/5=2.2因此執行P2 10時刻。
    2. P2運行完,此時P3-P5的響應比分別爲:P3:1+9/2=5.5 P4:1+8/1=9 P5:1+7/5=2.4因此執行P4 11時刻。
    3. P4運行完,此時P3.P5的響應比分別爲:P3:1+10/2=6 P5:1+8/5=2.6因此執行P3,最後執行P5。12時刻
    進程 到達時刻 運行時間/ms 等待時間/ms 結束時間/ms
    P1 0 10 0 10
    P2 1 1 9 11
    P3 2 2 10 14
    P4 3 1 8 12
    P5 4 5 10 19
  • 所以此算法進程的平均週轉時間爲:(10+10+12+9+15)/5=56/5=11.2

1.6.2.5. 多處理機調度算法

1.6.2.6. 時間片輪轉調度算法(Round- Robin,RR)

時間片調度做法是:調度程序每次把CPU分配給就緒隊列首進程使用一個時間片,例如100ms,就緒隊列中的每個進程輪流地運行一個時間片。當這個時間片結束時,強迫一個進程讓出處理器,讓它排列到就緒隊列的尾部,等候下一輪調度

  • 例題:進程A、B、C、D需要運行的時間分別爲20ms、10 ms、15 ms、5 ms,均在0時刻到達。到達的先後次序爲A、B、C、D。如果時間片分別爲1 ms和5ms,計算各個進程的帶權週轉時間和平均帶權週轉時間

    • 分析:在掌握了時間片輪轉法概念的基礎上,我們可以用一個執行時間圖來形象地表示作進程的執行情況,幫助我們理解此題。具體如下:

    時間片輪轉調度算法例題

    • 時間片=1ms

      進程名 到達時間 運行時間 開始時間 完成時間 週轉時間 帶權週轉時間
      A 0 20 0 4*5+3*5+2*5+5=50 50 2.5
      B 0 10 1 4*5+(3*4+2)=34 34 3.4
      C 0 15 2 4*5+3*5+2*5=45 45 3
      D 0 5 3 4*5=20 20 4

      平均週轉時間=37.25,平均帶權週轉時間=3.225

    • 時間片=5ms

      進程名 到達時間 運行時間 開始時間 完成時間 週轉時間 帶權週轉時間
      A 0 20 0 4*5+3*5+2*5+5=50 50 2.5
      B 0 10 1 5*4+5*2=30 30 3.0
      C 0 15 2 4*5+3*5+2*5=45 45 3
      D 0 5 3 4*5=20 20 4

      平均週轉時間=36.25,平均帶權週轉時間=3.125

1.6.2.7. 多級反饋隊列調度(Multi - Level Feedback Queue, MLFQ)

1.6.2.8. 彩票調度算法(lottery scheduling)

基本思想:爲進程發放針對各種資源(如CPU時間)的彩票。調度程序隨機選擇一張彩票,持有該彩票的進程獲得系統資源。
進程都是平等的,有相同的運行機會。如果某些進程需要更多的機會,可被給予更多彩票,增加其中獎機會。

1.6.2.9. 算法舉例

  1. 四個作業到達系統時間/所需CPU時間:作業1-0/20,作業2-5/15,作業3-10 /5,作業4- 15/ 10
作業名 到達系統時間 所需CPU時間
作業1 0 20
作業2 5 15
作業3 10 5
作業4 15 10
  • 按照SJF調度方式調度

    作業名 到達系統時間 所需CPU時間 結束時間
    作業1 0 20 20
    作業2 5 15 50
    作業3 10 5 25
    作業4 15 10 35
    • 調度順序是1342

    • 平均作業週轉時間
      ((20-0) + (50-5) + (25-10) + (35-15) )/4
      = (20+45+15+20)/4
      = 25

    • 平均帶權作業週轉時間
      ((20-0)/20 + (50-5)/15 + (25-10)/5 + (35-15)/10 )/4
      =(1+3+3+2)/4
      =2.25

  • 按照FCFS調度方式調度

    作業名 到達系統時間 所需CPU時間 結束時間
    作業1 0 20 20
    作業2 5 15 35
    作業3 10 5 40
    作業4 15 10 50
    • 調度順序是1234

    • 平均作業週轉時間
      ((20-0) + (35-5) + (40-10) + (50-15) )/4
      = (20+30+30+35)/4
      = 28.75

    • 平均帶權作業週轉時間
      ((20-0)/20 + (35-5)/15 + (40-10)/5 + (50-15)/10 )/4
      =(1+2+6+3.5)/4
      =3.125

  • 按照HRRF調度方式調度

    作業名 到達系統時間 所需CPU時間 結束時間
    作業1 0 20 20
    作業2 5 15 40
    作業3 10 5 25
    作業4 15 10 50
  1. 0時刻作業1運行,20時刻運行完,此時作業1-作業4的響應比分別是
    作業2:1+(20-5)/15=2
    作業3:1+(20-10)/5=3
    作業4:1+(20-15)/10=1.5
    選擇執行作業3,20時刻
  2. 作業3運行完,此時作業2,作業5的響應比分別是
    作用2:1+(25-5)/15=2.3
    作業4:1+(25-15)/10=2
    選擇執行作業2,25時刻
  3. 作業4運行完,此時是40時刻,運行作業2
  4. 作業2運行完,此時是50時刻
  • 結果:
    • 調度順序是1342

    • 平均作業週轉時間
      ((20-0) + (40-5) + (25-10) + (50-15) )/4
      = (20+35+15+35)/4
      = 26.25

    • 平均帶權作業週轉時間
      ((20-0)/20+ (40-5)/15 + (25-10)/5 + (50-15)/10 )/4
      = (1+2.3+3+3.5)/4
      = 2.45

1.6.2.10. 優先級調度算法

  • 優先級調度算法根據確定的優先級來選取進程/線程,總是選擇就緒隊列中的優先級最高者投人運行。

  • 優先級通常用0~4095的整數表示,這個整數叫做優先數,優先級與優先數之間的關係因系統而異,如在UNIX/Linux系統中,優先數越小,優先級越高,而有些系統做出相反的規定。

  • 靜態優先數法

    • 使用外圍設備頻繁者優先數大,這樣有利於提高效率;
    • 重要算題程序的進程優先數大,這樣有利於用戶;
    • 進入計算機時間長的進程優先數大,這樣有利於縮短作業完成的時間;
    • 交互式用戶的進程優先數大,這樣有利於終端用戶的響應時間等等,
  • 動態優先數法

    • 根據進程佔有CPU時間多少來決定,當進程佔有CPU時間愈長,那麼,在它被阻塞之後再次獲得調度的優先級就越低,反之,進程獲得調度的可能性越大;
    • 根據進程等待CPU時間多少來決定,當進程在就緒隊列中等待時間愈長,那麼,在它被阻塞之後再次獲得調度的優先級就越高,反之,進程獲得調度的可能性越小。

1.6.3. 實時調度算法

1.6.3.1. 單比率調度算法

1.6.3.2. 限期調度算法

1.6.3.3. 最少裕度法

1.6.4. 多處理機調度算法

1.6.4.1. 負載共享調度算法

1.6.4.2. 羣調度算法

1.6.4.3. 處理器專派調度算法

1.6.4.4. 動態調度算法

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