操作系統處理器調度(CPU調度)的學習以及批處理系統中採用的調度算法、交互式系統中採用的調度算法

一、CPU調度的相關概念

  • CPU調度 : 其任務是控制、協調進程對CPU的競爭;即按一定的調度算法從就緒隊列中選擇一個進程CPU的使用權交給被選中的進程
 如果沒有就緒進程,系統會安排一個系統空閒進程或IDLE進程
  • 系統場景
    • N個進程就緒、等待上CPU運行
    • M個CPU。M>=1
    • 需要決策:給哪一個進程分配哪一個CPU?

二、CPU調度需要解決的問題

  • WHAT:按什麼原則選擇下一個要執行的進程——調度算法
  • WHEN:何時進行選擇 —— 調度時機
  • HOW: 如何讓被選中的進程上CPU運行——調度過程(進程的上下文切換)

三、 CPU調度的時機

3.1系統運行時會發生很多事件:
創建、喚醒、退出等進程的控制操作
進程等待I/O、I/O中斷
時鐘中斷(時間片用完、計時器到時)
進程執行過程中出現abort異常
事件的發生->當前運行的進暫停運行->硬件機制響應後->進入操作系統,處理相應的事件->結束處理後:某些進程的狀態發生變化,也可以有創建了一些新的進程->就緒隊列改變了->需要進程調度根據預設的調度算法從就緒隊列選一個進程
3.2  進程調度的時機
  • 進程正常終止或由於某種錯誤而終止
  • 新進程創建或一個等待進程編程就緒
  • 當一個進程從運行態進入阻塞態
  • 當一個進程從運行態變爲就緒態

總之,內核對中斷、異常、系統調用處理後返回到用戶態時 要重新調度

四、 CPU調度過程

4.1 進程切換
進度調度程序從就緒隊列中選擇了要運行的進程:這個進程可以是剛剛被暫停執行的進程,也可能是令另一個進程
進程切換——是指一個進程讓出處理器,由另一個進程佔用處理器的過程。
進程切換的主要工作:
  • 切換全局頁目錄以加載一個新的地址空間
  • 切換內核棧和硬件上下文,其中硬件上下文包括了內核執行新進程需要的全部信息,如:CPU相關寄存器
切換過程包括了對原來進程各種狀態的保存和對新進程各種狀態的恢復。
4.2 上下文切換的具體步驟
場景: 進程A下CPU,進程B上CPU
  • 保存進程A的上下文環境(程序計數器、程序狀態字、其他寄存器。。。)
  • 用新狀態和其他相關信息更細進程A的PCB
  • 把進程A移至合適的隊列(就緒、阻塞、、、)
  • 將進程B的狀態設置爲運行態
  • 從進程B的PCB中恢復上下文(程序計數器、程序狀態字、其他寄存器。。。)
上下文切換開銷(COST)
  • 直接開銷:內核完成切換所用的CPU時間
    • 保存和回覆寄存器...
    • 切換地址空間(相關指令比較昂貴)
  • 間接開銷
    • 高速緩存(Cache)、緩衝區緩存(Buffer Cache)和TLB(Translation Lookup Buffer)失效 

五、CPU調度算法

5.1 CPU調度算法的設計

  用戶角度 系統角度
性能 週轉時間、響應時間、最後期限 吞吐量、CPU利用率
其他 可預測性 公平性、強制優化級、平衡資源

調度算法的衡量指標:
  • 吞吐量 Throughput - 每單位時間完成的進程數目
  • 週轉時間TT(Turnaround Time)- 每個進程從提出請求到運行完成的時間
  • 響應時間RT(Response Time)- 從提出請求到第一次迴應的時間
  • 其他指標
    • CPU利用率(CPU Utilization)- CPU做有效工作的時間比例
    • 等待時間(Waiting Time) - 每個進程在就緒隊列(Ready Queue)中等待的時間
5.2 調度算髮設計中需要考慮的問題:
  • 進程控制塊PCB中 - 需要記錄哪些與CPU調度有關的信息
  • 進程優先級及就緒隊列的組織
  • I/O密集型與CPU密集型進程
  • 時間片
優先級

靜態優先級:進程創建時指定了一個優先級、運行過程中不可改變
動態優先級:進程創建時指定了一個優先級、運行過程中可以動態變化

進程就緒隊列組織
  
搶佔與非搶佔(佔用CPU的方式)
  • 可搶佔式Preemptive(可剝奪式)- 當有比正在運行的進程優先級更高的進程就緒時,系統可強行剝奪正在運行進程的CPU,提供給更高優先級的進程使用
  • 不可搶佔式Non-Preemptive(不可剝奪式)- 某一進程被調度運行後,除非由於它自身原因不能運行,否則一直運行下去
I/O密集型與CPU密集型進程
  • I/O密集型或I/O型(I/O-bound)- 頻繁的進行I/O,通常會花費很多時間等待I/O操作完成
  • CPU密集型或CPU型或計算密集型(CPU-bound)- 需要大量的CPU時間進行計算

六、時間片(Time slice 或 quantum)

一個時間段,分配給調度上CPU的進程,確定了允許該進程運行的時間長度。
6.1 確定時間片時應考慮的因素:
1.進程切換的開銷
2.對相應時間的要求
3.就緒進程的個數
4.CPU能力
5.進程的行爲

七、批處理系統中採用的調度算法

主要衡量算法的因素(吞吐量、週轉時間、CPU利用率、公平、平衡)

7.1 先來先服務(FCFS)--First Come First Serve

      特點:先進先出 First in First out(FIFO) 按照進城就緒的先後順序使用CPU 非搶佔式的
      優缺點: 公平  實現簡單;長進程後面的短進程需要等待很長時間,不利於用戶體驗
      例子:  三個進程按順序就緒: P1 ,P2 , P3
  進程 P1執行需要24s, 而P2 , P3各自需要3s
      1.採用FCFS調度算法:
                  
      2. 改變調度順序: P2 , P3,P1

                  

7.2 短作業優先SJF(Shortest Job First)

特點: 具有最短完成時間的進程優先執行; 非搶佔式的
        最短剩餘時間優先:(shortest Remaining Time Next(SRTN))
        SJF搶佔式版本,即當一個新就緒的進程比當前進程具有更短的完成時間時,系統搶佔當前進程,選擇新就緒的進程執行。
算法思想: 先完成短的作業;改善短作業的週轉時間
例子:
                  
                  
非搶佔式的:
 
(P4結束爲16)
搶佔式的:

         
         (P1結束爲16)
優缺點:
優點: 最短的平均週轉時間(條件: 在所有進程同時可運行時,採用SJF調度算法可以得到最短的平均週轉時間)
缺點:不公平(源源不斷的段任務到來,可能使長的任務長時間得不到運行->產生“飢餓”現象(starvation))

7.3 最高相應比優先HRRN(Highest Response Ratio Next)

1. 是一個綜合的算法
2. 調度時,首先計算每個進程的響應比R:之後總是選擇R最高的進程執行  
              <span style="font-size:18px;">   相應比R = 週轉時間/處理時間 = (處理時間 + 等待時間)/ 處理時間 = 1 + (等待時間 / 處理時間)</span>

 

八、交互式系統中採用的調度算法

   衡量指標(響應時間;公平;平衡)
8.1 時間片輪轉調度算法     
B用完了時間片後,就到了隊列隊尾,然後調度選擇了下個進程F進入CPU(依次輪流)。。。
       1. 目標: 爲短任務改善平均響應時間
       2. 解決思路:
    •   週期性切換
    •   每個進程分配一個時間片
    •   時鐘中斷 -> 輪換
       3.如何選擇合適的時間片

  4.優缺點
    • 公平
    • 有了與交互式計算,響應時間快
    • 由於進程切換,時間片輪轉算法要花費較高的開銷
    • RR對不同大小的進程是有利的(如果相同大小的進程可以看下面的例子)
                   
     5. 例子
8.2  虛擬輪轉法(VIRTUAL RR)
8.3  最高優先級調度算法()
1.選擇優先級最高的進程投入運行
2.通常: 系統進程優先級 高於 用戶進程
           前臺進程優先級 高於 後臺進程
           操作系統更偏好 1/O型進程
3.優先級可以是靜態不變的,也可以是動態調整
優先數可以決定優先級
4.就緒隊列可以按照優先級組織
5.特點:實現簡單;不公平(產生飢餓現象)
6.優先級反轉問題(Priority Inversion)-- 又稱 優先級反置、反轉、倒掛
         這個問題是基於 優先級搶佔式的調度算法
一個低優先級的進程持有一個高優先級進程所需要的資源,使得高優先級進程等待低優先級進程運行。
               影響:系統錯誤; 高優先級進程停滯不前,導致系統性能降低
解決方案: 設置優先級上限;優先級繼承;使用中斷禁止
發佈了29 篇原創文章 · 獲贊 12 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章