作業系統 CPU排程(一)

2021-10-02 13:43:45 字數 2116 閱讀 7946

cpu排程室多道程式作業系統的基礎。通過在程序之間切換cpu,作業系統可以提高計算機的生產效率。接下來會展示多個不同cpu的排程演算法。還要闡述為特定系統選擇演算法的問題。

多道程式設計的 目標是在任何時候都有乙個程序在執行,以使cpu使用了最大化。在單處理器系統中,每次允許乙個程序執行;任何其他程序必須等待直到cpu空閒且能被排程為止。

多道程式設計的思想比較簡單。程序被執行知道它必須等待,通常等待某個i/o請求完成。在乙個簡單計算機系統中,cpu就會因此空閒;所有這些等待時間就浪費了。採用了多道程式設計,試圖有效地使用這一時間。多個程序可同時處於記憶體中。當乙個程序必須等待時,作業系統會從該程序拿走cpu控制權,並將cpu交給其他程序。這種方法會繼續。

排程室作業系統的基本功能。幾乎所有的計算機資源在使用前都需要被排程。cpu是最為重要的計算機資源。一次,cpu排程對於作業系統設計來說非常重要。

cpu的成功排程依賴於程序的如下觀測屬性:程序執行由cpu執行和i/o等待週期完成。程序在這兩個狀態之間切換。程序執行從cpu區間(cpu burst)開始。在這之後是i/o區間(i/o burst),接著是另乙個cpu區間,接著另乙個i/o區間,如此進行下去。最終,最後的cpu區間通過系統請求終止執行,而不是又乙個i/o區間(如下圖)。

這些cpu區間的長度已經被大量地測量過。雖然它們隨著程序和計算機的不同變換很大,但是它們都呈現出類似圖6.2 所示的頻率曲線。該曲線通常表徵為指數或超指數形式,具有大量短cpu區間和少量長cpu區間。i/o約束程式通常具有很多段cpu區間。cpu的約束程式可能有少量的長cpu區間。這種分布能有助於人們選擇合適的cpu排程演算法。

每當cpu變為空閒時,作業系統就必須從就緒佇列中選擇乙個程序執行。程序選擇由短期排程程式(short-term shcedular, 或cpu排程程式)執行。排程程式從記憶體中就緒可執行的程序裡選擇乙個,並為其中之一分配cpu。

就緒佇列不必是先進先出(fifo)佇列。正如研究各種排程演算法時將看到的,就緒佇列可實現為fifo佇列、優先佇列、樹或僅僅是無序鍊錶。不過,從概念上來說,就緒佇列內的所有程序都要哦排隊等待機會再cpu上執行。佇列中的記錄通常是程序的程序控制塊(process control block ,pcb)。

cpu排程決策可在如下四種環境下發生:

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

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

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

當乙個程序終止時。

對於第一和第四兩種情況,就排程而言沒有選擇。乙個新程序(如果就緒佇列有乙個程序存在)必須被選擇執行。不過,對於第二和第三兩種情況,可以程序選擇。

搶占對於作業系統核心的設計也有影響。在處理系統呼叫時,核心可能 忙於為程序而 活動。這些活動可能涉及改變重要核心資料(例如,i/o佇列)。如果乙個程序在進行這些修改且核心(或裝置驅動程式)需要讀或修改同一結構時被搶占,那麼會有什麼結果呢? 肯定會導致 混亂。有的作業系統如絕大多數unix系統,通過在上下文切換之前等待系統呼叫完成或等待發生i/o阻塞來處理這一問題。這種方法確保核心結構簡單,因為在核心資料結構處於不一致狀態時,核心不會搶占乙個程序。遺憾的是,這種核心執行模型對實時計算和多處理器的支援較差。這些問題及其解決方案在接下來討論。

對unix的情況來說,**段仍處於危險。因為根據定義中斷可以隨時發生,而且不能總是被核心所忽略,所以受中斷影響的**段必須加以保護比避免同時使用。作業系統需要在幾乎所有時候能接受中斷,否則輸入會被丟失或輸出會被改寫。為了這些**段不被多個程序同時訪問,所以在進入時要禁止中斷而在退出時要重新允許中斷。可遺憾的是,禁止中斷和允許中斷很花費時間,尤其是對於多處理系統。為了讓系統可有效地利用多個cpu, 必須儘量減少中斷狀態的改變而盡量增加鎖的細化程式。

與cpu排程功能有關的另一部分是分配程式。分配程式是乙個模組,用來將cpu的控制交給由短期排程程式所選擇的程序。其功能包括:

切換上下文

切換到使用者模式

跳轉到使用者程式的合適位置以重啟這個程式。

分配程式應盡可能快,因為在每次程序切換時都要使用。分配程式停止乙個程序而啟動另乙個程序執行所要花費的時間成為分派延遲(dispatch latency)。

作業系統 CPU排程

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

作業系統面試 cpu排程

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

作業系統 (八 CPU排程

目錄 1.背景,cpu排程 在程序 執行緒生命週期的什麼時候進行排程?核心執行排程程式的條件 滿足其一即可 cpu排程方式,是否搶占 核心態 使用者態 2 排程原則 2.1 排程策略 2.2 程式執行模型 2.3 比較排程演算法的準則 2.4 吞吐量 vs 延遲 2.5 公平的目標 3 排程演算法 ...