用C语言模拟内存分区分配管理的最佳适应算法-_第1页
用C语言模拟内存分区分配管理的最佳适应算法-_第2页
用C语言模拟内存分区分配管理的最佳适应算法-_第3页
用C语言模拟内存分区分配管理的最佳适应算法-_第4页
用C语言模拟内存分区分配管理的最佳适应算法-_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、编写程序模拟实现内存的动态分区法存储管理。内存空闲区使用自由链管理,采用最坏适应算法从自由链中寻找空闲区进行分配,内存回收时要与相邻空闲区的合并。初始状态信息:假定系统的内存共640K,初始状态为操作系统本身占用64K。将要申请内存的作业信息(存储在document/job.txt文件中,当前时间是0。输入:用户打开document/job.txt文件,输入作业信息。处理:模拟时间逐歩增加,每次加1.采用先来先服务算法调度作业,模拟作业运行,用最坏适应算法进行内存的分配。且进行内存的回收,注意与空闲分区的合并。直到所以作业运行完成程序结束。输出:把当前时间为0,为1,为2.的内存分配状况和作业

2、信息写入文件document/information.txt。设计思路4.1 结点定义/空闲区结点描述typedef struct FreeNodeint length; / 分区长度int address; / 分区起始地址FreeNode,*PFreeNode;/空闲区自由链表的描述typedef struct FreeLinkFreeNode freeNode;struct FreeLink * next;FreeLink,*PFreeLink;/内存占用区链表描述typedef struct BusyNodechar name20;/标明此块内存被哪个进程所占用int length;

3、/ 分区长度int address; / 分区起始地址BusyNode,*PBusyNode;/内存占用区忙碌链表的描述typedef struct BusyLinkBusyNode busyNode;struct BusyLink * next;BusyLink,*PBusyLink;/作业控制块的结点描述typedef struct JCBNodechar name20; /作业名称int length; /作业申请的内存大小int start_time; /作业申请内存的时间,即到达后备作业队列的时间int use_time; /作业占用内存的时间,随着该作业的运行逐渐减小,int st

4、ate; /作业内存分配描述:/0表示未申请内存,此时作业在后备队列/1表示申请内存成功,作业进入就绪队列/2表示申请内存失败,此时作业插入到后备队列队尾/3表示该作业占用cpu,正在运行/4表示作业运行完成,释放占用的内存JCBNode,*PJCBNode;/作业队列的描述,用带头结点的循环链表实现typedef struct JCBQueueJCBNode jcbNode;struct JCBQueue* next;JCBQueue,*PJCBQueue;4.2 全局变量定义/全局变量#define ALL_MEMORY 640 /系统总内存#define OS_MEMORY 64 /操作

5、系统占用的内存#define SIZE 2 /门限值PFreeLink freeLink; /空闲区自由链表PBusyLink busyLink; /内存占用区链表PJCBQueue jcbQueue; /外存中待分配内存的作业队列PJCBQueue readyQueue; /已分配内存的就绪队列PJCBQueue finishQueue; /已完成的作业队列PJCBNode currentJCB; /当前正在执行的进程(作业int current_time; /当前时间4.3 算法流程图(已上传,在此没贴出1.程序总算法流程图如下:此流程图描述了作业从外存进入内存,再到进程完毕的过程。以及此

6、过程中系统对内存的分配和回收。步骤:作业申请内存 - 作业进入内存 -作业执行 - 作业完成,释放内存涉及到的算法:(1最坏适应算法(2内存回收算法(3先来先服务算法注:作业进入内存时,此程序并没有模拟创建PCB,而是以JCB代替2.内存分配最坏适应算法流程图:3.内存回收算法流程图:4.先来先服务算法流程图:代码设计采用多文件结构:2. BusyLink.c文件定义实现了关于忙碌链表busyLink的操作:/初始化忙碌链表void initBusyLink(PBusyLink* pBusyLink/在指定的结点后面插入新的结点void insertBusyLink(PBusyLink pri

7、or,BusyNode busyNode/在链表尾部插入结点void insertBusyLinkAtTail(PBusyLink head,BusyNode busyNode/判断链表是否为空int BusyLinkIsEmpty(PBusyLink head/根据作业名称删除结点PBusyNode deleteBusyLinkByName(PBusyLink head,char *str3. FreeLink.c文件定义实现了关于自由链表freeLink的操作:/初始化自由链表void initFreeLink(PFreeLink* pFreeLink/在指定的结点后面插入新的结点void

8、 insertFreeLink(PFreeLink prior,FreeNode freeNode/在链表尾部插入结点void insertFreeLinkAtTail(PFreeLink head,FreeNode freeNode/判断链表是否为空int FreeLinkIsEmpty(PFreeLink head/删除头结点int deleteFreeLink(PFreeLink head/删除指定结点int deleteFreeLinkByIndex(PFreeLink head,PFreeLink index/按空闲区由大到小排序,选择排序法void sortFreeLink(PFr

9、eeLink head4. JobQueue定义实现了关于作业队列的操作:/初始化void initJCBQueue(PJCBQueue* tail/队尾插入结点void inseartJCBQueue(PJCBQueue* tail,JCBNode jcbNode/判断队列是否为空int JCBQueueIsEmpty(PJCBQueue* tail/队头删除结点PJCBNode deleteJCBQueue(PJCBQueue* tail/取队头元素PJCBNode getFrontJCBQueue(PJCBQueue tail/按申请内存的时间先后排序(选择排序void sortJCBQueue(PJCBQueue tail5. Memory.c实现了各个算法:void init(; / 设置系统初始状态int freeMemo(JCBNode; /模拟内存回收int requireMemo(JCBNode; /模拟内存分配void timePast(; /模拟系统时间void write(; /把当

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论