天天看點

Linux程序管理(1)

程序是執行期間的程式及其它所包含的資源的總稱。

程序通過fork()系統調用産生,該系統調用通過複制一個現有程序來建立一個全新的程序。fork()調用一次傳回兩次:一次回到父程序、一次回到新建立的子程序。

程序描述符及任務結構

核心把程序放在task list的雙向循環連結清單中,其中每一項都是一個task_struct結構(即程序描述符)。task_struct結構比較大(32位機器上約1.7K),包含了核心管理程序所需的全部資訊。

Linux通過slab配置設定器配置設定task_struct結構,以達到對象複用和緩存着色的目的。

每個程序通過pid來辨別,預設最大值為32768,可以通過/proc/sys/kernel/pid_max修改。

thread_info結構

struct thread_info {

     struct task_struct     *task;           /* main task structure */

     struct exec_domain     *exec_domain;     /* execution domain */

     unsigned long          flags;          /* low level flags */

     unsigned long          status;          /* thread-synchronous flags */

     __u32               cpu ;          /* current CPU */

     int               preempt_count ;     /* 0 => preemptable, <0 => BUG */

     mm_segment_t          addr_limit ;     /* thread address space:

                                 0-0xBFFFFFFF for user-thead

                                 0-0xFFFFFFFF for kernel-thread

                              */

     void               *sysenter_return;

     struct restart_block    restart_block ;

     unsigned long           previous_esp;   /* ESP of the previous stack in case

                                 of nested (IRQ) stacks

     __u8               supervisor_stack [0];

};

該結構在核心棧的尾端配置設定。

如何查找目前正在運作程序的程序描述符

為什麼要屏蔽掉低13位(當THREAD_SIZE為8192時):

核心中的棧是從高位址到低位址,thread_info和核心棧(核心态堆棧)共享同一塊記憶體, 而每個任務的thread_info在核心棧的尾端配置設定.

 本文轉自feisky部落格園部落格,原文連結:http://www.cnblogs.com/feisky/archive/2012/04/05/2433253.html,如需轉載請自行聯系原作者

繼續閱讀