电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本
换一换
首页 金锄头文库 > 资源分类 > DOCX文档下载
分享到微信 分享到微博 分享到QQ空间

存储管理动态分区分配算法的模拟

  • 资源ID:456891211       资源大小:108.34KB        全文页数:32页
  • 资源格式: DOCX        下载积分:20金贝
快捷下载 游客一键下载
账号登录下载
微信登录下载
三方登录下载: 微信开放平台登录   支付宝登录   QQ登录  
二维码
微信扫一扫登录
下载资源需要20金贝
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
如填写123,账号就是123,密码也是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
1、金锄头文库是“C2C”交易模式,即卖家上传的文档直接由买家下载,本站只是中间服务平台,本站所有文档下载所得的收益全部归上传人(卖家)所有,作为网络服务商,若您的权利被侵害请及时联系右侧客服;
2、如你看到网页展示的文档有jinchutou.com水印,是因预览和防盗链等技术需要对部份页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有jinchutou.com水印标识,下载后原文更清晰;
3、所有的PPT和DOC文档都被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;下载前须认真查看,确认无误后再购买;
4、文档大部份都是可以预览的,金锄头文库作为内容存储提供商,无法对各卖家所售文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;
5、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据;
6、如果您还有什么不清楚的或需要我们协助,可以点击右侧栏的客服。
下载须知 | 常见问题汇总

存储管理动态分区分配算法的模拟

百度文库-让每个人平等地提升自我、设计任务完成存储器动态分区分配算法的模拟实现。二、设计思想在对数据结构有一定掌握程度的情况下设计合理的数据结构来描述存 储空间,实现分区存储管理的内存分配功能,应该选择最合适的适应算法(首 次适应算法,最佳适应算法,最后适应算法,最坏适应算法)实现分区存储 管理的内存回收算法,在这些存储管理中间必然会有碎片的产生,当碎片产 生时,进行碎片的拼接,等等相关的内容。三、预期目的让我们了解操作系统的基本概念,理解计算机系统的资源如何组织, 操作系统如何有效地管理这些系统资源,用户如何通过操作系统与计算机 系统打交道。通过课程设计,我们可以进一步理解在计算机系统上运行的 其它各类操作系统,并懂得在操作系统的支持下建立自己的应用系统。操 作系统课程设计,对于训练学生掌握程序设计、熟悉上机操作和程序调试 技术都有重要作用。重点培养学生的思维能力、设计能力、创新能力和排 错能力。四、设计方案首先是对相关知识的掌握,例如数据结构,计算方法,组成原理以及操作 系统等。在这些基本知识的基础上进行扩展,用语言的形式从函数,数据 结构原代码,原程序等方面来达到自己想要的目的。该设计就是要达到对 各个细节的问题的解决将各个数据块连接起来,最终达到存储器动态分区 分配算法的模拟实现。五、数据结构1. 设计合理的数据结构来描述存储空间:1)对于未分配出去的部分,用空闲分区链表来描述。struct freeList(int startAddress;/* 分区起始地址 */int size;/* 分区大小 */struct freeList *next;/* 分区链表指针 */2)对于已经分配出去的部分,由装入内存的作业占据。struct usedList(/*分区起始地址*/*分区中存放作业ID */*分区链表指针*/int startAddress;int joblD;struct usedList *next;3 )将作业组织成链表。struct jobList(int id;/* 作业 ID */int size;/*作业大小(需要的存储空间大小)*/int status; /* 作业状态 0 :new job ,1 : in the memory , 2 : finished . */struct jobList *next; /* 作业链表指针 */以上将存储空间分为空闲可占用两部分,在usedlist中设jobID而 不设size,可以在不增加空间复杂度(与freelist相比)的同时更方便 的实现可变分区存储管理(从后面的一些函数的实现上可以得出这个结 论)。尽管设置joblist增加了空间复杂度,但它的存在,使得该程序可 以方便的直接利用D盘中的JOB文件。该文件可以认为是一个和其他进 程共享的资源。通过这个文件,其他进程写入数据供读取。这中思想在 操作系统设计中体现的很多。2. 实现分区存储管理的内存分配功能,选择适应算法(首次适应算法,最佳适应算法,最后适应算法,最坏适应算法)。基本原理分析:1)Best fit :将空闲分区按大小从小到大排序,从头找到大小合适的分区。2)Worst fit :将空闲分区按大小从大到小排序,从头找到大小合适的分 区。3)First fit :将空闲分区按起始地址大小从小到大排序,4)Last fit :将空闲分区按起始地址大小从大到小排序,由此,可将空闲分区先做合适的排序后用对应的适应算法给作业分配存 储空间。排序函数order(bySize为零则按分区大小排序,否则按分区起 始地址;inc为零从小到大排序,否则从大到小排序;通过empty指针返回 结果)。void order(struct freeList *empty,int bySize,int inc)(struct freeList *p,*q,*temp;百度文库-让每个人平等地提升自我 int startAddress,size; for(p = (*empty) -> next;p;p = p -> next)/*按bySize和inc两个参数寻找合适的节点,用temp指向它*/ for(temp = q = p;q;q = q -> next) (switch(bySize)(case 0 : switch(inc)(case 0:if(q->size < temp->size) temp = q;break;default:if(q->size > temp->size) temp = q;break; break; default: switch(inc) (case 0:if(q->startAddress < temp->startAddress) temp = q;break;default:if(q->startAddress>temp->startAddress) temp = q;break; break;/*交换节点的成员值*/if(temp != p) ( startAddress = p->startAddress; size = p->size; p->startAddress = temp->startAddress; p->size = temp->size; temp->startAddress = startAddress; temp->size = size; 3. 实现分区存储管理的内存回收算法。void insertFreeNode(struct freeList *empty,int startAddress,int size) 插入回收的空节点分区,处理回收分区与空闲分区的四种邻接关系。(struct freeList *p,*q,*r;百度文库-让每个人平等地提升自我 for(p = *empty;p -> next;p = p -> next) ; /*处理链表尾部的邻接情况*/ if(p = *empty | p -> startAddress + p -> size < startAddress) /*与尾部不相邻*/ (makeFreeNode(&r,startAddress,size);/*通过r指针返回创建的空闲节点*/r -> next = p -> next;/*插入独立的空闲节点*/p -> next = r; return ;if(p -> startAddress + p -> size = startAddress) /* 与尾部上邻 */ (p -> size += size;/*合并尾部节点*/return ;q = (*empty) -> next;/*处理链表首节点的邻接情况*/if(startAddress + size = q -> startAddress) /* 与首节点下邻 */ (q -> startAddress = startAddress;/* 合并首节点 */q -> size += size;else if(startAddress + size < q -> startAddress)/* 与首节点不相邻 */ (makeFreeNode(&r,startAddress,size); r -> next = (*empty) -> next; (*empty) -> next = r; else (/*处理链表中间的邻接情况*/while(q -> next && q -> startAddress < startAddress) ( p = q; q = q -> next; if(p -> startAddress + p -> size = startAddress &&q -> startAddress = startAddress + size)/*上下邻,合并节点*/ (p -> size += size + q -> size; p -> next = q -> next;free(q);/*删除多余节点*/else if(p -> startAddress + p -> size = startAddress && q -> startAddress != startAddress + size)/*上邻,增加节点的大小*/(p -> size += size;else if(p -> startAddress + p -> size != startAddress && q -> startAddress = startAddress + size) /* 下邻 */ (q -> startAddress = startAddress; /* 修改节点起始地址 */ q -> size += size;/*修改节点的大小*/ else(/*上下不相邻*/makeFreeNode(&r,startAddress,size);r -> next = p -> next; p -> next = r;4. 当碎片产生时,进行碎片的拼接。void moveFragment(struct jobList *jobs,struct freeList *empty,struct usedList *used)(int size,status;struct usedList *p;int address = memoryStartAddress;/*全局变量,初始化时分配存储空间始址*/ if(*empty)->next = NULL) /*空闲分区链表为空,提示并返回*/ ( printf("nThe memory was used out at all.nMay be you should finish some jobs first or press any key to try again !”);getch();return;for(p = (*used) -> next;p;p = p-> next)/*循环的修改占用分区的始址*/ (p -> startAddress = address;百度文库-让每个人平等地提升自我getJobInfo(jobs,p -> jobID,&size,&status);/*由作业ID获得作业大小*/ address += size;(*empty)->next->startAddress = address;/*修改空闲分区的首节点始址、大小*/(*empty) -> next -> size = memorySize - (address - memoryStartAddress);(*empty) -> next ->next = NULL; /*删除首节点后的所有节点*/5.空闲分区队列显示:int showFreeList(struct freeList *empty)6. 作业占用链表显示:int showUsedList(struct jobList*jobs,struct usedList *used)从头到尾显示used链,同时通过其中的作业ID在jobs中查对应的大小。7. 从键盘输入作业到D盘的JOB

注意事项

本文(存储管理动态分区分配算法的模拟)为本站会员(鲁**)主动上传,金锄头文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即阅读金锄头文库的“版权提示”【网址:https://www.jinchutou.com/h-59.html】,按提示上传提交保证函及证明材料,经审查核实后我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.