- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验三 可变分区存储管理
实验三 可变分区存储管理1.目的和要求通过这次实验,加深对内存管理的认识,进一步掌握内存的分配、回收算法的思想。2.实验内容阅读教材《计算机操作系统》第四章,掌握存储器管理相关概念和原理。编写程序模拟实现内存的动态分区法存储管理。内存空闲区使用自由链管理,采用最坏适应算法从自由链中寻找空闲区进行分配,内存回收时假定不做与相邻空闲区的合并。假定系统的内存共640K,初始状态为操作系统本身占用64K。在t1时间之后,有作业A、B、C、D分别请求8K、16K、64K、124K的内存空间;在t2时间之后,作业C完成;在t3时间之后,作业E请求50K的内存空间;在t4时间之后,作业D完成。要求编程序分别输出t1、t2、t3、t4时刻内存的空闲区的状态。3.实验环境Windows操作系统、VC++6.0C语言4. 实验要求:1) 上机前认真使用C语言编写好程序,采用Visual C++6.0作为编译环境;2) 上机时独立调试程序3) 根据具体实验要求,填写好实验报告(包括目的和要求、实验内容、实验环境、设计思想、源程序、实例运行结果、总结)。5. 设计思想:本次实验编写的程序主要涉及四个函数start ( ), requireMemo ( ) , freeMemo ( )和past( )。start()这个函数主要用来建立自由链队列和占用区队列,这两个队列用来分别存放自由节点和占用节点。在初始状态下,操作系统本身占用64k,它存放在占用区队列里,因此自由链队列里只有640-64=576k的空间,且起始地址为64。requireMemo()函数是该程序的核心算法,用来分配内存空间,该函数带两个参数,用来表示作业或进程名的name和表示作业或者进程名所申请空间的大小的require。由于此算法采用的是最坏适应算法,所以自由链队列中的空闲分区是按其容量从大到小的顺序排列的。因此在这里需要分三种情况:①自由链队列的第一个空闲分区的容量大于require;②自由链队列的第一个空闲分区的容量等于require;③自由链队列的第一个空闲分区的容量小于require。在①情况下分配完后还需把剩余的部分重新按照容量大小给它在自由链队列里找到新位置。在②情况下只需分配,分配即把符合要求的空闲分区从自由链队列删除,并且插入到占用区队列的尾部。在删除需注意把原来处于分配分区的前后链接起来,否则队列将断掉。在③情况下,只需提示用户无法分配即可。freeMemo ()函数也是该程序的核心算法,是用来回收作业完成后不需使用的内存空间,它根据从main()函数中传递过来的参数name,遍寻占用区队列,找到与name匹配的作业,把他从占用区队列删除,插入到自由链队列里。在插入时,由于涉及到邻接区的合并问题,所以必须先遍寻整个自由链队列,找到是否有从占用区队列回收回来的空间邻接区,如果有,就将他们合并。做完邻接区的合并之后,再根据内存空间的大小,将整个自由链队列排序。6. 源程序:1)程序中所定义的数据结构和全局变量//程序中自由链队列的结点类型可描述如下struct freelink{ int len, address; //len为分区长度 // address为分区起始地址 struct freelink *next;};//内存占用区用链表描述,其结点类型描述如下struct busylink{ char name; // 作业或进程名 name=S 表示OS占用 int len , address; struct busylink *next;};//并设全程量struct freelink *free_head=NULL; //自由链队列(带头结点)队首指针 struct busylink *busy_head=NULL, //占用区队列队(带头结点)首指针 *busy_tail=NULL; //占用区队列队队尾指针2)requireMemo()函数的具体实现://模拟内存分配函数void requireMemo(char name, int require){ struct busylink *p; struct freelink *w,*u,*v; if( free_head-next-len=require){ if(free_head-next-lenrequire){ p=(struct busylink*)malloc(sizeof(struct busylink)); p-name=name; p-address=free_head-next-address; p-len=require; p-next=NULL; busy_tail-next=p; busy_tail=p; w=free_hea
您可能关注的文档
- 微生物在石油工业中的应用简述.docx
- euphemism委婉的词语(euphem讲话ism讲好话).doc
- 只要讲英语就会用得上的词汇.doc
- 补丁操作步骤及HA相关设置说明.doc
- 第三册 unit1 文学 桂系.docx
- Servlet的生命周期与请求(HttpServletRequest).doc
- VPO.SAFE.3.1.13.5. 承包商管理检查清单-举例 Checklist_Contractor_Management_Example.doc
- 初中英语阅读第2讲--说明文·教师版.docx
- 服饰的搭配艺术.doc
- overcrowdeda.挤满的(overcrowded拥挤的).doc
文档评论(0)