linux2 4到linux2 6核心排程(4)

2021-06-18 15:36:30 字數 1425 閱讀 4031

7) struct mm_struct *prev_mm

儲存程序切換後被排程下來的程序(稱之為 prev)的 active_mm 結構指標。因為在 2.6 中 prev 的 active_mm 是在程序切換完成之後釋放的(mmdrop()),而此時 prev 的 active_mm 項可能為 null,所以有必要在 runqueue 中預先保留。

8) unsigned long nr_running

本 cpu 上的就緒程序數,該數值是 active 和 expired 兩個佇列中程序數的總和,是說明本 cpu 負載情況的重要引數(詳見"排程器相關的負載平衡")。

9) unsigned long nr_switches

記錄了本 cpu 上自排程器執行以來發生的程序切換的次數。

10) unsigned long nr_uninterruptible

記錄本 cpu 尚處於 task_uninterruptible 狀態的程序數,和負載資訊有關。

11) atomic_t nr_iowait

記錄本 cpu 因等待 io 而處於休眠狀態的程序數。

12) unsigned long timestamp_last_tick

本就緒佇列最近一次發生排程事件的時間,在負載平衡的時候會用到(見"排程器相關的負載平衡")。

13) int prev_cpu_load[nr_cpus]

記錄進行負載平衡時各個 cpu 上的負載狀態(此時就緒佇列中的 nr_running 值),以便分析負載情況(見"排程器相關的負載平衡")。

14) atomic_t *node_nr_running; int prev_node_load[max_numnodes]

這兩個屬性僅在 numa 體系結構下有效,記錄各個 numa 節點上的就緒程序數和上一次負載平衡操作時的負載情況(見"numa 結構下的排程")。

15) task_t *migration_thread

指向本 cpu 的遷移程序。每個 cpu 都有乙個核心執行緒用於執行程序遷移操作(見"排程器相關的負載平衡")。

16) struct list_head migration_queue

需要進行遷移的程序列表(見"排程器相關的負載平衡")。

排程系統**結構絕大多數排程系統的實現**,包括 runqueue 結構的定義,都在[kernel/sched.c]檔案中,這樣做的目的是將所有排程系統的**集中起來,便於更新和替換。除非特別註明,本文所引**和函式實現均位於[kernel/sched.c]中。 

linux2 4到linux2 6核心排程(1)

本文從 linux 2.4 排程系統的缺陷入手,詳細分析了 linux 2.6 排程系統的原理和實現細節,並對與排程系統相關的負載平衡 numa 結構以及實時效能進行了分析和評價。文末,作者從排程系統的發展和實現出發,對 linux 的發展特點和方向提出了自己的看法。1 前言 linux 的市場非常...

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,完成硬體上下文的過...