1. 程式人生 > >作業系統(7)程序--處理機排程:單處理機排程演算法、實時排程、多處理機排程

作業系統(7)程序--處理機排程:單處理機排程演算法、實時排程、多處理機排程

文章目錄

1. 處理機排程概念

處理機排程是作業系統當中用來管理處理機執行能力的這一部分資源的功能。

  1. CPU資源的時分複用
    之前程序切換實際上就是對CPU資源的當前佔用者的一種切換,通過這種切換來實現CPU資源的時分複用。

    處理機排程就是從就緒佇列中挑選下一個佔用CPU執行的程序(單處理機),如果是多處理機的話,就還包含從多個可以用的CPU中挑選就緒程序可使用的CPU資源。
    排程程式是指在核心當中,用來挑選就緒程序的函式。 這裡面就包含兩個問題,一是排程策略(依據什麼原則挑選程序/執行緒),二是排程時機

  2. 排程時機
    ==1==


2. 排程準則

  1. 排程策略
    ==2==

  2. 處理機資源的使用模式
    程序通常是在CPU計算和I/O操作間交替執行
    ==3==

  3. 比較排程演算法好壞的準則

    CPU使用率:CPU處於忙狀態的時間百分比
    吞吐量:單位時間內完成的程序數量(這前兩個都是基於系統效率來講,後面的是從使用者的角度)
    週轉時間:程序從初始化到結束(包括等待)的總時間
    等待時間:程序在就緒佇列中的總時間
    響應時間:從提交請求到產生響應所花費的時間(對於互動性應用)

    ==7==


  1. 吞吐量與相應時間的關係
    ==4==
  2. 處理機排程策略的目標
    1. 響應時間目標(響應時間是作業系統的計算延遲)
      ==5==
    2. 吞吐量目標(吞吐量是作業系統的計算頻寬)
      ==6==
    3. 公平性目標
      公平的定義:保證每個程序佔用相同的CPU時間或者保證每個程序的等待時間相同。公平通常會增加平均響應時間。

3. 排程演算法

前三種為關於就緒佇列排序的演算法,主要是根據先後達到順序、執行時間、等待時間來排序。
==8==

1. 先來先服務演算法(FCFS)

==9==
==10==
在上圖中,程序進入等待或者結束狀態就意味著程序主動讓出CPU,週轉時間指的是程序程序從初始化到結束(包括等待)的總時間。

2. 短程序優先演算法(SPN)

由於先來先服務演算法週轉時間抖動的問題,將程序的執行時間也考慮到演算法裡。短程序優先演算法的策略就是選擇就緒佇列中執行時間最短程序佔用CPU進入執行狀態。這種演算法具有最優平均週轉時間
==11==

  1. 缺點
    ==12==
  2. 改進:短剩餘時間優先演算法(SRT):如果A程序的剩餘執行時間短於當前正在執行的程序的剩餘時間,則允許CPU資源被A程序搶佔。

3. 最高響應比優先演算法(HRRN)

在短程序優先演算法中,會因為長程序等的時間而出現而出現飢餓問題。就出現了這種演算法

在這裡插入圖片描述


4. 時間片輪轉演算法(RR)

在該演算法中,首先約定一個程序排程的基本時間單位:時間片,它是處理機進行資源分配的基本單位。其基本思路就是按照各個程序按照時間片輪流的佔用CPU資源。

  1. 工作原理
    ==14==
  2. 示例
    ==15==
  3. 時間片的長度選擇問題
    ==16==

在前面的演算法中,每個程序佔用CPU多長時間定下來了,排隊的先後順序也定下來了。但是這仍然無法滿足應用程式的所有要求。所以為了綜合前面的演算法,就出現了下面的幾種演算法。

5. 多級佇列排程演算法(MQ)

基本思路

  1. 就緒佇列被劃分為多個獨立的子佇列,比如說前臺需要互動,那麼可以用時間輪轉演算法(時間片設定短些),後臺主要是批處理,就可以用先來先服務。
  2. 各個佇列擁有自己的排程策略
  3. 佇列間的排程採用下圖的策略

==17==

6. 多級反饋佇列演算法(MLFQ)

在多級佇列排程演算法中,各個佇列之間是沒有互動的,也就是程序不能在佇列間移動,這就出現了該演算法。注意,下圖中的高優先順序對應的是第1級;
==18==
演算法特徵: CPU密集型程序的優先順序會下降很快(這樣也就相當於執行時間越長的程序,切換的頻率就會越低,開銷越小)。I/O密集型的程序會停留在高優先順序(因為每次算的時間都很短,時間片沒用完)

7. 公平共享演算法(FFS)

==19==
==20==


4. 實時排程+多處理器排程

實時排程是對時間有要求的排程演算法,多處理器排程是指在有多個處理器的系統裡的排程演算法

1. 實時排程

  1. 實時作業系統
    時間約束的可預測性就是說在什麼情況下,時間約束是可以達到的。
    ==21==

  2. 實時任務以及週期實時任務
    ==22==
    ==23==
    ==24==

  3. 可排程性
    在下圖的示例中,系統在執行這三個週期實時任務時是可排程的麼?
    ==25==

  4. 實時排程的兩種演算法
    ==26==


2. 優先順序反置

注意:在Unix和Linux系統中,優先順序越高,值越小。在Windows中,優先順序越高,值越大。這裡採用第2種。
基於優先順序的可搶佔排程演算法會出現優先順序反置。

  1. T1優先順序為40,它正在執行狀態中,佔用資源L1
  2. 然後,另一個程序T2(優先順序為50)進入執行狀態,在T2的執行過程中,需要申請T1已佔用的資源L1,此時,由於T1已經佔用了資源L1,所以T2就處於等待狀態。
  3. 假設這時T3搶佔CPU進入執行狀態,而T1被迫停止了(且資源也沒有釋放),那麼T2就會一直等待T1的資源,就產生了優先反置現象。
    ==29==
  1. 優先順序繼承
    下圖中,在時刻t3,T3進入了阻塞。在時刻t4,佔用資源的T3繼承了申請資源T1的優先順序,T3就會繼續執行,釋放資源後,T3的優先順序就會變為原來的。
    ==30==
  2. 天花板協議
    ==31==

3. 多處理器排程

==27==
==28==