一些核心程序排程API 3

2021-08-20 05:01:25 字數 2579 閱讀 2266

//程序狀態描述

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,所屬模...