动态分区存储管理的模拟实现_第1页
动态分区存储管理的模拟实现_第2页
动态分区存储管理的模拟实现_第3页
动态分区存储管理的模拟实现_第4页
动态分区存储管理的模拟实现_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

1、计算机科学与工程学院学生实验报告专业计算机科学与技术班级学号姓名课程名称操作系统课程类型专业必修课实验名称动态分区存储管理的模拟实现实验目的:1 .熟悉动态分区存储管理方式下,主存空间的分配和回收算法2 .提高C语言编程能力。实验内容:假设主存当前状态如右表所示:系统采用最佳适应分配算法为作业分配主存空间,而且具有紧凑技术。请编程完成以下操作:(1) .输出此时的已分配区表和未分配区表;(2) .装入Job3(15K),输出主存分配后的已分配区表和未分配区表;(3) .回收Job2所占用的主存空间,输出主存回收后的已分配区表和未分配区表;(4) .装入Job4(130K),输出主存分配后的已分

2、配区表和未分配区表。实验要求1 .数据结构参考定义如下,也可根据需要进行改进:#definen10/*(1)已分配区表:假定系统允许的最大作业数量为n,n值为10*/structintnumber;/*序号*/intaddress;/*已分配分区起始地址,单位为KB*/intlength;/*已分配分区长度,单位KB*/floatflag;/*已分配区表登记栏标志,0:空表项,否则为作业名;*/*已分配区表*/used_tablen;未分配区表:#definem10/*假定系统允许的空闲区表最大为m,m值为10*/structintnumber;/*序号*/intaddress;/*空闲区起始

3、地址,单位为KB*/intlength;/*空闲区长度,单位为KB*/intflag;/*空闲区表登记栏标志,0:空表项;1:空闲区*/free_tablem;/*空闲区表*/2 .以allocate命名主存分配所用的过程或函数(算法参考课件),要将各种情况考虑周全。3 .以reclaim命名主存回收所用的过程或函数(算法参考课件),要将各种情况考虑周全。4 .画出算法实现的N-S流程图。5 .程序调试、运行成功后,请老师检查。实验步骤:1 .分配内存,结果如下图:存内feJffiH分:配I”H作需配人大分I'T:Usei3AdministratorDe5lrtDpDebuqCppl.

4、exe*1I归I_竺当前的内存分1己情加如下I起始地址I空间大小!工作状态I作业号-“=-*0k:28kIBusyI1*«IrM-W20h!228k!Freei*1:分配内存2:回收内存0:退出口了金作需配人大分2.回收内存,结果如下图:3.合并内存,结果如下图:起始地址;空间大小:工作状态:作业号4.N-S流程图:4.1内存分配流程图:返回4.2内存回收流程图:附录程序代码:#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>#include<stdlib.h>enumSTATEFree,Busy;structsu

5、bAreaNodeintaddr;/起始地址intsize;/分区大小inttaskId;/作业号STATEstate;/分区状态subAreaNode*pre;/分区前向指flsubAreaNode*nxt;/分区后向指针subHead;/初始化空闲分区链voidintSubArea()/分配初始分区内存subAreaNode*fir=(subAreaNode*)malloc(sizeof(subAreaNode);/给首个分区赋值fir->addr=0;fir->size=240;/内存初始大小fir->state=Free;fir->taskId=-1;fir-&

6、gt;pre=&subHead;/初始化分区头部信息subHead.pre=NULL;subHead.nxt=fir;)/最佳适应算法intbestFit(inttaskId,intsize)(subAreaNode*tar=NULL;inttarSize=240+1;subAreaNode*p=subHead.nxt;while(p!=NULL)(/寻找最佳空闲区问if(p->state=Free&&p->size>=size&&p->size<tarSize)(tar=p;tarSize=p->size;)p=p-

7、>nxt;)if(tar!=NULL)(/分配大小为size的区间subAreaNode*node=(subAreaNode*)malloc(sizeof(subAreaNode);node->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

8、->nxt=node;/分配空闲区间tar->size=size;tar->state=Busy;tar->taskId=taskId;printf("内存分配成功!n");return1;)else(printf("找不到合适的内存分区,分配失败n");return0;)/回收内存intfreeSubArea(inttaskId)(intflag=0;subAreaNode*p=subHead.nxt,*pp;while(p!=NULL)(if(p->state=Busy&&p->taskId=tas

9、kId)(flag=1;if(p->pre!=&subHead&&p->pre->state=Free)&&(p->nxt!=NULL&&p->nxt->state=Free)(/情况1:合并上下两个分区/先合并上区间PP=P;p=p->pre;p->size+=pp->size;p->nxt=pp->nxt;pp->nxt->pre=p;free(pp);/后合并下区间pp=p->nxt;p->size+=pp->size;p->nxt

10、=pp->nxt;if(pp->nxt!=NULL)(pp->nxt->pre=p;free(pp);elseif(p->pre=&subHead|p->pre->state=Busy)&&(p->nxt!=NULL&&p->nxt->state=Free)(/情况2:只合并下面的分区pp=p->nxt;p->size+=pp->size;p->state=Free;p->taskId=-1;p->nxt=pp->nxt;(pp->nxt->

11、pre=p;)free(pp);)elseif(p->pre!=&subHead&&p->pre->state=Free)&&(p->nxt=NULL|p->nxt->state=Busy)(/情况3:只合并上面的分区pp=p;p=p->pre;p->size+=pp->size;p->nxt=pp->nxt;if(pp->nxt!=NULL)(pp->nxt->pre=p;)free(pp);)else(/情况4:上下分区均不用合并p->state=Free;p-

12、>taskId=-1;)p=p->nxt;)if(flag=1)(/回收成功printf("内存分区回收成功.n");return1;)else(/找不到目标作业,回收失败printf("找不到目标作业,内存分区回收失败.n");return0;)/显示空闲分区链情况voidshowSubArea()(printf("*n");printf("当前的内存分配情况如下:n");printf("*n");printf("起始地址|空间大小|工作状态|作业号n");su

13、bAreaNode*p=subHead.nxt;while(p!=NULL)(printf("*n");printf("*");printf("%3dk|",p->addr);printf("%3dk|",p->size);printf("%s|",p->state=Free?"Free":"Busy");if(p->taskId>0)(printf("%2d",p->taskId);)else(pr

14、intf("");)printf("*n");p=p->nxt;)printf('I*n");intmain()(intoption,ope,taskId,size;/初始化空闲分区链intSubArea();/模拟动态分区分配算法while(1)(printf("n");/printf('I*n");n");printf("1:分配内存2:回收内存0:退出printf('I*n");scanf("%d”,&ope);if(ope=0)b

15、reak;if(ope=1)/模拟分配内存printf("请输入作业号:");scanf("%d",&taskId);printf("请输入需要分配的内存大小(KB):");scanf("%d",&size);(printf("错误:分配内存大小必须为正值n");continue;)/调用分配算法bestFit(taskId,size);/显示空闲分区链情况showSubArea();)elseif(ope=2)(/模拟回收内存printf("请输入要回收的作业号:");scanf("%d”,&task

温馨提示

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

评论

0/150

提交评论