linux程序排程方法簡述

2021-06-25 20:53:13 字數 1140 閱讀 2593

在 linux2.6 中,仍有三種排程策略: sched_other、sched_fifo 和 sched_rr。

sched_orher:普通程序,基於優先順序進行排程。

sched_fifo:實時程序,實現一種簡單的先進先出的排程演算法。

sched_rr:實時程序,基於時間片的sched_fifo,實時輪流排程演算法。

前者是普通程序排程策略,後兩者都是實時程序排程策略。sched_fifo 與 sched_rr 的區別是:當程序的排程策略為前者時,當前實時程序將一直占用 cpu 直至自動退出,除非有更緊迫的、優先順序更高的實時程序需要執行時,它才會被搶占 cpu;當程序的排程策略為後者時,它與其它實時程序以實時輪流演算法去共同使用 cpu,用完時間片放到執行佇列尾部。程序提供了兩種優先順序,一種是普通的程序優先順序,第二個是實時優先順序。前者適用sched_normal排程策略,後者可選sched_fifo或sched_rr排程策略。任何時候,實時程序的優先順序都高於普通程序,實時程序只會被更高階的實時程序搶占,同級實時程序之間是按照fifo(一次機會做完)或者rr(多次輪轉)規則排程的。

實時程序的排程

實時程序,只有靜態優先順序,因為核心不會再根據休眠等因素對其靜態優先順序做調整,其範圍在0~max_rt_prio-1間。預設max_rt_prio配置為100,也即,預設的實時優先順序範圍是0~99。而nice值,影響的是優先順序在max_rt_prio~max_rt_prio+40範圍內的程序。

不同與普通程序,系統排程時,實時優先順序高的程序總是先於優先順序低的程序執行。直到實時優先順序高的實時程序無法執行。實時程序總是被認為處於活動狀態。如果有數個優先順序相同的實時程序,那麼系統就會按照程序出現在佇列上的順序選擇程序。假設當前cpu執行的實時程序a的優先順序為a,而此時有個優先順序為b的實時程序b進入可執行狀態,那麼只要b睡眠和cpu耗時反應了程序io密集和cpu密集兩大瞬時特點,不同時期,乙個程序可能即是cpu密集型也是io密集型程序。對於表現為io密集的程序,應該經常執行,但每次時間片不要太長。對於表現為cpu密集的程序,cpu不應該讓其經常執行,但每次執行時間片要長。互動程序為例,假如之前其其大部分時間在於等待cpu,這時為了調高相應速度,就需要增加獎勵分。另一方面,如果此程序總是耗盡每次分配給它的時間片,為了對其他程序公平,就要增加這個程序的懲罰分數。可以參考cfs的virtutime機制。

linux程序排程方法

linux 核心的三種排程方法 1 sched other 分時排程策略,2,sched fifo 實時排程策略,先到先服務 3,sched rr 實時排程策略,時間片輪轉 核心的三種排程方法 1 sched other 分時排程策略,2,sched fifo 實時排程策略,先到先服務 3,sche...

linux核心(二) 程序管理之程序排程簡述

一 簡述 排程程式負責決定將哪個程序投入執行,何時執行以及執行多長時間,進度排程可看做在可執行程序之間分配有限的處理器時間資源的核心子系統。二 排程器介紹 1 排程器概念 排程器的乙個重要目標是有效的分配cpu時間片,同時提供很好的使用者體驗。排程器的一般原理是按需分配的計算能力,向系統中每個程序提...

Linux程序簡述

對於程序的建立,系統呼叫fork 允許乙個程序 父程序 建立乙個新程序 子程序 新的程序幾乎就等於父程序的翻版,子程序獲得了父程序的棧,資料段,堆和執行文字段的拷貝。對於程序的終止,則是使用exit status 函式,此函式會將程序所占用的所有資源 記憶體,檔案描述符等 歸還核心,交給核心進行再次...