- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2.7 UNIX进程模型 2.7.1进程模型的基本结构和工作过程 UNIX的进程由三部分组成:proc结构(常驻内存的PCB),数据段(执行时用到的数据)和正文段(程序代码)。这些数据和代码按一定的方式存储在一个文件中,当进程加载程序时,要加入进程的一些控制信息,且系统创建相应的数据和堆栈段。进程映像的基本结构如图2.23所示。 1.进程基本控制块结构 struct proc{ charp_stat; /*进程状态*/ charp_flag; /*进程标志*/ charp_pri; /*进程优先级*/ charp_sig; /*软中断号*/ charp_uid; /*用户号*/ charp_time; /*驻留时间*/ charp_cpu; /*进程占据CPU的时间量*/ charp_nice; /*用于计算优先级*/ intp_ttyp; /*控制终端tty结构的地址*/ intp_pid; /*进程号*/ intp_ppid; /*父进程号*/ intp_addr; /*数据段地址*/ intp_size; /*数据段大小*/ intp_wchan; /*等待的原因*/ int*p_textp; /*对应正文段的text项地址*/ } proc[NPROC]; 其中: (1) p_flag的助记符包括: SLOAD 01 在内存 SSYS 02 进程0# SLOCK 03 锁住,不能换出内存 SSWAP 04 正在换出 STRC 05 被跟踪 (2) p_stat的助记符:在实际的操作系统中,为了管理和调度的方便,将进程的状态进一步细分,UNIX系统Ⅴ定义了10种进程状态,它们由p_stat标记。具体如下: NULL 0 proc为空 SSLEEP 1 睡眠 SWAIT 2 等待 SRUN 3 运行或就绪 SIDL 4 创建时的临时状态 SZOMB 5 僵死状态 SSTOP 6 被跟踪 SXBRK 7 因数据段扩展未满足的换出状态 SXSTK 8 因栈段扩展未满足的换出状态 SXFRK 9 创建子进程时内存不够,父进程锁定在内存的状态 SXTXT 10 因正文段扩展未满足的换出状态 2.进程扩展控制块结构 struct user{ intu_rsav[2]; /*保留现场保护区指针*/ charu_segflg; /*用户/核心空间标志*/ charu_error; /*返回出错代码*/ charu_uid; /*有效用户号*/ charu_gid; /*有效组号*/ intu_procp; /*proc结构地址*/ charu_base; /*内存地址*/ char*u_count; /*传送字节数*/ char*u_offset[2]; /*文件读写位移*/ int*u_cdir; /*当前目录I节点地址*/ char*u_dirp; /*I节点当前指针*/ struct{ intu_ino; charu_name [DIRSIZ]; }u_dent; /*当前目录项*/ intu_ofile [NOFILE]; /*用户打开文件表*/ intu_arg[5]; /*存系统调用的自变量*/ intu_tsize; /*正文段大小*/ intu_dsize; /*用户资料区大小*/ intu_ssize; /*用户栈大小*/ intu_utime; /*用户态执行时间*/ intu_stime; /*核心态执行时间*/ intu_cutime; /*子进程用户态执行时间*/ intu_cstime; /*子进程核心态执行时间*/ intu_ar0; /*当前中断保护区内r0地址*/ }; 系统为了对正文段进行单独管理,设置了一个正文表text,由几十个表项组成,每项描述一个正文段。text表的C语言描述如下: struct text{ intx_daddr; /*磁盘地址*/ intx_caddr; /*内存地址*/ intx_size; /*内存块数,每块64字节*/ intx_iptr; /*文件内存I节点地址*/ charx_count; /*共享进程数*/ charx_ccount; /*内存副本的共享进程数*/ }text[NTEXT];
文档评论(0)