欢迎来到天天文库
浏览记录
ID:54914076
大小:278.00 KB
页数:13页
时间:2020-04-23
《动态分区存储管理的模拟实现.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、计算机科学与工程学院学生实验报告专业计算机科学与技术班级学号姓名课程名称操作系统课程类型专业必修课实验名称动态分区存储管理的模拟实现实验目的:1.熟悉动态分区存储管理方式下,主存空间的分配和回收算法。2.提高C语言编程能力。实验内容:假设主存当前状态如右表所示:系统采用最佳适应分配算法为作业分配主存空间,而且具有紧凑技术。请编程完成以下操作:(1).输出此时的已分配区表和未分配区表;(2).装入Job3(15K),输出主存分配后的已分配区表和未分配区表;(3).回收Job2所占用的主存空间,输出主存回收后的已分配区表和未分配区表;(4).装入Job4
2、(130K),输出主存分配后的已分配区表和未分配区表。实验要求1.数据结构参考定义如下,也可根据需要进行改进:(1)已分配区表:#definen10/*假定系统允许的最大作业数量为n,n值为10*/struct{intnumber;/*序号*/intaddress;/*已分配分区起始地址,单位为KB*/intlength;/*已分配分区长度,单位KB*/floatflag;/*已分配区表登记栏标志,0:空表项,否则为作业名;*/}used_table[n];/*已分配区表*/(2)未分配区表:#definem10/*假定系统允许的空闲区表最大为m,m
3、值为10*/struct{intnumber;/*序号*/intaddress;/*空闲区起始地址,单位为KB*/intlength;/*空闲区长度,单位为KB*/intflag;/*空闲区表登记栏标志,0:空表项;1:空闲区*/}free_table[m];/*空闲区表*/2.以allocate命名主存分配所用的过程或函数(算法参考课件),要将各种情况考虑周全。3.以reclaim命名主存回收所用的过程或函数(算法参考课件),要将各种情况考虑周全。4.画出算法实现的N-S流程图。5.程序调试、运行成功后,请老师检查。实验步骤:1.分配内存,结果如下
4、图:1.回收内存,结果如下图:1.合并内存,结果如下图:4.N-S流程图:4.1内存分配流程图:4.2内存回收流程图:附录程序代码:#define_CRT_SECURE_NO_WARNINGS1#include#includeenumSTATE{Free,Busy};structsubAreaNode{intaddr;//起始地址intsize;//分区大小inttaskId;//作业号STATEstate;//分区状态subAreaNode*pre;//分区前向指针subAreaNode*nxt;//分区后向指
5、针}subHead;//初始化空闲分区链voidintSubArea(){//分配初始分区内存subAreaNode*fir=(subAreaNode*)malloc(sizeof(subAreaNode));//给首个分区赋值fir->addr=0;fir->size=240;//内存初始大小fir->state=Free;fir->taskId=-1;fir->pre=&subHead;fir->nxt=NULL;//初始化分区头部信息subHead.pre=NULL;subHead.nxt=fir;}//最佳适应算法intbestFit(int
6、taskId,intsize){subAreaNode*tar=NULL;inttarSize=240+1;subAreaNode*p=subHead.nxt;while(p!=NULL){//寻找最佳空闲区间if(p->state==Free&&p->size>=size&&p->sizesize;}p=p->nxt;}if(tar!=NULL){//分配大小为size的区间subAreaNode*node=(subAreaNode*)malloc(sizeof(subAreaNode));no
7、de->addr=tar->addr+size;node->size=tar->size-size;node->state=Free;node->taskId=-1;//修改分区链节点指针node->pre=tar;node->nxt=tar->nxt;if(tar->nxt!=NULL){tar->nxt->pre=node;}tar->nxt=node;//分配空闲区间tar->size=size;tar->state=Busy;tar->taskId=taskId;printf("内存分配成功!");return1;}else{printf
8、("找不到合适的内存分区,分配失败...");return0;}}//回收内存intfreeSubAre
此文档下载收益归作者所有