Minix进程表结构.docVIP

  1. 1、本文档共13页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Minix进程表结构 摘要:本文通过分析Minix3操作系统原代码,详细说明了与进程相关的数据结构,并在此基础上描述了Minix进程间通信和进程调度的完整过程。 一些预备知识 首先要明白MINIX3本身就是一组进程的集合。 ? 尽管系统任务和时钟任务被编译进了内核,但它仍然以一个独立的进程运行。 include/minix/sys_config.h中定义了宏变量_NR_RPOCS指示控制进程表的大小,该值默认是64,如果用户想使用MINIX3作为一个网络服务器以便多个远程用户或者服务器进程能够并发执行,那么需要增加此常量的值。 include/minix/type.h中定义了结构体kinfo,用来向系统的其他部分传递有关系统的消息。进程管理器在创建它的进程表的部分时使用的正是该结构。 include/minix/callnr.h中定义了所有允许的系统调用的序号。当一个进程执行MINIX3系统调用时,它向进程管理器(PM)或文件系统(FS)发送一条消息,每条消息中含有所有要求的系统调用序号。 在kernel/config.h中定义了一些宏,处理每个内核调用所需要的代码使用这些宏进行条件编译的,如果一些函数被取消,那么执行它的代码也会从系统二进制代码中删除。例如手机不需要产生新进程(fork),因而该部分代码可以从执行文件中删除,以便使得内存更小。 kernel/const.h中定义了宏函数vir2phys用于将内核的内存空间与基地址相关的虚拟地址转换为物理地址。 #definevir2phys(vir)(kinfo.data_base+ (vir_bytes) (vir)) 进程状态字(PSW)是个CPU寄存器,其中I/OProtection Level(IOPL)位定义了是否允许访问中断系统和I/O端口,下面的代码决定了普通进程和特权进程对中断系统和I/O端口的访问权限。 #defineINIT_PSW 0x0200/*initial psw */ #defineINIT_TASK_PSW 0x1200/*initial psw for tasks (with IOPL 1) */ kernel/type.h中定义了memory结构,它使用基地址和存储区大小两个域来来唯一标识一块内存区域。 struct memory { phys_clicksbase;/* startaddress of chunk */ phys_clickssize;/* sizeof memory chunk */ }; 这里解释一下phys_clicks。内存的基本度量单位是块,Intel处理器平台上的MINIX3的块是1024字节。内存用参数phys_clicks来度量,内核通过它来访问系统任何地方的任何内存区域。而进程则通过vir_clicks来度量,一块vir_clicks内存引用是指分配给特定进程的一段内存的基址。 进程表数据结构 kernel/proc.h定义了内核进程表。一个进程的完整状态包括内存中的进程数据和进程表项中的信息。当一个进程没有执行时CPU寄存器内容就存储在这里,恢复执行时则重新存储。进程表中的每一项被定义为一个proc进程: struct proc { structstackframe_s p_reg;/*process registers saved in stack frame */ reg_tp_ldt_sel;/*selector in gdt with ldt base and limit */ struct segdesc_sp_ldt[2+NR_REMOTE_SEGS]; /* CS, DS and remote segments */ ?proc_nr_tp_nr;/* numberof this process (for fast access) */ structpriv *p_priv;/*system privileges structure */ charp_rts_flags;/*SENDING, RECEIVING, etc. */ ? charp_priority;/*current scheduling priority */ charp_max_priority;/*maximum scheduling priority */ charp_ticks_left;/*number of scheduling ticks left */ charp_quantum_size;/*quantum size in ticks */ ? struct mem_mapp_memmap[NR_LOCAL_SEGS]; /* memory map (T, D, S) */ ?clock_tp_user

文档评论(0)

gangshou + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档