Linux核心設計與實現 第四章

2021-09-10 15:01:01 字數 1477 閱讀 6576

多工多工系統可以劃分為搶占式多工和非搶占式多工。程序在被搶占之前能夠執行的時間叫時間片。linux採用的就是搶占式多工

io消耗型程序:頻繁處於可執行狀態但是只執行很短的時間。處理器消耗型:時間大多用在執行**上,系統盡量降低其排程頻率而延長執行時間。程序排程要在兩個排程之間尋求平衡:響應時間短和最大系統利用率。

優先順序:根據程序價值和處理器占用時間的分級方法。linux採用了兩種不同的優先順序範圍。第一種是nice值(-20到+19),預設是0:越大nice值則優先順序越低,獲得的處理器時間越少,在linux中,nice值表示的是時間片的比例。第二種是實時優先順序,範圍是0~99,實時優先順序越高表示程序優先順序越高。

unix程序排程中nice值的問題:(1)nice=0的往往是io程序,不需要太多時間片,nice=19的反而是cpu程序,需要更多時間片(2)nice為0和1時分到的時間片相差無幾,但是nice為18和19時分到的時間片相差一倍(3)需要分配乙個絕對時間片,這將引發一系列問題(4)某些時間片用完的程序該不該再次上cpu,難以保證公平

cfs(公平排程):程序獲得cpu的時間由相對的nice值決定;nice值對應的使用時間不是絕對值,而是處理器使用比。

時間記賬:作業系統需要對每個程序的時間進賬進行維護,cfs使用sched_entity排程器實體進行維護,它作為乙個成員變數se嵌入在程序描述符task_struct內。比較重要的乙個概念就是vruntime虛擬實時,它描述的不是執行時間,而是執行時間的標準化。例如作業系統中有兩個程序,每個程序所需執行時間分別是20ms和80ms,剛開始,vruntime都是0,在執行10ms後,前者的vruntime是50ms,而後者的vruntime則為25ms。如我們所見,vruntime是每個程序的實際執行時間對總程序數的標準化。

程序選擇:根據上面所述,顯然我們每次都應該選擇vruntime最小的程序,問題就在於我們如何找到這個程序——答案就是紅黑樹。具體細節不做過多描述。

排程器入口:schedule()。找到優先順序最高的排程類,此排程類有乙個自己的可執行佇列,從中選出最高優先順序的程序。

休眠:休眠有兩種狀態:能被訊號喚醒的和不能被訊號喚醒的,這兩種狀態都是通過同乙個等待佇列上,等待佇列存在的形式是鍊錶。程序通過執行下列步驟將自己放入佇列:(1)建立等待佇列項。(2)加入佇列。(3)改變自己的狀態。(4)訊號喚醒程序,程序進入「迷糊」狀態。(5)「迷糊」狀態的程序再次檢查條件,若真,則退出等待佇列,否則繼續睡。

喚醒:呼叫wake_up(),設定程序狀態,呼叫enqueue_task()將程序放入紅黑樹。需要注意的是存在虛假的喚醒,需要用乙個迴圈保證其等待條件真正達成。

context_switch()

schedule():虛擬記憶體的切換switch_mm(),處理器切換switch_to()。need_resched()來檢查是否要重新進行排程。當程序應該被搶占時,此標誌會被設定。搶占分為使用者搶占和核心搶占。

被實時排程器管理,而不是cfs排程器

sched_rr:與sched_fifo基本一致,唯一不同的是相同優先順序的會基於時間片輪流執行。

《Linux核心設計與實現》第四章讀書筆記

1.多工系統分為兩類 非搶占式多工和搶占式 linux2.5核心版本採用o 1 排程程式的新排程程式,對大伺服器的工作負載很理想,但其缺少叫互動程序。linux2.6核心版本初期採用rsdl,反轉樓梯最後期限排程演算法。最終採用cfs,完全排程公平演算法。1 程序分為i o消耗型和處理器消耗型 2 ...

《Linux核心設計與實現》讀書筆記 第四章

排程程式負責決定將哪個程序投入執行,何時執行以及執行多長時間,程序排程程式可看做在可執行態程序之間分配有限的處理器時間資源的核心子系統。多工作業系統就是能同時併發地互動執行多個程序的作業系統。多工系統可以劃分為兩類 像所有unix的變體和許多其他現代作業系統一樣,linux提供了搶占式的多工模式。程...

第四章 Linux核心模組

注 內容大多摘自 linux裝置驅動開發詳解 第2版 1.特點 2.模組程式結構 1 模組載入函式 一般需要 2 模組解除安裝函式 一般需要 3 模組許可證宣告 必須 4 模組引數 可選 5 模組匯出符號 可選 6 模組作者等資訊宣告 可選 3.模組的載入,解除安裝,檢視 4.printk函式 核心...