單週期cpu設計步驟 作業系統基礎19 CPU排程

2021-10-14 17:00:37 字數 3052 閱讀 4537

本節是對作業系統基礎12-程序排程的乙個補充學習。

cpu排程多道程式作業系統的基礎。通過在程序間切換cpu,作業系統可以使得計算機更加高效。

對於單處理器系統,同一時間只有乙個程序可以執行;其他程序都應等待,直到cpu空閒並可排程為止。多道程式的目標是,始終允許某個程序執行以最大化cpu利用率。這種想法比較簡單。乙個程序執行直到它應等待為止,通常等待某個i/o請求的完成。對於簡單的計算機系統,cpu就處於閒置狀態。所有這些等待時間就會浪費,沒有完成任何有用的工作。採用多道程式,我們試圖有效利用這個時間。多個程序同時處於記憶體。當乙個程序等待時,作業系統就從該程序接管cpu控制,並將cpu交給另一程序。這種方式不斷重複。當乙個程序必須等待時,另一程序接管cpu使用權。

這種排程是作業系統的基本功能。幾乎所有計算機資源在使用前都要排程。當然,cpu是最重要的計算機資源之一。因此,cpu排程是作業系統設計的重要部分。

cpu的排程成功取決於如下觀察到的程序屬性,程序執行包括週期進行cpu執行和i/o等待。程序在這兩個狀態之間不斷交替。

程序執行從cpu執行開始,之後 i/o 執行;接著另乙個cpu執行,接著另乙個i/o 執行;等等。最終,最後的cpu執行通過系統請求結束,以便終止執行(圖 1)。

這些 cpu 執行時間已大量測試過。雖然它們隨程序和計算機的不同而變化很大,但是 它們的頻率曲線類似於圖 2 所示。

該曲線通常為指數或超指數的形式,具有大量短 cpu 執行和少量長 cpu 執行。i/o 密集型程式通常具有大量短cpu執行。cpu密集型程式可能只有少量長cpu執行。對於選擇合適的cpu排程演算法,這種分布是很重要的。

需要進行 cpu 排程的情況可分為以下四種:

當乙個程序從執行狀態切換到等待狀態時(例如,i/o 請求,或 wait() 呼叫以便等待乙個子程序的終止)。

當乙個程序從執行狀態切換到就緒狀態時(例如,當出現中斷時)。

當乙個程序從等待狀態切換到就緒狀態時(例如,i/o 完成)。

當乙個程序終止時。

對於第1種和第4種情況,除了排程沒有選擇。乙個新程序(如果就緒佇列有乙個程序存在)必須被選擇執行。不過,對於第2種和第3種情況,還是有選擇的。如果排程只能發生在第1種和第4種情況下,則排程方案稱為非搶占的協作的;否則,排程方案稱為搶占的。在非搶占排程下,一旦某個程序分配到cpu,該程序就會一直使用cpu,直到它終止或切換到等待狀態。windows 3.x就使用這種排程方法。windows 95引入搶占排程,所有之後的 windows 作業系統都使用了搶占排程mac os x作業系統採用搶占排程,而之前的 macintosh作業系統採用協作排程。協作排程在有些硬體平台上是唯一的方法,因為它不需要特殊硬體(如定時器)來支援搶占排程。

不過,當多個程序共享資料時,搶占排程可能導致競爭情況。假設兩個程序共享資料。當第乙個程序正在更新資料時,它被搶占以便第二個程序能夠執行。然後,第二個程序可能試圖讀資料,但是這時該資料處於不一致的狀態(可以使用互斥鎖訊號量等方法解決)。

搶占也影響作業系統的核心設計。在處理系統呼叫時,核心可能為程序而忙於某個活動。這些活動可能涉及改變重要的核心資料(如 i/o 佇列)。如果乙個程序在進行這些修改時被搶占,並且核心(或裝置驅動)需要讀取或修改同樣的結構,那麼會有什麼結果呢?

肯定導致混亂。有的作業系統(包括大多數 unix 系統)這樣處理問題:在上下文切換前,等待系統呼叫的完成,或者等待 i/o 阻塞的發生。這種方案確保核心結構的簡單,這是因為在核心資料結構處於不一致狀態時,核心不會搶占程序。遺憾的是,這種核心執行模式對於實時計算的支援較差(實時系統的任務應在給定時間內執行完成)。

因為根據定義中斷可能隨時發生,而且不能總是被核心所忽視,所以受中斷影響的**段應加以保護,從而避免同時使用。作業系統需要幾乎任何時候都能接受中斷,否則輸入會被丟失或者輸出會被改寫。為了這些**段不被多個程序同時訪問,在進入時禁用中斷而在退出時啟用中斷。重要的是,要注意禁用中斷的**段並不經常發生,而且常常只有少量指令。

與 cpu 排程功能有關的另乙個元件是排程程式。排程程式是乙個模組,用來將 cpu 控制交給由短期排程程式選擇的程序。

排程程式的功能包括:

排程程式應盡可能快,因為在每次程序切換時都要使用。排程程式停止乙個程序而啟動另乙個所需的時間稱為排程延遲。

每當cpu空閒時,作業系統就應從就緒佇列中選擇乙個程序來執行。程序選擇採用短期排程程式或cpu排程程式。排程程式從記憶體中選擇乙個能夠執行的程序,並為其分配 cpu。

注意,就緒佇列不必是先進先出(fifo)佇列。其實現可以是fifo佇列、優先佇列、樹或簡單的無序鍊錶等。然而,在概念上,就緒佇列內的所有程序都要排隊以便等待在 cpu 上執行。佇列內的記錄通常為程序控制塊(pcb)。

作業系統 CPU排程

控制 協調多個程序對cpu的競爭 即按一定的排程演算法從就緒佇列中選擇乙個程序,把cpu的使用權交給被選中的程序 n個程序就緒,等待上m m 1 個cpu執行,需要決策哪個程序分配給哪個cpu執行 排程時機 核心對中斷 異常 系統呼叫處理後返回使用者態時 就緒佇列的改變引發重新排程 如程序正常終止 ...

作業系統面試 cpu排程

cpu排程是多道程式設計的基礎。本文是對作業系統概念 第七版 第五章 cpu排程的學習總結,不足之處歡迎各位博友提出,共同進步。1 介紹cpu排程常見概念。2 介紹cpu排程演算法以及特點。1 cpu排程決策發生的情況 a 當乙個程序從執行態到等待狀態。i o請求 b 執行狀態到就緒態 中斷 c 等...

作業系統 CPU排程(一)

cpu排程室多道程式作業系統的基礎。通過在程序之間切換cpu,作業系統可以提高計算機的生產效率。接下來會展示多個不同cpu的排程演算法。還要闡述為特定系統選擇演算法的問題。多道程式設計的 目標是在任何時候都有乙個程序在執行,以使cpu使用了最大化。在單處理器系統中,每次允許乙個程序執行 任何其他程序...