天天看點

作業系統之程序排程 (十一) --- 程序排程的時機、程序排程的方式、程序排程的狹義與廣義...程序排程

文章目錄

  • 程序排程
    • 程序排程的時機
      • 對遺留問題的解釋
    • 程序排程的方式
    • 程序排程的狹義與廣義
    • 總結
    • 感謝

程序排程

程序排程的時機

在上篇中說到,程序排程(低級排程),就是按照某種算法從就緒隊列中選擇一個程序為其配置設定處理機。我們現在來說說什麼時候需要使用到程序排程與切換。

程序排程與切換的時機分為兩種情況,一種是目前運作的程序

主動放棄

處理機,還有一種是目前運作的程序

被動放棄

處理機。接下來看看它們分别對應什麼事件。

  • 目前運作的程序主動放棄處理機
    1. 程序正常終止。
    2. 運作過程中發生異常而終止。(如 内中斷)
    3. 程序主動請求阻塞。(如 請求使用列印機)
  • 目前運作的程序被動放棄處理機
    1. 配置設定給該程序的時間片用完。
    2. 有更緊急的事情要處理。(如 外中斷)
    3. 有更高優先級的程序進入就緒隊列。
注意:有的系統隻允許程序主動放棄處理機,而在有的系統,程序可以既主動放棄處理機,又可以被剝奪處理機(當有更緊急的任務需要處理時)。

當然,有時候我們也不能進行程序排程與切換,比如以下的情況。

  • 不能進行程序排程與切換的情況
    1. 在進行中斷的過程中。中斷處理過程複雜,與硬體密切相關,很難做到在中斷處理的過程中進行程序排程與切換。
    2. 在原子操作過程中(原語)。原子操作不可中斷,要一氣呵成。
    3. 程序在作業系統核心程式臨界區中時。 (這個在下面會解釋)

對遺留問題的解釋

在解釋上述問題之前,先說說什麼是臨界資源,什麼是臨界區。

  • 臨界資源:一段時間内隻允許一個程序使用的資源。即 各個程序隻能互斥的通路臨界資源。
  • 臨界區:程式中通路臨界資源的那段代碼

核心程式臨界區一般是用來通路某種核心資料結構(臨界資源)的代碼。對于就緒隊列這種核心臨界資源,當有一個程序通路就緒隊列時,該程序會給就緒隊列上鎖,以防其他程序的通路,是以此時我們不能進行程序排程,因為就緒隊列被上鎖了,程序排程相關程序無法通路該隊列。

是以,程序在作業系統核心程式區時的确不能進行程序排程,但

程序處于(普通)臨界區時還是可以進行程序排程的

,下面對其解釋。

核心程式臨界區和普通臨界區不一樣,普通臨界區通路的臨界資源不會直接影響到作業系統核心的管理工作,比如程序請求列印機這種臨界資源,由于列印機準備需要時間,CPU總不能一直等待列印機準備完畢吧,是以此時需要進行程序排程。

程序排程的方式

程序排程的方式分為兩種,分别是非剝奪式排程方式和剝奪式排程方式

  • 非剝奪排程方式

    該方式又稱非搶占方式。該方式隻允許程序主動放棄處理機。在運作過程中即使有更緊迫的任務到達,目前程序依然會繼續使用處理機,直到該程序終止或主動要求進入阻塞态。這種方式實作簡單,系統開銷小,但是無法及時的處理緊急任務,适合于早期批處理系統。

  • 剝奪排程方式

    該方式又稱搶占方式。該方式允許程序處理機被剝奪。當有一個程序正在處理機上運作時,如果有一個更重要的程序需要使用處理機,作業系統會立即暫停正在運作的程序,将處理機配置設定給更重要的那個程序。這種方式實作相對複雜,但是可以優先處理緊急任務,也可以實作讓各程序按時間片規劃輪流執行相應的功能(通過時鐘中斷),适合于分時作業系統、實時作業系統。

以上兩種方式類似于銀行排隊,非剝奪排程方式就是每個人都按照順序排好,順序的完成需求,安分守己,而剝奪排程方式就是,當你正在處理需求的時候,來了一個彪形大漢,強制的把你從隊頭中踢出。

程序排程的狹義與廣義

  • 狹義的程序排程

    狹義的程序排程隻是指從就緒隊列中選擇一個程序,為其配置設定處理機資源,不包括程序切換。

  • 廣義的程序排程

    廣義的程序排程包括了選擇程序和切換程序兩個過程。

小貼士:程序切換是有代價的,如果過于頻繁的進行程序排程、切換,必然會導緻整個系統的工作效率降低,使系統大部分時間都花在程序切換上,而使真正用于運作程序的時間減少。

總結

作業系統之程式排程 (十一) --- 程式排程的時機、程式排程的方式、程式排程的狹義與廣義...程式排程

感謝

以上内容大部分來自王道作業系統系列視訊教學。

繼續閱讀