版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、最佳适应算法源程序代码#include <iostream.h>#include <iomanip.h>/全局变量float minsize=5;int count1=0;int count2=0;#define M 10/假定系统允许的空闲区表最大为m#define N 10 /假定系统允许的最大作业数量为n/已分配表的定义structfloat address; /已分分区起始地址 float length; /已分分区长度,单位为字节 int flag; /已分配区表登记栏标志,"0"表示空栏目used_tableN; /已分配区表对象名/空闲
2、区表的定义:structfloat address;/空闲区起始地址 float length;/空闲区长度,单位为字节 int flag; /空闲区表登记栏标志,用"0"表示空栏目,用"1"表示未分配free_tableM; /空闲区表对象名/函数声明void initialize(void);int distribute(int, float);int recycle(int);void show();/初始化两个表void initialize(void)int a;for(a=0; a<=N-1; a+)used_tablea.flag=0
3、;/已分配表的表项全部置为空表项free_table0.address=1000;free_table0.length=1024;free_table0.flag=1;/空闲区表的表项全部为未分配/最优分配算法实现的动态分区int distribute(int process_name, float need_length)int i, k=-1;/k用于定位在空闲表中选择的未分配栏float ads, len;int count=0;i=0; while(i<=M-1) /循环找到最佳的空闲分区if(free_tablei.flag=1 && need_length &
4、lt;=free_tablei.length)count+;if(count=1|free_tablei.length < free_tablek.length)k=i;i=i+1;if(k!=-1)if(free_tablek.length-need_length)<=minsize) /整个分配free_tablek.flag=0;ads=free_tablek.address;len=free_tablek.length;else/切割空闲区ads=free_tablek.address;len=need_length;free_tablek.address+=need_le
5、ngth;free_tablek.length-=need_length;i=0; /循环寻找内存分配表中标志为空栏目的项 while(used_tablei.flag!=0) i=i+1;if(i<=N-1) /找到,在已分配区表中登记一个表项 used_tablei.address=ads;used_tablei.length=len;used_tablei.flag=process_name;count1+;else /已分配区表长度不足if(free_tablek.flag = 0) /将已做的整个分配撤销free_tablek.flag=1;free_tablek.addres
6、s=ads;free_tablek.length=len;else /将已做的切割分配撤销free_tablek.address=ads; free_tablek.length+=len;cout<<"内存分配区已满,分配失败!n" return 0;elsecout <<"无法为该作业找到合适分区!n"return 0;return process_name;int recycle(int process_name) int y=0;float recycle_address, recycle_length;int i, j,
7、k; /j栏是下邻空闲区,k栏是上栏空闲区int x; /在内存分配表中找到要回收的作业while(y<=N-1&&used_tabley.flag!=process_name)y=y+1;if(y<=N-1) /找到作业后,将该栏的标志置为'0' recycle_address=used_tabley.address;recycle_length=used_tabley.length;used_tabley.flag=0;count2+;else /未能找到作业,回收失败cout<<"该作业不存在!n"return
8、0;j=k=-1;i=0;while(!(i>=M|(k!=-1&&j!=-1) /修改空闲分区表if(free_tablei.flag=1)if(free_tablei.address+free_tablei.length)=recycle_address)k=i;/判断是否有上邻接 if(recycle_address+recycle_length)=free_tablei.address)j=i;/判断是否有下邻接i=i+1;/合并空闲区if(k!=-1) /回收区有上邻接if(j!=-1)/回收区也有下邻接,和上下邻接合并free_tablek.length+=f
9、ree_tablej.length+recycle_length;free_tablej.flag=0;/将第j栏的标记置为'0'else /不存在下邻接,和上邻接合并free_tablek.length+=recycle_length;else if(j!=-1) /只有下邻接,和下邻接合并free_tablej.length+=recycle_length;free_tablej.address=recycle_address; else /上下邻接都没有x=0;while(free_tablex.flag!=0)x=x+1;/在空闲区表中查找一个状态为'0'
10、;的栏目if(x<=M-1) /找到后,在空闲分区中登记回收的内存free_tablex.address=recycle_address;free_tablex.length=recycle_length;free_tablex.flag=1;else /空闲表已满,执行回收失败used_tabley.flag=process_name;cout<<"空闲区已满,回收失败!n"return 0;return process_name;void show() /程序执行时输出模拟的内存分配回收表cout<<"+n" cout&
11、lt;<"+ 空 闲 区 +n" cout<<"+n"for(int i=0;i<=count2;i+)if(free_tablei.flag!=0) cout<<"初始地址:"<<free_tablei.address<<" "<<"长度:"<<free_tablei.length<<" "<<"状 态:"<<free_tablei.f
12、lag<<endl;cout<<"+n" cout<<"+ 已 分 配 区 +n" cout<<"+n" for(int j=0;j<count1;j+)if(used_tablej.flag!=0) cout<<"初始地址:"<<used_tablej.address<<" "<<"长度:"<<used_tablej.length<<" &
13、quot;<<"作业名:"<<used_tablej.flag<<endl;void main() /主函数调用各功能函数对所有工作进行测试int choice; /用来选择将要进行的操作int job_name;float need_memory;bool exitFlag=false;cout<<" 动态分区分配方式的模拟 n" cout<<"*n" cout<<"请选择操作类型:n" initialize(); /开创空闲区和已分配区两个
14、表while(!exitFlag)cout<<"*n" cout<<"* 1: 分配内存 2: 回收内存 *n" cout<<"* 3: 查看分配 0: 退 出 *n" cout<<"*n" cout<<"请输入您的操作 :" cin>>choice;switch(choice) case 0: exitFlag=true; /退出操作 break; case 1: cout<<"请输入作业号和所需内存:" cin>>job_name>>need_memory; if(job_name!=0&&need_memory!=0) distribute(job_name, need_memory); / 分配内存 else if(job_name=0) cout<<"作业号不能为零!n请重新选择操作:n" else if(need_memo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 石河子大学《食品工程原理二》2021-2022学年第一学期期末试卷
- 石河子大学《现代人工智能技术》2023-2024学年期末试卷
- 石河子大学《家畜繁殖学》2022-2023学年第一学期期末试卷
- 沈阳理工大学《自动控制理论》2021-2022学年期末试卷
- 沈阳理工大学《建筑模型制作与工艺》2021-2022学年第一学期期末试卷
- 沈阳理工大学《电工与电子技术实验》2023-2024学年期末试卷
- 光伏代理商合同范本
- 沈阳理工大学《环境设计》2021-2022学年第一学期期末试卷
- 海事法院 合同解除 典型案例
- 合同到期的续签申请书
- 统编版2024年新教材七年级上册道德与法治8.1《认识生命》教案
- 注水泵工(中级)技能鉴定理论考试题库(含答案)
- 胃癌介入治疗的临床分析与疗效评价课件
- 基于LoRa通信的智能家居系统设计及研究
- 心脏骤停与心源性猝死的急救与护理课件
- 河南省郑州市郑州一八联合国际学校2025届物理九年级第一学期期中考试模拟试题含解析
- 地球物理勘探合同范本
- 超星尔雅学习通《人人学点营销学(中南财经政法大学)》2024章节测试答案
- 营业线施工有关事故案例及分析
- 植物油灶具供货安装合同
- 车辆维修技术服务方案(2篇)
评论
0/150
提交评论