程序排程概述
多工處理機制是需要進行程序排程的本質原因。
cpu的資源是有限的,因此需要使用排程器來為執行緒分配cpu資源。排程器的主要目的是解決
cpu爭用的問題,使得每個程序可以按照一定的規則進行執行。
那麼如何來分配cpu的執行時間呢?比較傳統和樸素的想法就是給每個程序分配優先順序,
根據優先順序來分配時間片。優先順序高的時間片分配的比較多,優先順序低的分配的時間片比較少。
由於現在計算機都是多工併發處理的,所以cpu需要將時間劃分為週期,乙個週期也就是一段時間。
將這一段時間按照優先順序分配給程序。等到所有的程序執行完所有的時間之後,開啟下乙個週期。
這也是比較經典的程序排程方法。linux2.4使用的是經典的排程策略,
到linux2.6則使用o(1)排程策略的主要思想都是一致的。
總結上面經典方法涉及到以下關鍵點:
1 給程序分配優先級別。
2 時間片如何分配
3 將分配好的程序組織起來進行存放。
4 在組織好的程序內部選擇最優的程序。
程序優先順序
優先順序與程序類別有關,程序分為以下幾類:
1 硬實時程序,此類進行對時間的要求比較高,必須在規定的時間內進行相應
2 軟實時程序,對時間要求也很到,但及時不響應,也不會世界末日。
3 普通程序(io密集形和計算密集形式)
其中硬實時程序和軟實時程序的優先順序比較高(0-99)
普通程序的優先順序(100-140)
實時程序的優先順序要高於普通程序的優先順序。
nice值:提供給使用者態可以動態修改的值,nice值越大,優先順序越低。
nice值越小,優先順序越高。
(-20-19)nice值和程序優先順序具有一定的對應關係。**定義如下所示:
#define max_user_rt_prio 100時間片的分配時間片是關鍵的資源,分配多少時間片意味著乙個程序可以在乙個週期內執行多長時間。#define max_rt_prio max_user_rt_prio
#define max_prio (max_rt_prio + 40)
#define user_prio(p) ((p)-max_rt_prio)
#define max_user_prio (user_prio(max_prio))
#define nice_to_prio(nice) (max_rt_prio + (nice) + 20)
#define hz 1000上面就是時間計算函式,主要跟nice值有關,因此可以判斷,時間片的分配和nice值有很大的關係。nice值越大可以分配的#define def_timeslice (100 * hz / 1000)
#define scale_prio(x, prio) \max(x * (max_prio - prio) / (max_user_prio/2
), min_timeslice)
static unsigned int task_timeslice(task_t *p)
時間片也就越多。
普通程序有一類互動式程序,互動式程序要求計算機快速反應。這樣使用者的體驗比較好。
對於互動式程序,需要優先執行。方法就是對nice值進行動態調整,調整的依據就是判斷程序是不是
sleep的時間比較長,如果時間長,時間片也就用的少,時間片用的少則會提高nice值,來提高優先順序。
完全公平排程
經典排程方式以及o(1)排程方式存在一些既有的缺點,導致它的執行並不是很理想。
為了彌補經典排程方式的缺點,完全公平排程演算法出現。
完全公平排程演算法的核心就是:
vruntime = 實際執行時間 * 1024 / 程序權重 (公式1)vruntime與程序權重無關。1024和所有程序總權重都是常數,唯一的變數是排程週期。實際執行時間=排程週期 * 程序權重 / 所有程序總權重(公式2)
將公式2代入到公式1 得到如下結果:
vruntime =排程週期 * 程序權重 / 所有程序總權重) * 1024 / 程序權重 = 排程週期 * 1024 / 所有程序總權重
vruntime越**明程序執行的時間越短,需要給這樣的程序更多的執行時間。
在完全公平排程演算法中,所有的程序內部都有乙個變數sched_entity。所有的sched_entity都是通過紅黑樹進行組織的,這樣可以快速地找到要執行的程序。
linux核心程序排程系列之排程概述
多工作業系統分為非搶占式多工和搶占式多工。linux採用的是搶占式多工的模式,這就意味著程序對cpu的占用時間是由作業系統決定的,跟具體的說,由作業系統的程序排程程式所決定的,這個章節就介紹關於程序的排程策略。一 排程策略 1 其實程序的排程策略和程序的型別有關 第一種分配方法 cpu消耗型和i o...
程序排程 模擬程序排程的過程
通過這次實驗,理解程序排程的過程,進一步掌握程序狀態的轉變 程序排程的策略,進一步體會多道程式併發執行的特點,並分析具體的排程演算法的特點,掌握對系統效能的評價方法。編寫程式模擬實現程序的輪轉法排程過程,模擬程式只對pcb進行相應的排程模擬操作,不需要實際程式。假設初始狀態為 有n個程序處於就緒狀態...
程序的排程
在我的作業系統還未進入程序之前,應該好好學習一下程序的排程。下面就來討論一下。1 先來先服務 fcfs 顧名思意,就是嚴格按照程序在佇列中的順序依次執行。沒有太多可說的。2 迴圈法 round robin 基本思想是讓每個程序在就緒佇列中的等待時間與享受服務的時間成比例。基本概念是將cpu的處理時間...