1. 程式人生 > >作業系統--第三章處理機排程與死鎖_1

作業系統--第三章處理機排程與死鎖_1

處理機排程定義:

在多道程式環境下,動態的將處理機分配給處於就緒狀態的一個程序使之執行.
對於大型系統執行時的效能,很大程度上取決於處理機排程效能的好壞.

處理機排程的層次:

  1. 高階排程:
    又稱為長程排程或作業排程,他的排程物件是外村上處於後備佇列中的作業.高階排程主要用於多道批處理系統中,而在分時和實時系統中不設定高階排程.
  2. 低階排程: 又稱為短程排程或程序排程,其排程物件是程序.在多道批處理,分時和實時三種類型的OS中,都必須配置這級排程.
  3. 中級排程: 又稱記憶體排程,引入它的主要目的是提高記憶體利用率和系統吞吐量,它將已具備執行條件且記憶體又稍有空閒時,把外存上的那些已經具備執行條件的就緒程序再重新調入記憶體,並將其掛在就緒佇列上等待.

處理機排程演算法的共同目標:

  • 資源利用率
  • 公平性
  • 平衡性
  • 策略強制執行

批處理系統的目標:

  • 平均週轉時間短
  • 系統吞吐量高
  • 處理機利用率高

分時系統的目標:

  • 響應時間快
  • 均衡性

實時系統的目標:

  • 截止時間的保證
  • 可預測性

作業與作業排程

作業(Job)定義:作業是一個比程式更寬泛的概念,它不僅包含了通常的資料和程式,還有一份作業說明書,系統根據該說明書來對程式的執行進行控制.

同進程一樣,作業也有與之對應的控制塊:JCB 作業控制塊.它是作業在系統中存在的標誌,儲存了系統的作業進行管理和排程所需要的全部資訊.

作業排程的主要任務:根據JCB的資訊,檢查系統中的資源能否滿足作業需求,按照一定的排程演算法(下面介紹),從外存的後備佇列選取某些作業調入記憶體,並建立程序,分配資源,再將建立的程序排在就緒佇列上等待排程.每次進行作業排程時,都需要做兩個決定:接納多少個作業,接納哪些作業.

排程演算法:

  1. 先來先服務(FCFS)排程演算法:
    它是最簡單的排程演算法,系統按照先來後到的順序進行排程它是最簡單的排程演算法, 系統按照先來後到的順序進行排程

  2. 短作業優先(SJF)排程演算法:
    它以作業的長短來計算優先順序,作業越短,其優先順序越高,作業的長短是由作業所要求的執行時間來衡量的.
    該演算法相較於FCFS有改進但還是有很大的缺陷:
    必須預知作業的執行時間/對長作業非常不利/
    人機無法實現互動/不能保證緊迫性作業及時處理.

  3. 優先順序(PSA)排程演算法:
    它以外部賦予作業相應的優先順序,排程演算法根據該優先順序進行排程

  4. 高響應比優先(HRRN)排程演算法:
    它以一個響應比Rp為基準排程作業
    Rp=(等待時間+要求服務時間)/要求服務時間=響應時間/要求服務時間
    由上式可以看出:
    ①. 如果作業等待時間相同,那麼要求的服務時間越短優先順序越高,有利於短作業
    ②. 如果作業要求服務時間相同時,作業的優先順序又取決於等待時間

程序排程

程序排程的任務: 儲存處理機現場資訊//按某種演算法選取程序//把處理機分配給程序.


程序排程方式:
1. 非搶佔式: 一旦把處理機分配給某程序,除非程序執行完畢,或者阻塞,否則不會因為其他任何原因去搶佔當前正在執行程序的處理機.
2. 搶佔方式: 這種排程方式允許排程程式根據某種規則,去暫停某個正在執行的程序,將已分配給某程序的處理機重新分配給另一程序.其"搶佔"主要原則有三:

①. 優先權原則(高優先權搶佔低優先權程序)
②. 短程序優先原則(新到的短程序搶佔當前長程序)
③. 時間片原則(時間片用完便重新排程)

排程演算法:

  • 輪轉排程(RR)演算法: 將就緒程序排成一個佇列,從隊首開始分配時間片,用完但未執行完畢的移至佇列尾等待下一次分配.在該演算法中,當時間片未用完但程序執行完畢也會觸發排程.
  • 優先順序排程演算法: 按型別分為兩種:搶佔式和非搶佔式優先順序排程演算法.這裡的排程規則便是"程式優先順序".
    優先順序的型別分為兩種:
    ①.靜態優先順序:在建立程序時便決定了優先順序,在執行期間不變.
    ②.動態優先順序:在建立程序時先賦予一個優先順序,隨著程序的推進或等待時間的增加而改變,以獲得更好的排程效能.
  • 多佇列排程演算法: 設定多個佇列,每個佇列採用一種排程演算法(可以不同),固定某種型別的程序進入哪一個佇列,以此獲取更好的排程效能.
  • 多級反饋佇列(MFQ)排程演算法:設定多個佇列,均採用FCFS演算法,按優先順序由高到低排列,S1佇列優先順序最高,時間片每次分配最短,當S1佇列作業在分配的時間片內未做完時,將其移至S2佇列尾,只有S1佇列空時才會排程S2佇列.在S2佇列仍未完成的作業繼續下調至S3佇列尾,以此類推.

實時排程

實現實時排程的基本條件:
①提供必要的資訊:包括(就緒時間,開始截止時間,完成截止時間,處理時間,資源要求和優先順序).
②.系統處理能力能夠在規定時間內完成全部的任務

實時排程的演算法依然分為:非搶佔式和搶佔式.
搶佔式中增加了一種排程演算法:立即搶佔.
立即搶佔:它要求作業系統快速響應外部中斷,一旦出現外部中斷,只要當前任務未處於臨界區,則立即剝奪當前任務的執行,將處理機分配給請求中斷的緊迫任務.

排程演算法:

  • 最早截止時間優先(EDF)演算法:如字面意義,將任務按截止時間排序,截止時間越早,優先順序就越高.
  • 最低鬆弛度優先(LLF)演算法:
    鬆弛度:鬆弛度代表了該任務還可等待的最大時間,小於0時任務無法在截止時間前完成.
    鬆弛度=截止完成時刻–當前時刻–還需執行時間
    該演算法根據任務的鬆弛程度,鬆弛程度越低,優先順序就越高.

優先順序倒置

何為優先順序倒置?
即P2任務優先順序低於P1任務卻優先於P1執行的情況.

產生原因?
舉例說明:有P1P2P3三個任務,優先順序P1最高P3最低.當進入記憶體順序為P3P2P1時,P3在排程之前申請了臨界資源M,在P1開始執行之後想要申請M時便會被P3阻塞,此時低優先順序的P2反而會比高優先順序的P1先執行.

解決辦法:
在動態優先順序的基礎上,當高優先順序任務P1申請一個被低優先順序任務P3佔用的臨界資源時,一方面阻塞P1,另一方面讓P3繼承P1的優先順序,讓P3繼續執行直至P3退出臨界區.