作業系統 程序排程

2021-10-17 18:42:52 字數 4282 閱讀 5556

目錄

1. 基本概念

1.1 cpu-i/o執行週期

1.2 cpu排程程式(cpu scheduler)

1.3 程序狀態模型

1.4 搶占排程

1.5 排程程式(dispatcher)

1.6 排程準則

2. 排程演算法

2.1 先到先服務(fcfs)

2.2 最短作業優先排程(sjf)

2.3 優先順序排程

2.4 輪轉排程(rr)

2.5 多級佇列排程

2.6 多級反饋佇列排程

3 執行緒排程

參考資料:

程序排程目的在程序間切換cpu,最大化cpu利用率,通過作業系統的排程使得計算機資源分配和使用更加高效。

程序的屬性:程序執行包括週期進行cpu執行i/o等待。據此可以將程式分為cpu密集型程式i/o密集型程式

cpu密集型程式一般只有少量長cpu執行;i/o密集型程式一般具有大量短cpu執行。

cpu空閒時,作業系統從就緒佇列中選擇乙個程序來執行,程序選擇採用短期排程程式(short-term scheduler)或cpu排程程式

排程程式分為:短期排程程式中期排程程式長期排程程式

可以參考之前的博文——【作業系統——程序狀態】。

其中七狀態模型包含的情況比較全面,除了程序的建立、就緒、執行、等待、終止這五個狀態,考慮在執行虛擬記憶體管理的作業系統中,可以將暫時不用的程序(處於就緒態和等待態的程序)換出(swap out)到外部儲存裝置(如硬碟)中,在適當的時間再將其換入(swap in)到記憶體中,此時引入了就緒掛起等待掛起狀態。

需要cpu排程的4種情況

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

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

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

當乙個程序終止

排程方案分為兩種:(1)非搶占的(nonpreemptive)或協作的(cooperative)(2)搶占的(preemptive)非搶占排程下,一旦某個程序分配到cpu,該程序會一直使用cpu,直到它終止或切換到等待狀態。搶占排程允許第二個程序搶占第乙個程序的執行,這中間可能涉及程序共享資料的一致性問題,程序同步問題。

這個排程程式在英文原書中稱為「dispatcher」,與上面說的cpu排程程式(cpu scheduler)不同,cpu scheduler負責程序的選擇(排程),而dispatcher負責將cpu控制交給由cpu schedule(即短期排程程式)選擇的程序cpu scheduler負責程序選擇,dispatcher實現排程過程的程序切換細節,個人感覺二者屬於上下游關係

dispatcher的主要功能如下:

排程程式停止乙個程式而啟動另乙個程式所需的時間稱為排程延遲(dispatch latency)

為了比較不同的cpu排程演算法,採用一些比較準則來評價cpu排程演算法的特性,具體的一些比較準則包括

程序排程的理想情況是:最大化cpu使用率和吞吐量,最小化周轉時間、等待時間和響應時間。

先到先服務(first-come first-served,fcfs)排程演算法。通過fifo佇列實現,當乙個程序進入就緒佇列中的時候,它的pcb會被鏈結到佇列尾部;當cpu空閒時,它會分配給位於佇列頭部的程序,並且這個程序從佇列中移去。

特點:最短作業優先(shortest-job-first,sjf)排程演算法。將每個程序與其下次cpu首席執行官度關聯起來,cpu空閒時會被賦給具有最短cpu執行時間(注意是下次cpu執行的時間最短而不是總的時間最短)的程序執行。另一種叫法是:最短下次cpu執行(shortest-next-cpu-burst)演算法。

特點:優先順序排程(priority-scheduling)演算法為每個程序關聯乙個優先順序,具有最高優先順序的程序會分到cpu;具有相同優先順序的程序按照fcfs的順序排程。sjf演算法是乙個簡單的優先順序演算法,其優先順序(p)為下次(**的)cpu執行時間的導數。

特點:輪轉(round-robin,rr)排程演算法,類似fcfs排程,但是增加了搶占以切換程序。將乙個較小的時間單元定義為時間量(time quantum)或時間片(time slice),將就緒佇列作為迴圈佇列,cpu排程整個就緒佇列,為每個程序分配不超過乙個是時間片的cpu。

特點:多級佇列(multilevel queue)排程演算法,將就緒佇列分成多個單獨的佇列,根據程序屬性(如記憶體大小、程序優先順序、程序型別等),乙個程序永久分到乙個佇列,每個佇列有自己的排程演算法。例如可有兩個佇列分別用於前台程序和後台程序,前台佇列可採用rr演算法排程,後台佇列採用fcfs演算法排程。

多級佇列排程演算法例項,有五個佇列,優先順序由高到低,分別為:(1)系統程序;(2)互動程序;(3)互動編輯程序;(4)批處理程序;(5)學生程序。其中每個佇列與更低層佇列相比具有絕對的優先,例如只有系統程序、互動程序和互動編輯程序佇列都為空,批處理佇列內的程序才能執行。如果乙個批處理程序執行過程中有乙個互動程序進入就緒佇列,那麼該批處理程序會被搶占。

另一種可能是,在佇列之間劃分時間片,每個佇列具有一定比例的cpu時間,可用於排程佇列內的程序。例如對於前台-後台佇列例子,前台佇列可有80%的cpu時間,用於程序之間的rr排程;後台佇列可以有20%的cpu時間,用於按fcfs演算法來排程程序。

多級反饋佇列排程(multilevel feedback queue)排程演算法允許程序在佇列之間遷移,其特點在於:

多級反饋佇列排程程式可由下列引數定義:

執行緒可以分為使用者級(user-level)執行緒核心級(kernel-level)執行緒在支援執行緒的作業系統上核心級執行緒(而不是程序)才是作業系統所排程的。這裡理解為上述的程序排程演算法,其實就cpu而言,並不嚴格區分該演算法究竟是用於排程程序還是用於排程執行緒,而是用於排程基本的排程單元在支援執行緒的作業系統上,執行緒才是cpu排程的基本單元,此時上述排程演算法此時用於執行緒排程。

關於使用者級執行緒和核心級執行緒:使用者級執行緒是由執行緒庫管理的,核心並不知道。使用者級執行緒最後執行在cpu上,對映到相應的核心級執行緒,這種對映不是直接的,可能採用輕量級程序(light weight process,lwp),因此核心級執行緒和使用者級執行緒的排程具體實現仍有所區別。

作業系統 程序排程

程序排程程序排程室作業系統必不可少的一種排程。因此在三種型別的os dos windows linux 都無一例外地配置了程序排程。此外它也是對系統效能影響最大的一種處理機排程。程序排程的任務 儲存處理機的現場資訊。在進行排程時首先需要儲存當前程序的處理機的現場資訊,如程式計數器 多個通用暫存器中的...

作業系統程序排程

華中農業大學 學生實驗報告 課程名稱 計算機作業系統 實驗名稱 程序排程 實驗型別 驗證 設計 綜合 創新 實驗目的 實驗目的 1 通過編寫程式實現程序或作業先來先服務 高優先權 按時間片輪轉排程演算法,使 學生進一步掌握程序排程的概念和演算法,加深對處理機分配的理解。2 了解程序 執行緒 的排程機...

作業系統 程序排程

對於單處理器系統,同一時間只有乙個程式可以執行 其他程序都應等待,直到cpu空閒並可排程為止。多道程式的目標是,始終允許某個程序執行以最大化cpu利用率。cpu的程序屬性 週期進行cpu執行和i o等待。程序在這兩個狀態之間不斷交替。程序執行從cpu執行開始,之後i o執行 接著另乙個cpu執行,接...