在詳細描寫linux程序排程原理之前在這裡先明確幾個基本概念
搶占:排程程式決定什麼時候停止乙個程序的執行以便其他程序又能夠得到執行的機會,這個強制掛起的動作叫做搶占
時間片:程序在被強佔之前預先設定的能夠執行的時間。
從上面的兩個概念就可以看出來,排程程式的乙個功能就是計算每個程序占用的時間片合理每個程序執行時間,排程程式是採用動態演算法計算時間片的,linux核心採用的是o(1)排程演算法實現排程的
程序在排程層面上可以分為兩種不同型別
i/o消耗型:大部門時間是用來等待i/o請求的,如果響應執行時間很短,但是需要快速響應,比如等待鍵盤輸入
處理器消耗型:這些程序不用等待i/o請求去觸發,如果不是搶占的話不管它們,它們會一直執行,而且並不是需要快速的響應速度,對於整個系統而言不應該讓他們頻繁執行而是減少執行次數增大執行時間,一般這種程序都是無限迴圈的
當讓這兩斤程序的劃分並不是絕對的,有可能有的程序既是i/o消耗型也是處理器消耗型,排程演算法盡可能的從中尋找平衡
所以有的時候處理器並不保證嚴格的按照高低優先順序去進行排程,因為i/o消耗型更傾向於快速的響應,所以在排程的時候更傾向於i/o消耗型,這點很重要
優先順序排程演算法,顧名思義就是優先順序高的就會先執行並且搶占優先順序低的程序,如果想聽優先順序的話就會輪流執行。
linux排程演算法也是建立在優先順序排程演算法的基礎上實現的,但是這個所謂的優先順序並不是人為的設定而是linux核心排程演算法根據自己的定義做動態的優先順序加減的
linux核心提供兩種優先順序體系nice(-20 -~+19)預設值為0值越低優先順序越高(不可配置),實時優先順序(0 ~ 99)
可配置優先順序高於普通程序
再說一下時間片這裡的時間片概念不要和實時性作業系統的時間片概念搞混,實時性作業系統的時間片概念是每一次systick切換時長,而linux的時間片概念如上文所說就是在被切換走之前的執行時間,在微控制器做系統中假如時間片為1ms那麼不管當前進行的程序優先順序為多高,到時間片時都會執行一段排程演算法,而linux時間片是只有在這個任務被強佔之前執行的時間,每個程序的時間片並不相同
那核心程序什麼時候會被搶占呢?只有兩種情形,1、像上文提到程序時間片耗盡,喚醒排程程式。2、有乙個其他程序秉承執行態與當前執行程序進行優先順序比較。
linux程序排程
排程 從就緒的程序選出最適合的乙個來執行。知識點 1 排程策略 2 排程時機 3 排程步驟 排程策略 sched normal sched other 普通的分時程序 sched fifo 先入先出的實時程序 sched rr 時間片輪轉的實時程序 sched batch 批處理程序 sched i...
linux程序排程
搶占就是程序排程,使用者程序搶占發生在以下情況 1 從系統呼叫返回使用者空間的時候 2 從中斷處理程式返回使用者空間時。在時鐘中斷中會呼叫scheduler tick 函式,該函式在程序時間片用完的時候會設定need resched標誌,當從時鐘中斷或者其他中斷返回後檢查need resched,核...
linux 程序排程
linux程序優先順序 1.nice值 20 19 預設0 nice值越大,程序優先順序越低 2.實時優先順序 0 99 實時優先順序越高,程序優先順序越高 任何實時程序的優先順序都高於普通的程序,也就是說實時優先順序和nice優先順序處於互補相交的兩個範疇 linux預設的程序排程模型是時間迴圈共...