預備知識:
在併發體系中,i/o幾乎是不消耗cpu資源的。當i/o完成之後會通過dma(direct memory access),通知cpu。這個時候cpu完成上下文切換,執行接下來的程序。
由於cpu的發展比磁碟的改進快很多,所以接下來的程序會越來越傾向於i/o密集型。
兩種排程演算法:
非搶占式演算法挑選乙個程序並執行直至它io阻塞或者自動讓出cpu。這樣就算cpu中斷的時候進行check,也不會更改執行的程序,除非出現了更高優先順序的程序。
搶占式演算法設定程序執行時間的最大值,若到達時間了這個程序還在執行,就掛起它。一般這個處理需要時鐘中斷,以便把cpu控制權返回給排程程式。
三種環境:
批處理基本就是安心工作,不需要和使用者互動。這種就要盡可能地避免改變程序,切換各種上下文。非搶占式或者比較長時間閾值的搶占式都可以。
需要大吞吐量(作業量,以作業為單元),短周轉時間(從作業提交到作業完成的平均時間),
互動式需要和使用者不斷地互動,比如ui,比如等待使用者連線的伺服器。需要搶占式。需要的是最小響應時間。
目標
共同目標:公平、保證系統策略一定要執行(該系統所必須要實現的效果)、保持系統的所有部分盡可能忙碌
下面爸爸重點記錄一下互動式系統中的排程。
1. 輪轉排程
每個程序有固定的時間片。由於切換上下文等操作需要時間,所以理論上時間片越長,效率越高。但是問題是時間片長的話,萬一併發程序一多,排在後面的就不得不排好久。
2. 優先順序排程
每個程序有優先順序。比較簡單的優先順序演算法為:假設為io密集型程序服務,假設上一次消耗的時間為f,則下一次獲得的優先順序為1/f。即占用cpu時長短的會獲得更高的優先順序。
程序排程之schedule
遮蔽了具體的排程演算法,具體的排程演算法在冰山之下 schedule preempt disable cpu smp processor id rq cpu rq cpu rcu sched qs cpu prev rq curr switch count prev nivcsw if prev s...
核心排程 之schedule
學os的時候經常講到處理機 即cpu 的排程也即任務的排程,現如今與linux的核心 聯絡起來。理解處理機排程要回答3個問題 1 排程的時機 2 排程的策略 3 排程的實現 高階排程 為任務建立pcb,裝入記憶體 中級排程 為提高吞吐量和利用率,將任務臨時換出記憶體 swap 低階排程 程序排程,為...
執行緒 程序及其排程簡介
知識需要不斷總結 驗證 迭代,知其然,知其所以然。1 程序和執行緒 程序和執行緒的區別與聯絡 程序 資源申請的最小單位 執行緒 資源排程的最小單位,程序的一部分,描述指令流的執行狀態。核心中,描述程序的資料結構pcb 程序控制塊,描述執行緒的資料結構 tcb 執行緒控制塊。圖1 單執行緒程序 圖2 ...