操作系统首次最佳适应算法.docx

上传人:牧羊曲112 文档编号:3549594 上传时间:2023-03-13 格式:DOCX 页数:9 大小:39.11KB
返回 下载 相关 举报
操作系统首次最佳适应算法.docx_第1页
第1页 / 共9页
操作系统首次最佳适应算法.docx_第2页
第2页 / 共9页
操作系统首次最佳适应算法.docx_第3页
第3页 / 共9页
操作系统首次最佳适应算法.docx_第4页
第4页 / 共9页
操作系统首次最佳适应算法.docx_第5页
第5页 / 共9页
亲,该文档总共9页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《操作系统首次最佳适应算法.docx》由会员分享,可在线阅读,更多相关《操作系统首次最佳适应算法.docx(9页珍藏版)》请在三一办公上搜索。

1、操作系统 首次最佳适应算法学 号 专 业 姓 名 实验日期 教师签字 成 绩 实验报告 采用可变式分区管理,使用首次获最佳适应算法实现内存分配与回收 1、理解首次获最佳适应算法的内涵,并熟练掌握该算法。 2、学会可变式分区管理的原理是即在处理作业过程中建立分区,使分区大小正好适合作业的需要,并且分区个数是可以调整的。 3、当有一个新作业要求装入主存时,必须查空闲区说明表,从中找出一个足够大的空闲区没有时应将空闲区一分为二。为了便于快速查找,要不断地对表格进行紧缩,即让“空表目”项留在表的后部。 4、当一个作业执行完成时,作业所占用的分区应归还给系统。作业的释放区与空闲区的邻接分以下四种情况考虑

2、: 释放区下邻空闲区; 释放区上邻空闲区 释放区上下都与空闲区邻接; 释放区与空闲区不邻接。 #include #include #include using namespace std; const int MAXJOB=100;/定义表最大记录数 typedef struct node int front; int length; char data20; job; job freesMAXJOB;/定义空闲区表 int free_quantity; job occupysMAXJOB;/定义已分配区表 int occupy_quantity; /初始化函数 void initial in

3、t 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; else w

4、hile(!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_qu

5、antity=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当

6、前已分配表: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_len

7、gth; flag=0; for(i=0;i=job_length)/如果空闲空间I的长度作业长度 flag=1; /空闲标志位就置1 if(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

8、; occupy_quantity+; if(freesi.lengthjob_length)/如果空间的长度大于作业的长度, freesi.front+=job_length; freesi.length-=job_length; else for(j=i;jfree_quantity-1;j+) free_quantity-; cout内存空间成功:)endl; freesj=freesj+1; freesi.length=freesi.length+freesi +1.length+length; /撤消作业 void cancel char job_name20; int i,j,fl

9、ag,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)fr

10、ee_quantity)&(freesi+1.front=front+length)/下空 for(j=i+1;jfree_quantity;j+) freesj=freesj+1; free_quantity-; p=1; else freesi.length+=length; p=1; if(freesi.front=(front+length)/下空上不空 freesi.front=front; freesi.length+=length;/第i个空闲区间的长度=第i个空闲区间的长度+length p=1; if(p=0)/上下空闲区都不空 freesfree_quantity.fron

11、t=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 可变分区存储管理模拟cout 1.申请空间 endl; cout 2.撤消作业 endl

12、; cout 3.显示空闲表和分配表 cout 0.退出endl; coutchioce; switch(chioce) case 1: assign; break; cancel; break; show; break; flag=0; break; cout选择错误!endl; case 2: case 3: 系统endl; case 0: default: endl; 实验结果显示: 本实验难度在两个方面,一是首次最佳适应算法assign,这里我用的是结构体数组来存储空闲分区;二是对已分配分区的释放,这里同样采取结构体数组来存储已分配分区,用cancle函数来实现。为了更好的实现分配和释放功能,我用sort函数对空闲分区进行了排序。另外我还用了文件操作来读取空闲分区表,即文件D:1.txt,以对文件操作复习,颇有收获。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号