進程控制塊PCB
我們知道,每個進程在內核中都有一個進程控制塊(PCB)來維護進程相關的信息,Linux內核的進程控制塊是task_struct結構體。
/usr/src/linux-headers-3.16.0-30/include/linux/sched.h文件中可以查看struct task_struct 結構體定義。其內部成員有很多,我們重點掌握以下部分即可:
* 進程id。系統中每個進程有唯一的id,在C語言中用pid_t類型表示,其實就是一個非負整數。
* 進程的狀態,有就緒、運行、掛起、停止等狀態。
* 進程切換時需要保存和恢復的一些CPU寄存器。
* 描述虛擬地址空間的信息。
* 描述控制終端的信息。
* 當前工作目錄(Current Working Directory)。
* umask掩碼。
* 文件描述符表,包含很多指向file結構體的指針。
* 和信號相關的信息。
* 用戶id和組id。
* 會話(Session)和進程組。
* 進程可以使用的資源上限(Resource Limit)。
?