cpu排程的目的在於提高cpu利用率,不讓cpu閒著。cpu是寶貴的資源,如果有乙個程序,本來在cpu中執行,忽然因為要使用io資源,於是轉而請求io,這邊cpu掛起,造成就緒佇列中的其他程序等待,這樣就造成了浪費。
一、cpu排程演算法
1、先到先服務(fcfs)
誰先請求cpu誰先得到服務,一直到服務完。這應該是最簡單的排程了。但效率不高,有些只須很短cpu區間的程序也只能死等,會造成平均等待時間較長。
2、最短作業優先(sjf)
最佳排程演算法,平均等待時間最小。問題在於,如何知道下乙個cpu區間的長度,或者說,如何知道程序要消耗多少cpu時間?
可以通過一定的演算法來**這個長度。
3、優先順序
程序被賦予優先順序。優先順序高的先獲得cpu。
優先順序排程可以是搶占式也可以是非搶占式。、
搶占式:優先順序高的程序到達就緒佇列時,假如正在執行的程序優先順序比它低,立刻搶占cpu;
非搶占式:優先順序高的程序到達就緒佇列時,排在就緒佇列頭部
缺點是會產生無窮堵塞或飢餓,造成有些低優先順序程序無線等待。
解決飢餓問題,是老化。即等待時間越長的程序,其優先順序會遞增。
4、輪轉法(rr)
限定cpu時間片,就緒佇列中的程序輪流執行,每個程序執行完畢即退出,否則重新排隊。如果時間片足夠長,就等於fcfs。
輪轉法專為分時系統而設計。
5、多級佇列
設定多條、優先順序不同的就緒佇列,程序散落其中。一旦歸入某條佇列,不可以轉移到別的佇列。優先順序高的佇列先執行,直至為空,才到次優先順序的佇列。一旦高優先順序佇列又有新程序進入,馬上搶占cpu。
同樣,存在飢餓問題。
6、多級反饋佇列
同多級佇列,但允許程序遷移。假如某個程序消耗cpu時間片次數多,即沉入低優先順序佇列。可以防止飢餓。
二、多處理器排程
1、非對稱多處理和對稱多處理
非對稱多處理:乙個cpu負責排程、io處理及其他系統活動,而其他cpu只執行使用者**。好處是只有乙個cpu訪問系統資料,減輕了資料共享的需要。
對稱處理(smp):每個cpu都可以排程,甚至有私有的就緒佇列。演算法比較複雜。現代作業系統都支援smp。
2、處理器親和性
努力讓乙個程序只在同乙個處理器上執行,就叫處理器親和性。
主要是因為程序遷移到其他處理器,快取需要重新構建。所以這是os極力避免的情況。
親和性有軟硬之分。如果只是努力,而不能保證,則軟也;如果硬性規定,則為硬也,如linux。
3、負載均衡
如何盡快將眾多嗷嗷待運的程序放入cpu中執行,以完全利用多cpu的優點,就涉及到負載均衡。
通常有2種方法:
1)推乙個特定任務周期性地檢查各個cpu,發現不平衡即進行適當調配
2)拉cpu空閒時,即主動從其他地方拉乙個程序過來執行,。
負載均衡與處理器親和性是矛盾的。如何取得平衡,有個度的考量。
4、對稱多執行緒(smt)
多物理cpu同時執行多執行緒,是為對稱多處理器(smp);提供多個邏輯cpu,來同時執行多執行緒,即為對稱多執行緒(smt,英特爾處理器中稱為超執行緒)。
smt的思想是同乙個物理cpu上生成多個邏輯cpu。
smt是硬體提供的,而不是軟體。
5、執行緒排程
os排程的是核心執行緒。乙個使用者執行緒要得到cpu執行,有2個步驟要走:
1)使用者執行緒與核心執行緒掛鉤
2)核心執行緒獲得cpu
使用者執行緒與核心執行緒的對應關係有一對一,多對一,多對多等關係。在後二者模型中,執行緒庫排程使用者執行緒到乙個lwp(輕量級程序)。
但這並不意味著使用者執行緒可以執行。當執行緒所在程序獲得cpu時,程序內的執行緒還要經過爭用,獲得cpu。
獲得lwp,叫程序競爭範圍(pcs);
獲得cpu,叫系統競爭範圍(scs)。
所有的使用者執行緒與核心執行緒對應的模型中,都需要scs。一對一模型中,只有scs。
作業系統 CPU排程
控制 協調多個程序對cpu的競爭 即按一定的排程演算法從就緒佇列中選擇乙個程序,把cpu的使用權交給被選中的程序 n個程序就緒,等待上m m 1 個cpu執行,需要決策哪個程序分配給哪個cpu執行 排程時機 核心對中斷 異常 系統呼叫處理後返回使用者態時 就緒佇列的改變引發重新排程 如程序正常終止 ...
作業系統學習筆記
這裡專門摘錄作業系統相關筆試題和面試題!也當作自己的乙個複習!乙個很全的作業系統常考知識集合 1.分段式儲存和分頁式儲存,以及段頁式儲存的區別 分頁是一維儲存,分段是二維的 因為分頁給出虛擬位址後,作業系統會自動劃分頁號和偏移量 而分段給出位址後,需要知道段號和偏移量,段的長度是可變的!故是二維的 ...
作業系統學習 筆記
單道批處理評價 資源利用率差 互動性差 等 多道批處理 w為了提高系統的利用率 出現多道批處理 多道 是指 某時刻 多個應用程式再主存中,按照某些原則去處理,逐個執行程式。批處理 使用者提交一批作業,首先存放再外存,排成乙個佇列,然後排程程式按一定的演算法去排程從該佇列 中選取佇列中的乙個或若干個作...