//程序狀態描述
task_running 0 可執行狀態,要麼準備執行,要麼正在執行
task_interruptible 1 可中斷的等待狀態,程序在睡眠狀態,直到某個條件為真
才被排程執行,函式interruptible_sleep_on()使程序進入
該狀態task_uninterruptible 2 和 task_interruptible 類似,但是進入此狀態將不能被喚醒
uninterruptible_sleep_on() 使程序進入該狀態
__task_stopped 4 此狀態的程序的執行被暫停
__task_traced 8 此狀態的程序的執行已由debugger程式暫停
exit_dead
16 僵死撤銷狀態,最終狀態
exit_zombie
32 僵死狀態,程序執行被終止,但是父程序沒有發布wait4或
waitpid,則此程序的描述符資料還存在,仍然可被父程序
使用exit_trace
(exit_zombie | exit_dead) 復合
task_dead 64 死亡狀態,函式do_exit()使程序進入此狀態
task_wakekill
128 喚醒殺死狀態,和 task_uninterruptible 類似,但是可以
接收致命訊號喚醒執行緒
task_waking
256 喚醒狀態
task_parked
512 休眠狀態
task_state_max
1024 預留,暫時無用
task_killable
(task_wakekill | task_uninterruptible) 可殺死狀態
task_stopped
(task_wakekill | __task_stopped) 暫停狀態
task_traced
(task_wakekill | __task_traced) 跟蹤狀態
task_normal
(task_interruptible | task_uninterruptible) 普通狀態
task_all
(task_normal | __task_stopped | __task_traced) 全狀態
task_report
(task_running | task_interruptible | \ 報告態
task_uninterruptible | __task_stopped | \
__task_traced | exit_zombie | exit_dead)
//用於喚醒等待佇列中處於特定狀態的程序,喚醒後獲得cpu資源,從而被排程執行
/*wait_queue_head_t 等待佇列頭指標
mode 處於如下狀態的程序才能夠被喚醒:task_all/task_normal
task_normal:可中斷或不可中斷的等待狀態的程序
task_all: task_normal及暫停狀態和跟蹤狀態的程序
nr_exclusive 喚醒等待佇列中程序的個數:<0 時喚醒所有滿足mode狀態的程序
>0 時掃瞄完等待佇列,喚醒等待佇列中程序的個數
key 代表喚醒程序時執行的函式,一般傳遞null
*/void __wake_up(wait_queue_head_t *q, unsigned int mode, int nr_exclusive , void *key)
typedef struct __wait_queue_head wait_queue_head_t;
struct __wait_queue_head ;
struct list_head ;
//同步喚醒等待佇列中處於特定狀態的程序
void __wake_up_sync(wait_queue_head_t *q, unsigned int mode, int nr_exclusive)
//同上
void __wake_up_sync_key(wait_queue_head_t *q, unsigned int mode,
int nr_exclusive , void *key)
//更改當前程序的狀態,將當前程序置於 task_running 態
typedef struct __wait_queue wait_queue_t;
struct __wait_queue ;
void abort_exclusive_wait(wait_queue_head_t *q, wait_queue_t *wait,
unsigned int mode , void *key)
一些核心程序排程API 6
此函式用以終止輸入引數k對應的程序 返回值就是 int threadfn void data 的int值 int kthread stop struct task struct k ret k exit code put task struct k trace sched kthread stop ...
一些核心排程API(2)
根據tcb,獲取對應的記憶體資訊,儲存在專門描述tcb記憶體資訊的 mm struct 中 struct mm struct get task mm struct task struct task task unlock task return mm tcb專門的記憶體資訊儲存區 struct mm...
一些核心模組API 2
核心符號表 就是在核心的內部函式或變數中,可供外部引用的函式和變數的符號表。其實說白了就是乙個索引檔案,它存在的目的就是讓外部軟體可以知道kernel檔案內部實際分配的位置。給乙個記憶體位址address,查詢乙個核心符號,並將該符號的基本資訊,符號名name,偏移offset 大小size,所屬模...