操作系统 首次最佳适应算法 (2).doc_第1页
操作系统 首次最佳适应算法 (2).doc_第2页
操作系统 首次最佳适应算法 (2).doc_第3页
操作系统 首次最佳适应算法 (2).doc_第4页
操作系统 首次最佳适应算法 (2).doc_第5页
全文预览已结束

下载本文档

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

文档简介

学 号 专 业 姓 名 实验日期 教师签字 成 绩实验报告【实验名称】采用可变式分区管理,使用首次获最佳适应算法实现内存分配与回收 【实验目的与原理】1、理解首次获最佳适应算法的内涵,并熟练掌握该算法。2、学会可变式分区管理的原理是即在处理作业过程中建立分区,使分区大小正好适合作业的需要,并且分区个数是可以调整的。3、当有一个新作业要求装入主存时,必须查空闲区说明表,从中找出一个足够大的空闲区没有时应将空闲区一分为二。为了便于快速查找,要不断地对表格进行紧缩,即让“空表目”项留在表的后部。4、当一个作业执行完成时,作业所占用的分区应归还给系统。作业的释放区与空闲区的邻接分以下四种情况考虑: 释放区下邻(低地址邻接)空闲区; 释放区上邻(高地址邻接)空闲区 释放区上下都与空闲区邻接; 释放区与空闲区不邻接。【实验内容】#include#include#includeusing namespace std;const int MAXJOB=100;/定义表最大记录数typedef struct nodeint front;int length;char data20;job;job freesMAXJOB;/定义空闲区表int free_quantity;job occupysMAXJOB;/定义已分配区表int occupy_quantity;/初始化函数void initial()int i;for(i=0;iMAXJOB;i+)freesi.front=-1;freesi.length=0;strcpy(freesi.data,free);occupysi.front=-1;occupysi.length=0;strcpy(occupysi.data, );free_quantity=0;occupy_quantity=0;/创建空闲分区表int creatfree()FILE *fp;char fname20;coutfname;if(fp=fopen(fname,r)=NULL)cout错误,文件打不开,请检查文件名endl;elsewhile(!feof(fp)fscanf(fp,%dt%dn,&freesfree_quantity.front,&freesfree_quantity.length);free_quantity+;cout空闲的分区表已建立!n;return 1;return 0;void sort()/将free空间安首地址从小到大的顺序排列int i,j,p;for(i=0;ifree_quantity-1;i+)p=i;for(j=i+1;jfree_quantity;j+)if(freesj.frontfreesp.front)p=j;if(p!=i)freesfree_quantity=freesi;freesi=freesp;freesp=freesfree_quantity;/显示函数void show()int i;coutendl-endl;cout当前空闲表:endl;cout起始地址 长度 状态endl;for(i=0;ifree_quantity;i+)cout.setf(2);cout.width(12);coutfreesi.front;cout.width(10);coutfreesi.length;cout.width(8);coutfreesi.dataendl;coutendl-endl;cout当前已分配表:endl;cout起始地址 长度 占用作业名endl;for(i=0;ioccupy_quantity;i+)cout.setf(2);cout.width(12);coutoccupysi.front;cout.width(10);coutoccupysi.length;cout.width(8);coutoccupysi.dataendl;coutendl-endl;/最先适应分配算法void assign()char job_name20;int job_length;int i,j,flag,t;coutjob_name;cinjob_length;flag=0;for(i=0;i=job_length)/如果空闲空间I的长度作业长度flag=1; /空闲标志位就置1if(flag=0)coutendl对不起,当前没有能满足你申请长度的空闲内存,请稍候再试!=job_length)t=1;i+;/如果空闲空间I的长度不大于作业长度,I加一,判断下一个空间i-;occupysoccupy_quantity.front=freesi.front;strcpy(occupysoccupy_quantity.data,job_name);occupysoccupy_quantity.length=job_length;occupy_quantity+; if(freesi.lengthjob_length)/如果空间的长度大于作业的长度,freesi.front+=job_length;freesi.length-=job_length;else for(j=i;jfree_quantity-1;j+)freesj=freesj+1;free_quantity-;cout内存空间成功:)endl; /撤消作业 void cancel()char job_name20;int i,j,flag,p=0;int front;int length;coutjob_name;flag=-1;for(i=0;ioccupy_quantity;i+)if(!strcmp(occupysi.data,job_name)/当输入作业名匹配时flag=i;front=occupysi.front;length=occupysi.length;if(flag=-1)cout没有这个作业名endl;else/加入空闲表for(i=0;ifree_quantity;i+)if(freesi.front+freesi.length)=front)/上空if(i+1)free_quantity)&(freesi+1.front=front+length)/下空freesi.length=freesi.length+freesi+1.length+length;for(j=i+1;jfree_quantity;j+)freesj=freesj+1;free_quantity-;p=1;elsefreesi.length+=length;p=1;if(freesi.front=(front+length)/下空上不空freesi.front=front;freesi.length+=length;/第i个空闲区间的长度=第i个空闲区间的长度+lengthp=1;if(p=0)/上下空闲区都不空freesfree_quantity.front=front;freesfree_quantity.length=length;free_quantity+;/删除分配表中的该作业for(i=flag;ioccupy_quantity;i+)occupysi=occupysi+1;occupy_quantity-;void main()int flag=0;int t=1;int chioce=0;cout* xxxxxxxxx*n;initial();flag=creatfree();while(flag=1)sort();cout 可变分区存储管理模拟系统endl;cout 1.申请空间 endl;cout 2.撤消作业 endl;cout 3.显示空闲表和分配表 endl; cout 0.退出endl;coutchioce;switch(chioce)case 1:assign();break;case 2:cancel();break;case 3:show();break;case 0:flag=0;break;default:cout选择错误!endl;实验结果显示:【实验小结

温馨提示

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

评论

0/150

提交评论