點我查看祕籍連載數據結構
內核負責管理維護全部進程,爲了管理進程,內核在內核空間維護了一個稱爲進程表(Process Table)的數據結構,這個數據結構中記錄了全部進程,每一個進程在數據結構中都稱爲一個進程表項(Process Table Entry),如圖。指針
從圖中可知,進程表中除了記錄了全部進程的PID,還使用一個字段記錄了全部進程的指針,指向每一個進程的進程控制塊(Process Control Block,PCB),請記住PCB這個詞,它過重要了。code
既然PCB表明的是進程,在這個數據結構(task_struct)中天然保留了和進程相關的不少信息,至少在進行上下文切換時,可以保存下在CPU中關於當前運行進程的一些重要寄存器信息(因此,PCB表明的是未執行的進程,CPU中某些寄存器中的數據表明當前正在運行的進程)。如下是PCB中包含的內容,有興趣的話能夠了解下各項是什麼東西:blog
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包含了進程很是重要的信息,是上下文切換的關鍵,它保存在每一個進程的內核棧中(是否還記得前面提到過的每一個進程都有兩個棧空間:用戶棧和內核棧)。進程