linux程序排程政策

2021-05-06 17:24:08 字數 1619 閱讀 9308

程序排程政策就是排程系統種哪乙個程序來cpu執行。這種排程分2層考慮。

第一層,程序狀態這個是最優先考慮的,也就是說優先順序最高的。在linux中只有就緒態的程序才有可能會被排程選中然後占有cpu,其它狀態的程序不可能占有的到cpu。下面是linux中程序的狀態

task_running:就緒狀態,得到cpu就可以執行。

task_interruptible:淺度睡眠,資源到位或者受到訊號就會變成就緒態。

task_uninterruptible:深度睡眠,資源到位就會進入就緒態,不響應訊號。

task_zombie:僵死態,程序exit後。

task_stopped:暫停態,收到sig_cont訊號進入就緒態。

第二層,其實真正在作業系統中的實現,就是所有就緒態程序鏈結成乙個佇列,程序排程時候只會考慮這個佇列中的程序,對其它的程序不考慮,這就實現了第一層中的要求。接下來就是就緒佇列內部各個程序的競爭了。

linux採用3種不同的排程政策,sched_fifo(下面簡寫成fifo,先來先服務),sched_rr(簡寫成rr,時間片輪 流),sched_other(下面簡寫成other)。這裡大家就能看出乙個問題,採用同等排程政策的程序之間自然有可比性,linux3種排程政策並 存,那麼不同排程政策間的程序如何比較呢?可以說他們之間根本就沒有可比性。其實在排程時候,排程只看乙個指標,那就是各個程序所具有的權值,權值最大的 且在可執行佇列中排在最前面的就會被排程執行。而權值的計算才會設計到各方面因素,其中排程政策可以說在計算權值中,份量是最重的。

為什麼linux要這麼幹呢?這是由於事務的多樣性決定的,程序有實時性程序和非實時性的程序2種,fifo和rr是用來支援實時性程序的排程,我們看一下這3種政策下權值的計算公式就明白了:

fifo和rr計算公式,權值=1000+進**正的執行時間

other計算公式,當時間片為0時,權值=0.當時間片不為0時候,權值=剩餘時間片+20-nice,同時如果是核心執行緒有+1的小加分,這是 因為核心執行緒無需使用者空間的切換,所以給它加了一分,獎勵他在程序切換時候開銷小的功勞。時間片好理解,那麼nice這個值,用過linux系統的人都知 道,這是乙個從unix下繼承過來的概念,表示謙讓度,是乙個從20~-19的數,可以通過nice和renice指令來設定。從**中也能看到值越小就 越不會謙讓他人。

從這裡我們看出fifo和rr至少有1000的基數,所以在有fifo和rr排程政策程序存在時,other程序是沒有機會被排程的到的。從權值計 算公式同時也能看出,fifo先來先服務的排程政策滿足了,但rr這個時間片輪流的排程如果按照這種權值計算是不能滿足時間片輪流這一概念的。這裡只是權 值的計算,在排程時候對rr政策的程序特殊處理。

以上都是權值計算,下面看看真正的排程過程,首先是對rr政策程序的特殊處理,如果當前程序採用的rr政策,那麼看他的時間片是否用完,用完了就踢到就緒佇列尾部,同時恢復他的時間片。然後是便利整個就緒佇列,找到第乙個權值最大的程序來執行。

整體排程效果就是:如果有fifo和rr政策的程序,就優先排程他們2個,他們之間看已執行時間長短決定勝負,而2種政策內部則遵守各自排程政策。 而other只有在前面2種不存在於就緒佇列時候才有可能執行,他們實際也是輪流執行,但他們之間是靠剩餘時間和nice值來決定勝負。同時就緒佇列中排 在最前面的最優先考慮在同樣權值情況下。

小插曲:當前程序如果是就緒態,那麼同等權值情況下,將最優先考慮。

linux程序排程政策

程序排程政策就是排程系統種哪乙個程序來cpu執行。這種排程分2層考慮。第一層,程序狀態這個是最優先考慮的,也就是說優先順序最高的。在linux中只有就緒態的程序才有可能會被排程選中然後占有cpu,其它狀態的程序不可能占有的到cpu。下面是linux中程序的狀態 task running 就緒狀態,得...

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,核...