可变分区存储管理设计说明_第1页
可变分区存储管理设计说明_第2页
可变分区存储管理设计说明_第3页
可变分区存储管理设计说明_第4页
可变分区存储管理设计说明_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

1、可变分区存储管理1目的和要求通过这次实验,加深对内存管理的认识,进一步掌握内存的分配、回收算法的思想。2实验内容编写程序模拟实现内存的动态分区法存储管理。内存空闲区使用自由链管理,采用最坏适应算法从自由链中寻找空闲区进行分配,内存回收时要与相邻空闲区的合并。初始状态信息:假定系统的内存共640K ,初始状态为操作系统本身占用64K 。 将要申请内存的作业信息(存储在document/job.txt文件中),当前时间是0。输入:用户打开document/job.txt文件,输入作业信息。处理:模拟时间逐歩增加,每次加1. 采用先来先服务算法调度作业,模拟作业运行,用最坏适应算法进行内存的分配。且

2、进行内存的回收,注意与空闲分区的合并。直到所以作业运行完成程序结束。输出:把当前时间为0,为1,为2. 的内存分配状况和作业信息写入文件document/information.txt。3实验环境Windows 操作系统、VC+6.0 C 语言4设计思想4.1 结点定义/空闲区结点描述 typedef struct FreeNode 1int length; / 分区长度int address; / 分区起始地址FreeNode,*PFreeNode; /空闲区自由链表的描述 typedef struct FreeLink FreeNode freeNode;struct FreeLink *

3、 next;FreeLink,*PFreeLink;/内存占用区链表描述 typedef struct BusyNode char name20;/标明此块内存被哪个进程所占用 int length; / 分区长度int address; / 分区起始地址BusyNode,*PBusyNode; /内存占用区忙碌链表的描述 typedef struct BusyLink BusyNode busyNode;struct BusyLink * next;BusyLink,*PBusyLink;/作业控制块的结点描述 typedef struct JCBNode char name20; /作业名

4、称int length; /作业申请的内存大小int start_time; /作业申请内存的时间,即到达后备作业队列的时间2int use_time; /作业占用内存的时间,随着该作业的运行逐渐减小, int state; /作业内存分配描述:/0表示未申请内存,此时作业在后备队列 /1表示申请内存成功,作业进入就绪队列/2表示申请内存失败, 此时作业插入到后备队列队尾 /3表示该作业占用cpu ,正在运行 /4表示作业运行完成,释放占用的内存 JCBNode,*PJCBNode;/作业队列的描述, 用带头结点的循环链表实现 typedef struct JCBQueue JCBNode j

5、cbNode;struct JCBQueue* next;JCBQueue,*PJCBQueue;4.2 全局变量定义/全局变量#define ALL_MEMORY 640 /系统总内存#define OS_MEMORY 64 /操作系统占用的内存 #define SIZE 2 /门限值 PFreeLink freeLink; /空闲区自由链表 PBusyLink busyLink; /内存占用区链表PJCBQueue jcbQueue; /外存中待分配内存的作业队列 PJCBQueue readyQueue; /已分配内存的就绪队列 PJCBQueue finishQueue; /已完成的作

6、业队列PJCBNode currentJCB; /当前正在执行的进程(作业 int current_time; /当前时间34.3 算法流程图1. 程序总算法流程图如下:此流程图描述了作业从外存进入内存,再到进程完毕的过程。以及此过程中系统对内存的分配和回收。步骤:作业申请内存 - 作业进入内存 - 作业执行 - 作业完成,释放内存 涉及到的算法:(1)最坏适应算法 (2)内存回收算法 (3)先来先服务算法 注:作业进入内存时,此程序并没有模拟创建PCB ,而是以JCB 代替45 2. 内存分配最坏适应算法流程图: 4.4 代码设计采用多文件结构:1. 其中document 文件夹下存放输入作

7、业信息的文本文档job.txt 和输出信息information.txt2. BusyLink.c 文件定义实现了关于忙碌链表busyLink 的操作:/初始化忙碌链表void initBusyLink(PBusyLink* pBusyLink /在指定的结点后面插入新的结点void insertBusyLink(PBusyLink prior,BusyNode busyNode /在链表尾部插入结点void insertBusyLinkAtTail(PBusyLink head,BusyNode busyNode /判断链表是否为空int BusyLinkIsEmpty(PBusyLink

8、head /根据作业名称删除结点PBusyNode deleteBusyLinkByName(PBusyLink head,char *str 3. FreeLink.c 文件定义实现了关于自由链表freeLink 的操作:/初始化自由链表void initFreeLink(PFreeLink* pFreeLink/在指定的结点后面插入新的结点void insertFreeLink(PFreeLink prior,FreeNode freeNode /在链表尾部插入结点void insertFreeLinkAtTail(PFreeLink head,FreeNode freeNode /判断链

9、表是否为空int FreeLinkIsEmpty(PFreeLink head /删除头结点int deleteFreeLink(PFreeLink head /删除指定结点int deleteFreeLinkByIndex(PFreeLink head,PFreeLink index /按空闲区由大到小排序, 选择排序法 void sortFreeLink(PFreeLink head4. JobQueue 定义实现了关于作业队列的操作:/初始化void initJCBQueue(PJCBQueue* tail /队尾插入结点void inseartJCBQueue(PJCBQueue* t

10、ail,JCBNode jcbNode /判断队列是否为空int JCBQueueIsEmpty(PJCBQueue* tail /队头删除结点PJCBNode deleteJCBQueue(PJCBQueue* tail /取队头元素PJCBNode getFrontJCBQueue(PJCBQueue tail /按申请内存的时间先后排序(选择排序 void sortJCBQueue(PJCBQueue tail 5. Memory.c 实现了各个算法:void init(; / 设置系统初始状态 int freeMemo(JCBNode; /模拟内存回收 int requireMemo(JCBNode; /模拟内存分配 void timePast(; /模拟系统时间void write(; /把当前时间的内存信息,作业信息写入文件information.txt /主函数 void main( /1.初始化系统 init(; /2.时间逐步加1 timePast(; /3.提示信息printf("各个时间的内存及作业信息已存入document/information.txt文件中nn" 5源程序6实例运行结果输入作业信息: 运行结果: 11 7总结 1.通过此次实验,更进一步的了解了可变分区存储

温馨提示

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

评论

0/150

提交评论