一些核心排程API(2)

2021-08-20 04:08:38 字數 1204 閱讀 6568

//根據tcb,獲取對應的記憶體資訊,儲存在專門描述tcb記憶體資訊的 mm_struct 中

struct mm_struct *get_task_mm(struct task_struct *task)

task_unlock(task);

return mm;

}//tcb專門的記憶體資訊儲存區

struct mm_struct ;

//給乙個任務的記憶體空間,減少這個空間的使用者數量,如果使用者數量減為0,就釋放任務所占用的記憶體空間

//mmput 會使得 mm_users 減1,might_sleep 給程序切換提供了機會

void mmput(struct mm_struct *mm)

if (mm->binfmt)

module_put(mm->binfmt->module);

mmdrop(mm);}}

//給乙個程序描述符,得到乙個該程序的命名空間

static inline struct pid_namespace *ns_of_pid(struct pid *pid)

//給乙個程序描述符,得到這個描述符的程序號,就儲存在upid的nr裡面

static inline pid_t pid_nr(struct pid *pid)

//給乙個程序描述符,得到這個程序的任務描述符tcb

struct task_struct *pid_task(struct pid *pid, enum pid_type type)

return result;

}/*當程序使用者數量為1且目前沒有任務在使用此程序時,釋放這個程序所占用的cache

當程序使用者數量大於1時,count就減1

*/void put_pid(struct pid *pid)

}//給乙個tcb,返回這個tcb的程序命名空間,打通了tcb和程序命名空間的通道

struct pid_namespace *task_active_pid_ns(struct task_struct *tsk)

//獲取tcb程序組中領頭羊程序的程序號,需要滿足領頭羊程序命名空間和 ns 一致

pid_t task_tgid_nr_ns(struct task_struct *tsk, struct pid_namespace *ns)

static inline struct pid *task_tgid(struct task_struct *task)

一些核心模組API 2

核心符號表 就是在核心的內部函式或變數中,可供外部引用的函式和變數的符號表。其實說白了就是乙個索引檔案,它存在的目的就是讓外部軟體可以知道kernel檔案內部實際分配的位置。給乙個記憶體位址address,查詢乙個核心符號,並將該符號的基本資訊,符號名name,偏移offset 大小size,所屬模...

一些核心同步API 2

獲取訊號量,成功後sem的計數器減1 不成功後程序將進入睡眠狀態而一直等待下去 注意區分down interruptible down killable 由於會使程序進入睡眠狀態 不響應任何訊號量,阻塞 所以不建議使用 void down struct semaphore sem 獲取訊號量,失敗進...

一些核心中斷API 2

解除安裝irq鍊錶中與輸入引數相對應的 irqaction 描述符 void remove irq unsigned int irq,struct irqaction act 動態申請及註冊乙個中斷 動態建立乙個irqaction描述符,把該描述 符加入到irq鍊錶中 0 建立成功 16 中斷號被占...