MTK_蛙蛙鱼
|
2#
发表于 2012-12-7 09:59 | 只看该作者
二、变量(static): 1. static union task_union init_task:联合体就是一个page的内存,保存着第一个进程结构体内容,在sched.h中已经将它初始化好了,我们在来体会一下这个最初的生命体。 1)long state:0,表示就绪态。 2)long counter:15,时间片滴答数。 3)long priority:15,优先级值。 4)long signal:0,还没有任何信号存在。 5)struct sigaction sigaction[32]:{{},},空。 6)long blocked:0,不屏蔽任何信号。 7)long exit_code:0。 8)long start_code,end_code,end_data,brk,start_stack:0,0,0,0,0,对于进程0用不到。 13)long pid:0,初始进程。 14)long pgrp,session,leader:0,0,0,初始化为0,其实也只有0号进程。 17)int groups[32]:{-1,},暂时还没有。 18)struct task_struct *p_pptr,*p_cptr,*p_ysptr,*p_osptr:&init_task.task,0,0,0:,它将父进程指向了自己,其他的都还没有。 22)unsigned short uid,euid,suid,gid,egid,sgid:0,0,0,0,0,0,都是0号进程。 28)unsigned long timeout:0,没有启动。 29)unsigned long alarm:0,没有启动。 30)long utime,stime,cutime,cstime,start_time:0,0,0,0,0,都没有需要。 35)struct rlimit rlim[6]:{{0x7fffffff,0x7fffffff},...},都赋值为最大值。 36)unsigned int flags:0。 37)unsigned short used_math:0,没有使用数学协处理器。 38)int tty:-1,没有对应的tty设备。 39)unsigned short umask:0022,八进制,用户进程不可读不可写不可执行,同一用户组进程不可读可写不可执行,其他用户不可读可写不可执行。怎么感觉怪怪的! 40)struct m_inode *pwd,*root,*executable,*library:NULL,NULL,NULL,NULL,是的,都没有。 44)unsigned long close_on_exec:0,木有。 45)struct file *filp[20]:{NULL,},木有。 46)struct desc_struct ldt[3]:{{0,0},{0x9f,0xc0fa00},{0x9f,0xc0f200}},嘿嘿,这个是重点,这些可是进程0的段描述符哦,非常重要。ldt[0]没有,ldt[1]是代码段,ldt[2]是数据段,我们拆开看看: 1-段限长:0xc0fa00[19:16]+0x9f[15:0]=0x9f,+1,0xa0,x4Kb,640Kb。 2-基地址:0xc0fa00[31:24][7:0]+0x9f[31:16]=0x0。 3-TYPE:类型,0xc0fa00[11:8]=0xa,b1100,代码,一致性,仅执行。 0xc0f200[11:8]=0x2,b0010,数据,可读写。 4-DPL:特权级,0xc0fa00[14:13]=0x3,ring 3环,表示用户态。 5-P:存在位,0xc0fa00[15:15]=0x1,存在。 6-AVL:软件可用位,0xc0fa00[20:20]=0x0。 7-B:默认操作大小,0xc0fa00[22:22]=0x1,32位地址。 8-G:颗粒度标志,0xc0fa00[23:23]=0x1,4Kb。 47)struct tss_struct tss: 1> long back_link:0。 2> long esp0,ss0:PAGE_SIZE+(long)&init_task,0x10。 4> long esp1,ss1,esp2,ss2:0,0,0,0。 8> long cr3:(long)&pg_dir。 9> long eip:0,到时候会通过iret重设的。 10> long eflags:0,到时候会通过iret重设的。 11> long eax,ecx,edx,ebx:0,0,0,0,用不到。 15> long esp:0,到时候会通过iret重设的。 16> long ebp:0,用不到。 17> long esi,edi:0,0,用不到。 18> long es,cs,ss,ds,fs,gs:0x17,0x17,0x17,0x17,0x17,0x17,都要用数据段即可记得这个是用户态,因此得用LDT,bit2=1。 24> long ldt:_LDT(0),任务0的LDT选择子。 25> long trace_bitmap:0x80000000,?。 26> struct i387_struct i387:{},到时候任务切换的时候会将该内容填满。 |
|