Linux中的每個進程由一個task_struct數據結構來描述,在Linux中,任務(task)、和進程(process)是兩個相同的術語,task_struct其實就是通常所說的“進程控制塊”即PCB。task_struct容納了一個進程的所有信息,是系統對進程進行控制的唯一手段,也是最有效的手段。
在Linux2.4中,Linux為每個新創建的進程動態地分配一個task_struct結構。系統所允許的最大進程數是由機器所擁有的物理內存的大小決定的,例如,在IA32的體系結構中,一個
Linux支持多處理機(SMP),所以系統中允許有多個CPU, Linux作為多處理機操作系統時系統中允許的最大CPU個數為32。很顯然,Linux作為單機操作系統時,系統中只有一個CPU,本書主要討論單處理機的情況。
和其他操作系統類似,Linux也支持兩種進程:普通進程和實時進程。實時進程具有一定程度上的緊迫性,要求對外部事件做出非常快的響應;而普通進程則沒有這種限制。所以,調度程序要區分對待這兩種進程,通常,實時進程要比普通進程優先運行。這兩種進程的區分也反映在task_struct數據結構中了。
總之,包含進程所有信息的task_struct數據結構是比較龐大的,但是該數據結構本身並不復雜,我們將它的所有域按其功能可做如下劃分:
·進程狀態(State)
·進程調度信息(Scheduling Information)
·各種標識符(Identifiers)
·進程通信有關信息(IPC:Inter_Process Communication)
·時間和定時器信息(Times and Timers)
·進程鏈接信息(Links)
·文件系統信息(File System)
·虛擬內存信息(Virtual Memory)
· 頁面管理信息(page)
· 對稱多處理器(SMP)信息
·和處理器相關的環境(上下文)信息(Processor Specific Context)
· 其它信息
下面我們對task_struct結構進行具體描述。