分类: LINUX
2008-05-29 09:12:46
1:进程结构task_struct保存在内核空间中,在32位计算机中,即在3G-4G空间中。
2:进程结构task_struct的起始地址必须保证指针地址的低13位全为0,因为由于linux内核分配进程任务结构空间时,是以8KB(2个页面空间,即2^1*4KB,linux对物理内存空间和虚拟内存空间管理时,均规定其页面单位的尺寸为4KB)为单位来分配的,所以内存应用地址是8KB(2^13)的整数倍,即指针地址的低13位全为0。
3:当进程切换的时候,需要将CPU中的进程信息保存起来,其保存的位置在task_struct的thread_struct结构中:
struct thread_struct {
unsigned long esp0;
unsigned long eip;
unsigned long esp;
unsigned long fs;
unsigned long gs;
/* Hardware debugging registers */
unsigned long debugreg[8]; /* %%db0-7 debug registers */
/* fault info */
unsigned long cr2, trap_no, error_code;
/* floating point info */
union i387_union i387;
/* virtual 86 mode info */
struct vm86_struct * vm86_info;
unsigned long screen_bitmap;
unsigned long v86flags, v86mask, saved_esp0;
/* IO permissions */
int ioperm;
unsigned long io_bitmap[IO_BITMAP_SIZE+1];
};
4:其中的esp的指向我们在用户空间,如下图