本文從 linux 2.4 排程系統的缺陷入手,詳細分析了 linux 2.6 排程系統的原理和實現細節,並對與排程系統相關的負載平衡、numa 結構以及實時效能進行了分析和評價。文末,作者從排程系統的發展和實現出發,對 linux 的發展特點和方向提出了自己的看法。
1.前言
linux 的市場非常廣闊,從桌面工作站到低端伺服器,它都是任何商用作業系統的有力競爭對手。目前,linux 正全力進軍嵌入式系統和高階伺服器系統領域,但它的技術缺陷限制了它的競爭力:缺乏對實時任務的支援,多處理機可擴充套件性差。在 2.4 核心中,造成這兩個弱項的關鍵原因之一就是排程器設計上的缺陷。
2.6 排程系統從設計之初就把開發重點放在更好滿足實時性和多處理機並行性上,並且基本實現了它的設計目標。主要設計者,傳奇式人物 ingo molnar 將新排程系統的特性概括為如下幾點:
在 2.5.x 的試驗版本中,新的排程器的開發一直受到廣泛關注,實測證明它的確使系統效能得到很大改善。本文就從新設計的資料結構開始,圍繞 2.6 對於 2.4 所作的改進,對 2.6 排程系統的原理和實現細節進行分析。2.6 排程器設計相當複雜,文中還存在很多需要繼續研究的地方,特別是各個排程引數的設定,隨著核心版本的公升級,可能還會繼續修正。
2.新的資料結構runqueue
我們知道,在 2.4 核心中,就緒程序佇列是乙個全域性資料結構,排程器對它的所有操作都會因全域性自旋鎖而導致系統各個處理機之間的等待,使得就緒佇列成為乙個明顯的瓶頸。
2.4 的就緒佇列是乙個簡單的以 runqueue_head 為頭的雙向鍊錶,在 2.6 中,就緒佇列定義為乙個複雜得多的資料結構 struct runqueue,並且,尤為關鍵的是,每乙個 cpu 都將維護乙個自己的就緒佇列,--這將大大減小競爭。
o(1)演算法中很多關鍵技術都與 runqueue 有關,所以,我們對排程器的分析就先從 runqueue 結構開始。
linux2 4到linux2 6核心排程(4)
7 struct mm struct prev mm 儲存程序切換後被排程下來的程序 稱之為 prev 的 active mm 結構指標。因為在 2.6 中 prev 的 active mm 是在程序切換完成之後釋放的 mmdrop 而此時 prev 的 active mm 項可能為 null,所以...
Linux 2 6 驅動模板
obj m vs10xx.o vs10xx objs vs10xx.o kerneldir home kerson linux 2.6.39 pwd shell pwd modules make c kerneldir m pwd modules cp vs10xx.ko armnfs phony ...
Linux2 6程序切換
1.程序切換是指 儲存prev程序的上下文,用next的上下文替代。其中上下文包括 頁全域性目錄 核心態堆疊 硬體上下文。2.80x86為程序切換提供的硬體支援 第一種 通過任務門 第二種 通過jmp和call指令 把硬體上下文存在tss中,執行這條指令時,通過硬體自動切換tss,完成硬體上下文的過...