基于可重定位分区分配算法的内存管理的设计与实现之欧阳道创编.doc

基于可重定位分区分配算法的内存管理的设计与实现之欧阳道创编.doc

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

欧阳道创编2021.03.06

欧阳道创编2021.03.06

组号成果

时间:2021.03.06

创作:欧阳道

计算机操纵系统

课程设计陈述

题目基于可重定位分区分派算法的内存管理的设计与实现

专业:计算机科学与技术

班级:

学号+姓名:

指导教师:

12月23日

设计目的

掌握内存的连续分派方法的各种分派算法

设计内容

基于可重定位分区分派算法的内存管理的设计与实现。本系统模拟操纵系统内存分派算法的实现,实现可重定位分区分派算法,采取PCB界说结构体来暗示一个进程,界说了进程的名称和年夜小,进程内存起始地址和进程状态。内存分区表采取空闲分区表的形式来模拟实现。要求界说与算法相关的数据结构,如PCB、空闲分区;在使用可重定位分区分派算法时必须实现紧凑。

设计原理

可重定位分区分派算法与静态分区分派算法基本上相同,不同仅在于:在这种分派算法中,增加了紧凑功能。通常,该算法不克不及找到一个足够年夜的空闲分区以满足用户需求时,如果所有的小的空闲分区的容量总和年夜于用户的要求,这是便须对内存进行“紧凑”,将经过“紧凑”后所获得的年夜空闲分区分派给用户。如果所有的小空闲分区的容量总和仍小于用户的要求,则前往分派失败信息

详细设计及编码

模块阐发

分派模块

这里采取首次适应(FF)算法。设用户请求的分区年夜小为u.size,内存中空闲分区年夜小为m.size,规定的不再切割的剩余空间年夜小为size。空闲分区按地址递增的顺序排列;在分派内存时,从空闲分区表第一个表目开始顺序查找,如果m.size≥u.size且m.sizeu.size≤size,说明过剩部分太小,不再联系,将整个分区分派给请求者;如果m.size≥u.size且m.sizeu.sizesize,就从该空闲分区中按请求的年夜小划分出一块内存空间分派给用户,剩余的部分仍留在空闲分区表中;如果m.sizeu.size则查找下一个空闲分区表项,直到找到一个足够年夜的空闲分区;如果没有找到一个足够年夜的内存空闲分区,但所有的小的空闲分区的容量总和年夜于用户的要求,就进行紧凑,将紧凑后获得的年夜的空闲分区按上述的方法分派给用户;但如果所有的小的空闲分区的容量总和仍不克不及满足用户需要,则分派失败。

内存回收模块

进行内存回收操纵时,先随机产生一个要回收的进程的进程号,把该进程从进程表中中删除,它所释放的空闲内存空间拔出到空闲分区表;如果回收区与拔出点的前一个空闲分区相邻,应将回收区与拔出点的前一分区合并,修改前一个分区的年夜小;如果回收区与拔出点的后一个空闲分区相邻,应将回收区与拔出点的后一分区合并,回收区的首址作为新空闲分区的首址,年夜小为两者之和;如果回收区同时与拔出点的前、后空闲分区相邻,应将三个分区合并,使用前一个分区的首址,取消后一个分区,年夜小为三者之和。

紧凑模块

将内存中所有作业进行移动,使他们全都相邻接,把原来分离的多个空闲小分区拼接成一个年夜分区。

流程图

是是

代码实现

#includestdio.h

#includestdlib.h

#includetime.h

#includewindows.h

#defineTURE1

#defineFALSE0

#defineOK1

#defineERROR0

#defineINFEASIBLE1

#defineOVERFLOW2

#defineSIZE15

////////////////////////////进程表//////////////

intppNo=1;//用于递增生成进程号

intpLength=0;

structPCB

{

intpNo;//进程号(名)

intpSize;//进程年夜小

intpOccupy;//实际占用的内存

intpStartAddr;//进程起始地址

intpState;//进程状态

};

structPCBpList[200];

//////////////////空闲分区表部分///////////////

typedefintStatus;

typedefstructemptyNode

{//空闲分区结构体

intareaSi

文档评论(0)

159****1944 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档