linux內(nèi)核分析之調(diào)度算法

linux內(nèi)核分析之調(diào)度算法

ID:10756067

大?。?05.00 KB

頁數(shù):15頁

時間:2018-07-08

linux內(nèi)核分析之調(diào)度算法_第1頁
linux內(nèi)核分析之調(diào)度算法_第2頁
linux內(nèi)核分析之調(diào)度算法_第3頁
linux內(nèi)核分析之調(diào)度算法_第4頁
linux內(nèi)核分析之調(diào)度算法_第5頁
資源描述:

《linux內(nèi)核分析之調(diào)度算法》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。

1、linux內(nèi)核分析之調(diào)度算法linux調(diào)度算法在2.6.32中采用調(diào)度類實(shí)現(xiàn)模塊式的調(diào)度方式。這樣,能夠很好的加入新的調(diào)度算法。linux調(diào)度器是以模塊方式提供的,這樣做的目的是允許不同類型的進(jìn)程可以有針對性地選擇調(diào)度算法。這種模塊化結(jié)構(gòu)被稱為調(diào)度器類,他允許多種不同哦可動態(tài)添加的調(diào)度算法并存,調(diào)度屬于自己范疇的進(jìn)程。每個調(diào)度器都有一個優(yōu)先級,調(diào)度代碼會按照優(yōu)先級遍歷調(diào)度類,擁有一個可執(zhí)行進(jìn)程的最高優(yōu)先級的調(diào)度器類勝出,去選擇下面要執(zhí)行的那個程序。linux上主要有兩大類調(diào)度算法,CFS(完全公平調(diào)度算法)和實(shí)時調(diào)度算法。宏SCHED_N

2、OMAL主要用于CFS調(diào)度,而SCHED_FIFO和SCHED_RR主要用于實(shí)時調(diào)度。如下面的宏定義:1./*?2.?*?Scheduling?policies?3.?*/??4.?/*支援Real-Time?Task的排程,包括有SCHED_FIFO與SCHED_RR.??5.?*/??6.???7.?/*(也稱為SCHED_OTHER):?主要用以排程?8.?一般目的的Task.*/??9.#define?SCHED_NORMAL????????0??10.#define?SCHED_FIFO??????1??11./*task預(yù)設(shè)的

3、?Time?Slice長度為100?msecs*/??12.#define?SCHED_RR????????2??13./*主要用以讓Task可以延長執(zhí)行的時間?14.(Time?Slice),減少被中斷發(fā)生Task?Context-Switch?15.的次數(shù).藉此可以提高?Cache的利用率??16.(每次Context-Switch都會導(dǎo)致Cache-Flush).?比?17.較適合用在固定週期執(zhí)行的Batch?Jobs任?18.務(wù)主機(jī)上,而不適合用在需要使用者互?19.動的產(chǎn)品?(會由於Task切換的延遲,而?20.感覺到系統(tǒng)效能不

4、佳或是反應(yīng)太慢).*/??21.#define?SCHED_BATCH?????3??22./*?SCHED_ISO:?reserved?but?not?implemented?yet?*/??1./*為系統(tǒng)中的Idle?Task排程.*/??2.#define?SCHED_IDLE??????5??linux調(diào)度算法實(shí)現(xiàn)的高層數(shù)據(jù)結(jié)構(gòu)主要有運(yùn)行實(shí)體、調(diào)度類、運(yùn)行隊(duì)列,下面我們主要看看這幾個數(shù)據(jù)結(jié)構(gòu)的字段和意義。運(yùn)行實(shí)體,rq結(jié)構(gòu)體每個cpu有一個,主要存儲一些基本的用于調(diào)度的信息,包括實(shí)時調(diào)度的和CFS調(diào)度的1.?/*每個處理器都會配置

5、一個rq*/??2.struct?rq?{??3.????/*?runqueue?lock:?*/??4.????spinlock_t?lock;??5.??6.????/*?7.?????*?nr_running?and?cpu_load?should?be?in?the?same?cacheline?because?8.?????*?remote?CPUs?use?both?these?fields?when?doing?load?calculation.?9.?????*/??10.?????/*用以記錄目前處理器rq中執(zhí)行task

6、的數(shù)量*/??11.????unsigned?long?nr_running;??12.????#define?CPU_LOAD_IDX_MAX?5??13.????/*用以表示處理器的負(fù)載,在每個處理器的rq中?14.????都會有對應(yīng)到該處理器的cpu_load參數(shù)配置,在每次?15.????處理器觸發(fā)scheduler?tick時,都會呼叫函數(shù)?16.????update_cpu_load_active,進(jìn)行cpu_load的更新。在系統(tǒng)初始化的時候?17.????會呼叫函數(shù)sched_init把rq的cpu_load?array初

7、始化為0.?18.????了解他的更新方式最好的方式是通過函數(shù)update_cpu_load,公式如下澹??19.????cpu_load[0]會直接等待rq中l(wèi)oad.weight的值。?20.????cpu_load[1]=(cpu_load[1]*(2-1)+cpu_load[0])/2?21.????cpu_load[2]=(cpu_load[2]*(4-1)+cpu_load[0])/4?22.????cpu_load[3]=(cpu_load[3]*(8-1)+cpu_load[0])/8?1.????cpu_load[4]=

8、(cpu_load[4]*(16-1)+cpu_load[0]/16?2.????呼叫函數(shù)this_cpu_load時,所返回的cpu?load值是cpu_load[0]?3.????而在進(jìn)行

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費(fèi)完成后未能成功下載的用戶請聯(lián)系客服處理。