//根據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 中斷號被占...