"點我查看秘籍連載" 進程表和進程數據結構 內核負責管理維護所有進程,為了管理進程,內核在內核空間維護了一個稱為 進程表 (Process Table)的數據結構,這個數據結構中記錄了所有進程,每個進程在數據結構中都稱為一個 進程表項 (Process Table Entry),如圖。 從圖中可知, ...
進程表和進程數據結構
內核負責管理維護所有進程,為了管理進程,內核在內核空間維護了一個稱為進程表(Process Table)的數據結構,這個數據結構中記錄了所有進程,每個進程在數據結構中都稱為一個進程表項(Process Table Entry),如圖。
從圖中可知,進程表中除了記錄了所有進程的PID,還使用一個欄位記錄了所有進程的指針,指向每個進程的進程式控制制塊(Process Control Block,PCB),請記住PCB這個詞,它太重要了。
既然PCB代表的是進程,在這個數據結構(task_struct)中自然保留了和進程相關的很多信息,至少在進行上下文切換時,能夠保存下在CPU中關於當前運行進程的一些重要寄存器信息(所以,PCB代表的是未執行的進程,CPU中某些寄存器中的數據代表當前正在運行的進程)。以下是PCB中包含的內容,有興趣的話可以瞭解下各項是什麼東西:
1.Process management:
Registers
Program counter
Program status word
Stack pointer
Process state
Priority
Scheduling parameters Process ID
Parent process
Process group
Signals
Time when process started CPU time used
Children’s CPU time
Time of next alarm
2.Memory management:
Pointer to text segment info
Pointer to data segment info
Pointer to stack segment info
3.File management:
Root directory Working directory File descriptors User ID
Group ID
PCB包含了進程非常重要的信息,是上下文切換的關鍵,它保存在每個進程的內核棧中(是否還記得前面提到過的每個進程都有兩個棧空間:用戶棧和內核棧)。