动态分区存储管理的模拟实现.doc

动态分区存储管理的模拟实现.doc

ID:54914076

大小:278.00 KB

页数:13页

时间:2020-04-23

动态分区存储管理的模拟实现.doc_第1页
动态分区存储管理的模拟实现.doc_第2页
动态分区存储管理的模拟实现.doc_第3页
动态分区存储管理的模拟实现.doc_第4页
动态分区存储管理的模拟实现.doc_第5页
资源描述:

《动态分区存储管理的模拟实现.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

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。