作業系統概念 第五章 CPU排程

2021-08-18 20:28:31 字數 3310 閱讀 9793

排程準則

排程演算法

演算法評估(待補完)

對於單處理器系統,cpu只能執行乙個程序,其他程序必須等待,直到cpu空閒為止。多道程式的目標是為了使任何時候都有程序在執行,使cpu的利用率最大化。

cpu排程使程序在等待時(通常是等待某些io請求完成),從該程序拿走cpu的使用權交給另乙個程序,如此迴圈往復。

程序有兩個屬性:cpu執行i/o等待週期,這是cpu成功排程依賴的基礎。程序執行從cpu區間(cpu burst)開始,之後到i/o區間(io burst),迴圈往復,最後乙個操作也是在cpu區間(通過系統請求終止執行)。

cpu區間的長度通過大量的測試,得到乙個程序通常是有大量的短cpu區間和少量長cpu區間,這種分布有助於選擇合適的cpu排程演算法。

在cpu空閒時,作業系統從就緒佇列中選擇乙個程序來執行,這一操作通常由短期排程程式cpu排程程式執行

就緒佇列可以有多種實現(fifo、優先佇列,樹,無序鍊錶…),不過從概念上來說,就緒佇列中的所有佇列都要排隊等待,佇列中的記錄通常為pcb。

cpu排程決策通常會在以下四種環境中發生:

乙個程序從執行狀態切換到等待狀態(如io請求,系統呼叫wait() )

乙個程序從執行狀態切換到就緒狀態(如中斷)

乙個程序從等待狀態切換到就緒狀態(如io請求完成)

乙個程序終止時

對於第1和第4種情況,沒有選擇只有排程。乙個新程序(如果有)必須被選擇執行,這種情況下的排程方案稱作非搶占的(nonpreemptive)協作的(coorperative)

對於其他情況(包括但不限於第2和第3種),可以進行選擇,這種情況下該排程方案為搶占的(preemptive)

分派程式(dispatcher)是乙個模組,是與cpu排程功能有關的另乙個部分,有以下功能:

分派程式在每次切換的時候都會呼叫(所以應該盡可能的快),分派程式停止乙個程序而啟動另乙個程序花費的時間成為分派延遲(dispatch latency)

不同的cpu排程演算法可能適用於不同的程序,為了比較各個cpu的排程演算法,提出了以下準則:

這些排程準則不能全部滿足,在滿足一項準則的時候,可能會有另一項準則收到損失,如:

i/o裝置利用率和cpu利用率:cpu利用率的最大化可以通過減少上下文切換實現。而i/o裝置利用率的最大化則是通過盡可能排程已經準備好進行i/o操作的任務,這會導致上下文切換 。

在說明排程演算法之前,需要再回顧一下就緒佇列:就緒佇列包含了系統中,駐留在記憶體中就緒的,準備執行的程序。該佇列通常用鍊錶實現,頭結點指向第乙個和最後乙個pcb塊的指標,每個pcb塊包括指向下乙個pcb的指標域。

先到先服務演算法(first come, first served(fcfs)),即簡單的fifo佇列,先請求cpu的程序先分配到cpu,但平均等待時間較長,並會因為等待乙個cpu約束程序很多io約束程序無法執行而產生護航效果(convoy effect)

該演算法是非搶占的

最短作業優先排程(shortest-job-first(sjf))將每個程序與下乙個cpu區間段相關聯,當cpu空閒時,會賦給具有最短下乙個cpu區間的程序,如果兩個程序區間相同,則採用fcfs排程處理。

這個演算法是最佳的,但乙個難點在於如何知道下乙個cpu區間的長度,因此該演算法經常用於長期排程,通過長期對某個程序的乙個cpu區間的指數平均值來判斷該程序下乙個cpu區間的長度。(也因此改演算法無法用於短期cpu排程上)

該演算法可能是搶占的或非搶占的,搶占sjf(也稱為最短剩餘時間優先排程(shortest-remainint-time-first scheduling))可以搶占當前執行的程序,非搶占sjf會允許當前程序完成其cpu區間。

指數平均值:θn+1 = atn + (1-a)θnt是當前資訊,θ是歷史資訊,a來控制權重,乙個常見的值是1/2

優先順序排程演算法(priority scheduling algorithm)中,每乙個程序都有乙個與它相關聯的優先順序,優先順序最高的任務會被分配到cpu,具有相同優先順序的任務按fcfs排程。

sjf是優先順序排程演算法的乙個特例。其優先順序為下乙個(**的)cpu區間的倒數,cpu區間越大,優先順序越小。

優先順序通常為固定區間的數字,如0~7,0~4095,

不同的系統中,採用高數字高優先和低數字高優先都是可能的。

優先順序的定義方式有兩種,外部定義/內部定義

如sjf演算法中的搶占與非搶占一樣,優先順序排程演算法同樣有搶占和非搶占的問題。搶占優先順序排程演算法會搶占cpu,非搶占優先順序排程演算法會將新程序新增到就緒佇列的頭部。

該演算法的乙個主要問題:無窮阻塞(indefinite blocking)/飢餓(starvation),因為優先順序排程演算法會導致低優先順序程序無窮等待cpu。其解決方法之一是老化(aging),即逐漸增加在系統中等待時間很長的程序的優先順序。

轉輪法排程(round-robin rr)排程演算法專門為分時系統設計。其與fcfs相似,但增加了搶占以切換程序。

其實現思想是:定義乙個較小的時間單元/時間片(10-100ms),每乙個程序分配不超過乙個時間單元的cpu,時間結束後,該程序會通過中斷被新增到就緒佇列的尾部(如果該程序沒有完成任務)

在效能表現上,如果時間片較大,那麼其效能接近fcfs,如果時間片較小,那麼該演算法會造成大量的上下文切換,因此時間片相對於上下文切換的時間來說必須足夠大。

現在來假設轉輪法排程的時間片時間為10ms,有10個io約束的程序,每執行1mscpu計算執行10ms的io請求。

排隊模型

模擬實現

作業系統第五章

虛擬儲存器的基本概念 引入 實現 特徵 請求分頁儲存管理方式 硬體支援 位址變換 分配演算法 頁面置換演算法 效能分析 請求分段儲存管理方式 主要相同點是都要在記憶體與外存之間交換資訊 主要區別在於交換技術換出換進一般是整個程序 proc結構和共享正文段除外 因此乙個程序的大小受物理儲存器的限制 而...

作業系統 第五章 資源分配與排程

第五章 資源分配與排程 5.1 資源管理概述 5.1.1 5.1.2 資源管理目的 為使用者提供一種簡單而有效地使用資源的方法 任務 1 資源資料結構的描述 2 確定資源的分配原則和排程原則 3 執行資源分配 4 訪問控制和安全保護 作業系統對資源區分兩種不同的概念 物理資源 系統中那些物理 可實際...

作業系統原理第五章(資源分配與排程)

一 資源管理 1.資源的動態分配 程序所需的資源是在程序執行中根據運 況動態的分配 使用和釋放的。靜態分配 批處理作業系統中,對作業一級採用資源靜態分配方法。作業所需要的資源是在排程到這個作業的時候,根據使用者給出的資訊進行分配,並在做作業執行完畢後釋放所獲得的的全部資源。2.資源管理任務 對資源資...