程序管理和排程 排程器的實現

2021-07-15 02:01:24 字數 2122 閱讀 2156

2.5 排程器的實現

記憶體中儲存了對每個程序的唯一描述,並通過若干結構域其他程序鏈結起來。排程器面對的情形就是這樣,器任務是在程式之間共享cpu時間,創造並行執行的錯覺。正如以上的討論,改任務分為兩個不同部分:乙個設計排程策略,另乙個設計上下文切換

2.5.1 概觀

核心必須提供一種方法,在各個程序之間盡可能公平地共享cpu時間,而同時又要考慮不同的任務優先順序。完後才能夠該墓地有許多方法,各有其利弊。

*schedule函式式理解排程操作的起點。改函式定義在kernel/sched.c中,是核心**中最長呼叫的函式之一。排程器的實現受若干因素的影響而稍顯模糊。

*在多處理器系統上,必須注意結構細節,以避免排程器子項干擾。

*不僅實現了優先排程,還實現posix標準需要的其他兩種軟實時策略。

*使用goto以生成最有的組合語言**。

當前的排程器置烤爐程序的等待時間,即程序在就緒佇列(run-queue)中已經等待了多長時間。對cpu時間需求最嚴格的程序被排程執行。

排程器的一般原理是,按所能分配的計算能力,向系統中的每個程序提供最大的公正性。或者從乙個角度來說,他檢視確保沒有程序被虧待。

紅黑樹是核心的標準資料結構。

*程序的不同優先順序,更重要的程序必須必次要程序更多的cpu時間份額。

*程序不能切換的太多頻繁,因為上下文切換,即從乙個程序改變到另乙個,是有一定開銷的。在切換發生的態頻繁時,過多時間話費在程序切換的過程中,而不是用於實際的工作。

2.5.2 資料結構

排程器使用一系列資料結構,來排序和管理系統中的程序。

可以用兩種方法啟用排程。一種只記得額,比如程序打算睡眠或處於其他原因放棄cpu;另一種是通過週期性機制,以固定的頻率執行,不時檢測是否有必要程序金恆切換。在下午中我將這兩個元件稱為通用排程器(generic scheduler)或核心排程器(core scheduler).本質上,通過排程器是乙個分配器,與其他兩個元件互動

(1)排程類用於判斷接下來執行那個程序。核心支援不同的排程策略(完全公平排程、實時排程在五十可做時排程空閒程序),排程類使得能夠以模組化方法實現這些策略,即乙個雷的**不需要與其他類的**互動。

在排程器被呼叫時,他阿輝查詢排程器。

(2)在選中將要執行的程序之後,必須執行底層任務切換。這需要與cpu的緊密互動。

1.task_struct成員

各程序的task_struct有幾個成員與排程相關。

*並非系統上的所有程序同樣重要。不那麼緊急的程序不需要關注,而重要的工作應該可能快速完成。但task_struct採用了3個成員來表示程序的優先順序:prio和normal_prio表示冬天優先順序,static_prio表示程序的靜態優先順序。靜態優先順序是程序啟動時分配的優先順序。他可以用nice和sched_setschduler系統呼叫修改,否則在程序執行期間會一直保持恆定。

但排程器考慮的優先順序則儲存在prio.由於在某些情況下核心需要暫時提高程序的優先順序,因此需要滴3個成員來表示。

*rt_priority表示實時程序的優先順序。改置不會代替先前討論的那些紙!最低的實時優先順序為0,而最高的優先順序是99.

*sched_class 表示程序所屬的排程器類。

*排程器不限於排程程序,還可以處理更大的分配。

*policy儲存了對改程序應用的排程策略。

sched_normal用於普通程序,他們通過完全公平排程器來處理。sched_bastch和sched_idle也通過公平排程器來處理,不過可用於次要的程序。sched_batch用於非互動、cpu使用秘籍的屁處理進化成呢過。

*sched_rr和sched_fifo用於實現軟實時程序。shed_rr實現了一種迴圈方法,而sched_fifo則使用先進先出機制。

* cpus_allowed是乙個味域,在多處理器系統上使用,用來限制程序可以在那些cpu上執行。

* *run_list和time_slice是迴圈實時排程器所需要的,但不用於完全公平排程器。run_list是乙個表頭,用於維護包含個程序的乙個執行表,而time_slice則指定程序可使用cpu的剩餘時間段。

2排程器類

排程器類聽了通用排程器和各個排程方法之間的關聯。排程器類有特定資料結構中匯集的幾個函式指標表示。全域性帶哦度器請求的各個操作都可以有乙個指標表示。這使得無需了解不同排程器類的內部工作原理,即可建立通用排程器。

程序管理 程序排程

一 概念 1 處理機管理是作業系統的主要功能之一。處理機管理的實現策略決定了作業系統的型別,其演算法好壞直接影響整個系統的效能 2 程序排程 通過某種規則或演算法從就緒 等待 程序佇列中選出乙個程序投入執行 3 排程是乙個基本的作業系統功能。cpu排程是作業系統設計的核心問題 二 cpu排程程式 1...

作業排程和程序排程的區別

處理機排程是作業系統的主要功能之一,它的實現策略決定了作業系統的型別,其排程演算法的優劣直接影響整個系統的效能。處理機排程的任務是選出待分派的作業或程序,為之分配處理機。一般來說,處理機排程可分為三個級別,分別是高階排程 中級排程和低階排程。高階排程又稱作業排程,作業就是使用者程式及其所需的資料和命...

程序排程與排程器及演算法

核心v2.6.23之後 程序的優先順序 總結linux核心的三種 排程策略 sched other 分時排程策略,預設的 sched fifo實時排程策略,先到先服務 sched rr實時排程策略,時間片輪轉 linux 程序排程有乙個有趣歷史。在 2.5 版本之前,linux 核心採用傳統 uni...