![操作系统实验首次适应算法循环首次适应算法_第1页](http://file4.renrendoc.com/view/5311eff1e23c104eb9e3f7a677d7f25b/5311eff1e23c104eb9e3f7a677d7f25b1.gif)
![操作系统实验首次适应算法循环首次适应算法_第2页](http://file4.renrendoc.com/view/5311eff1e23c104eb9e3f7a677d7f25b/5311eff1e23c104eb9e3f7a677d7f25b2.gif)
![操作系统实验首次适应算法循环首次适应算法_第3页](http://file4.renrendoc.com/view/5311eff1e23c104eb9e3f7a677d7f25b/5311eff1e23c104eb9e3f7a677d7f25b3.gif)
![操作系统实验首次适应算法循环首次适应算法_第4页](http://file4.renrendoc.com/view/5311eff1e23c104eb9e3f7a677d7f25b/5311eff1e23c104eb9e3f7a677d7f25b4.gif)
![操作系统实验首次适应算法循环首次适应算法_第5页](http://file4.renrendoc.com/view/5311eff1e23c104eb9e3f7a677d7f25b/5311eff1e23c104eb9e3f7a677d7f25b5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学号 P71514032 专业 计算机科学与技术姓名 实验日期 .11.16 教师签字 成绩 实验报告【实验名称】 初次适应算法和循环初次适应算法 【实验目的】学会主存空间分派与回收的基本办法初次适应算法和循环初次适应算法。【实验原理】理解在持续分区动态的存储管理方式下,如何实现贮存空间的分派与回收。采用可变式分区管理,使用最佳适应算法实现主存空间的分派与回收。采用可变式分区管理,使用最坏适应算法实现主存空间的分派与回收。数据构造:1、boolROM[N];//定义主存信息,如果内存被占用,则标记为1,否则标记为0,设立内存单元为10242、pcbnum[20];//定义作业数组,最大支持20个作业3、typedefstructPcb//定义作业构造体,涉及名称,开始时间,大小,与否执行状态{charname[10];intstart;intsize;intstate=0;}pcb;typedefstructFree_rom//空闲区构造体{intnum;intstart;intend;intspace;}Free_room;Free_romfree_rom[100];//设立空闲区数组为100个重要函数voidinit();//初始化信息,涉及初始化内存信息,和初始化作业队列voidinsert_pcb1(pcb&a);插入作业函数,初次适应算法,如果有适合的就插入,无适宜输出‘插入失败’voidinsert_pcb1(pcb&a);插入作业函数,循环初次适应算法,如果有适合的就插入,无适宜输出‘插入失败’voidDelete(pcb&a)//删除作业信息,涉及修改内存状态修改作业状态并对作业进行初始化voidshow();//显示信息voidfind_free_rom()//寻找空闲区算法流程图初次适应算法循环初次适应算法 程序代码及截图:#include<stdio.h>#include<string.h>#defineN1024boolROM[N];//设立内存块intp=0;//循环初次使用需要标记现在的空闲区块typedefstructPcb//作业数据构造{charname[10];intstart;intsize;intstate=0;}pcb;intfree_rom_counter=0;pcbnum[20];//作业队列typedefstructFree_rom//空闲区构造体{intnum;intstart;intend;intspace;}Free_room;Free_romfree_rom[100];//设立空闲区数组为100个voidfind_free_rom()//寻找空闲区{free_rom_counter=0;inti,j,p;for(i=0;i<N;i++)if(ROM[i]==0){p=i;for(j=i;j<N;j++){if(ROM[j]==0){i=j;continue;}if(ROM[j]==1)//找到空闲区{free_rom_counter++;free_rom[free_rom_counter].num=free_rom_counter;free_rom[free_rom_counter].start=p;free_rom[free_rom_counter].end=j-1;free_rom[free_rom_counter].space=j-p;i=j+1;break;}}if(j==N&&ROM[j-1]==0)//对最后一种内存进行特殊操作{free_rom_counter++;free_rom[free_rom_counter].num=free_rom_counter;//对空闲区进行解决free_rom[free_rom_counter].start=p;free_rom[free_rom_counter].end=j-1;free_rom[free_rom_counter].space=j-p;}}}voidinit()//初始化{for(inti=0;i<N;i++)ROM[i]=0;}voidshow(){printf("空闲区名\t开始地址\t\t大小\t\t结束地址\t\t\n");for(inti=1;i<=free_rom_counter;i++)printf("%d\t\t%d\t\t\t%d\t\t%d\t\t\n",free_rom[i].num,free_rom[i].start,free_rom[i].space,free_rom[i].end);}voidinsert_pcb1(pcb&a)//初次适应算法来实现作业调度{inti,j,k;for(i=0;i<N;i++)if(ROM[i]==0){for(j=i;j<=(i+a.size)&&j<N;j++)//查询第一种空闲区,并判断与否适合插入作业if(ROM[j]==1){i=j+1;break;}if(j==i+a.size+1){a.start=i;//设立作业的开始内存a.state=1;//标记作业在内存中for(k=i;k<i+a.size&&j<N;k++)ROM[k]=1;printf("插入成功,进程%s的初始地址为%d,结束地址为%d\n",,a.start,a.start+a.size-1);return;}}if(i==N)//未查询到适宜的区域printf("插入失败,无可用空间\n");}voidinsert_pcb2(pcb&a)//循环初次适应算法来实现作业调度{inti,j,k;for(i=p;i<N;i++)//从所标记的现在区域开始查询,查询到末内存{if(ROM[i]==0){for(j=i;j<=(i+a.size)&&j<N;j++)if(ROM[j]==1){i=j+1;break;}if(j==i+a.size+1)//找到适宜的空闲区{a.start=i;a.state=1;for(k=i;k<i+a.size&&j<N;k++)ROM[k]=1;printf("插入成功,进程%s的初始地址为%d,结束地址为%d\n",,a.start,a.start+a.size-1);p=i+a.size;return;}}}for(i=0;i<p;i++)//当未找届时,从第一种空闲区开始查询,结束条件为不大于所标记的Pif(ROM[i]==0){for(j=i;j<=(i+a.size)&&j<p;j++)if(ROM[j]==1){i=j+1;break;}if(j==i+a.size+1)//成功找到结束,并标记现在P为现在的作业的尾部{a.start=i;a.state=1;for(k=i;k<i+a.size&&j<p;k++)ROM[k]=1;printf("插入成功,进程%s的初始地址为%d\n",,a.start);p=i+a.size;break;}}if(i==p)//查询两部分都未找到适宜的区域,输出插入失败语句printf("插入失败,无可用空间\n");}voidDelete(pcb&a)//删除作业,修改内存信息和初始化该作业信息{inti;for(i=a.start;i<a.start+a.size;i++)ROM[i]=0;a.state=0;//状态标记为未使用printf("删除成功\n");}intmain(){init();intcount=0;intchoose1,choose;charname[10];pcba;printf("1、初次适应算法\n");printf("2、循环初次适应算法\n");scanf("%d",&choose1);do{printf("\n\n1、插入进程\n");printf("2、删除进程\n");printf("3、显示进程的信息\n");printf("4、显示空闲区\n");scanf("%d",&choose);if(choose==1){printf("输入进程名\n");scanf("%s",&);printf("输入进程大小\n");scanf("%d",&a.size);if(choose1==1)insert_pcb1(a);elseinsert_pcb2(a);num[count++]=a;}elseif(choose==2){printf("输入删除进程的名字\n");scanf("%s",&name);for(inti=0;i<count;i++)if(!strcmp(num[i].name,name))Delete(num[i]);}elseif(choose==3){printf("进程名\t\t开始地址\t\t大小\t\t结束地址\t\t\n");//输出内存信息for(inti=0;i<count-1;i++)for(intj=i;j<count-1;j++)if(num[j].start>num[j+1].start){a=num[j];num[j]=num[j+1];num[j+1]=a;}for(inti=0;i<count;i++)if(num[i].state!=0)printf("%s\t\t%d\t\t\t%d\t\t%d\t\t\n",num[i].name,num[i].start,num[i].size,num[i].size+num[i].start-1);}elseif(choose==4){find_free_rom();show();}elsebreak;}while(1);return0;}初次适应算法:本实验共采用1024个内存进行模拟,首先对内存初始化,得到一种大的空闲区:相继插入3个进程:分别插入进程ABC,大小分别为100,200,300此时查询进程信息和查询空闲区信息有一块大小为424起始地址为600的空闲区在进行插入D删除B此时有两块空闲区插入一种
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 44928-2024微电子学微光刻技术术语
- GB/T 44924-2024半导体集成电路射频发射器/接收器测试方法
- GB/T 45174-2024鞋类微孔鞋底密度测定法
- 1-3-Dieicosenoyl-glycerol-生命科学试剂-MCE-8506
- 二零二五年度上市公司员工持股协议转让易主合同
- 二零二五年度儿童教育机构门店联营合作协议
- 二零二五年度船舶转让手续办理与船舶交易评估与代理服务协议
- 2025年度足疗技师星级评定与聘用合同
- 2025年度二零二五年度道路运输项目投资合作协议
- 施工现场交通管制制度
- 2025年度院感管理工作计划(后附表格版)
- 励志课件-如何做好本职工作
- 化肥销售工作计划
- 2024浙江华数广电网络股份限公司招聘精英18人易考易错模拟试题(共500题)试卷后附参考答案
- 2024年社区警务规范考试题库
- 2025中考英语作文预测:19个热点话题及范文
- 第10讲 牛顿运动定律的综合应用(一)(讲义)(解析版)-2025年高考物理一轮复习讲练测(新教材新高考)
- 2024秋期国家开放大学本科《纳税筹划》一平台在线形考(形考任务一至五)试题及答案
- 2023年西安经济技术开发区管委会招聘考试真题
- 静脉治疗护理技术操作标准(2023版)解读 2
- 2024年全国各地中考试题分类汇编(一):现代文阅读含答案
评论
0/150
提交评论