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 負載情況的重要參數(詳見"調度器相關的Server Load Balancer")。
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
本就緒隊列最近一次發生調度事件的時間,在Server Load Balancer的時候會用到(見"調度器相關的Server Load Balancer")。
13) int prev_cpu_load[NR_CPUS]
記錄進行Server Load Balancer時各個 CPU 上的負載狀態(此時就緒隊列中的 nr_running 值),以便分析負載情況(見"調度器相關的Server Load Balancer")。
14) atomic_t *node_nr_running; int prev_node_load[MAX_NUMNODES]
這兩個屬性僅在 NUMA 體繫結構下有效,記錄各個 NUMA 節點上的就緒進程數和上一次Server Load Balancer操作時的負載情況(見"NUMA 結構下的調度")。
15) task_t *migration_thread
指向本 CPU 的遷移進程。每個 CPU 都有一個核心線程用於執行進程遷移操作(見"調度器相關的Server Load Balancer")。
16) struct list_head migration_queue
需要進行遷移的進程列表(見"調度器相關的Server Load Balancer")。
調度系統代碼結構絕大多數調度系統的實現代碼,包括 runqueue 結構的定義,都在[kernel/sched.c]檔案中,這樣做的目的是將所有調度系統的代碼集中起來,便於更新和替換。除非特別註明,本文所引代碼和函數實現均位於[kernel/sched.c]中。