网站大量收购独家精品文档,联系QQ:2885784924

UNIX V6交换区管理.ppt

  1. 1、本文档共35页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
UNIX V6交换区管理.ppt

分配正文段到进程的地址空间 rp-p_textp=xp;//将正文段在text[]的项分配给进程rp rp=ip; // 设置inode节点的相关参数 rp-i_flag=| ITEXT;//可执行文件当作正文段 rp-i_count++; expand(USIZE);//缩小数据段—它将被换出 out: if(xp-x_ccount==0){//内存中没有共享此正文段的进程 savu(u.u_rsav); //进程调出导致的进程切换,保存r5,r6的值 savu(u.u_ssav); //进程调出,保存r5,r6的值 xswap(u.u_procp,1,0);//将进程(数据段ppda)调出到磁盘交换区 u.u_procp-p_flag=| SSWAP; swtch(); }//“sched”总是在换入数据段之前先换入正文段,所以一旦数据段已在内存中,就无法将正文段调入内存。为此,若正文段不在内存中,则先将数据段“换出”至磁盘交换区中。 xp-x_ccount++;//进程的数据段不需要调出内存,则内存中共享正文段的进程数+1 总结: xalloc将代码段分配到内存 有两个特点 1.第一次读取代码段,要求在交换区有一个副本 2.调入数据段前必须先调入正文段。 3.进程调出的标志是PPDA被调出到外存交换区,而不是代码段被调出到外存交换区。 作业 分析P88 xswap()函数 周四上午1,2节上交作业。2015.4.16 chap4 交换区管理 2015.4.2星期四(单周) 2015.4.14星期二(单周) UNIX V6管理交换区 1.设置外存交换区的原因 只有马上需要执行的进程保留在内存中,其它进程可调出到外存的一个空间,这个空间称为交换区或者交换文件。 多道程序设计有多个就绪进程在内存,存在内存竞争现象。 设置外存交换区的原因是提高内存利用率。 2.管理交换区的方法 UNIX V6的管理进程通过定期执行交换处理 调出swap out:将处于阻塞状态或执行优先级较低的进程从内存移至外存交换空间。 调入swap in:当外存交换区的进程成为可执行状态时,在将其移回内存。 P82 进程内存映像的交换原则 1.共享正文段调入内存,在外存交换区必须有一个备份。 创建一个代码段时,必须在外存交换区有一个副本。 创建代码段:在text[]数组中有一个元素 代码段总有备份在外存。 2.数据段调入内存则释放在外存的空间;数据段调出内存,则释放在内存的空间。 调出:mfree(coremap,size,aa),aa=proc.p_size 调入:mfree(swapmap,size,aa) 图4-2:释放为虚线椭圆,保留为实线椭圆。 交换区管理 1.交换空间的管理(补充) 2.进程映像传送进程sched()(P83) 3.正文段的处理进程xalloc()(P90) 共享代码段数据结构P89 4.数据段的调出进程xswap()的分析,作业。 一、外存交换区的管理 1.策略:为调出的进程分配连续的交换区空间。 2.数据结构 已分配区域:进程的代码段,数据段 空白区域swapmap[] 交换空间不断分配和释放,UNIX OS相应管理修改swapmap[],反映现在空闲存储空间的使用情况。 交换区空白区数据结构swapmap[] int swapmap[SMAPSIZ] 交换区空白块一块512B,内存一块64B。 空白区域数据结构 struct map { //P76 char *m_size; //块数 char *m_addr; //空白区域起始地址 }; 3.空白区的分配和释放 空白区的分配malloc() UNIX OS依次查找空白区数组swapmap[],找到第一个能满足请求交换区块数的元素时,将该项空间部分或全部分配给进程,并修改swapmap[]。 回收交换区free() 在释放交换区空间时,UNIX OS根据起始地址aa,从swapmap[]中找到相应位置,此时可能存在四种情况: 释放区与swapmap[]中前一项 二、UNIX管理外存交换区的原语 外存交换区管理函数 sched(),swapper进程调出调入处理函数。 xswap()数据段调出处理函数 xalloc()代码段处理函数 xfree()递减代码段参照计数器 xccdec() 递减内存进程的代码段参照计数器 1. sched原语 进程数据段的长度P_si

文档评论(0)

此项为空 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档