操作系统实验首次适应算法与循环首次适应算法.docx
- 文档编号:15782402
- 上传时间:2023-07-07
- 格式:DOCX
- 页数:20
- 大小:481.84KB
操作系统实验首次适应算法与循环首次适应算法.docx
《操作系统实验首次适应算法与循环首次适应算法.docx》由会员分享,可在线阅读,更多相关《操作系统实验首次适应算法与循环首次适应算法.docx(20页珍藏版)》请在冰点文库上搜索。
操作系统实验首次适应算法与循环首次适应算法
学号P7*******专业计算机科学与技术姓名
实验日期2017、11、16教师签字成绩
实验报告
【实验名称】首次适应算法与循环首次适应算法
【实验目的】
学会主存空间分配与回收的基本方法首次适应算法与循环首次适应算法。
【实验原理】
理解在连续分区动态的存储管理方式下,如何实现贮存空间的分配与回收。
采用可变式分区管理,使用最佳适应算法实现主存空间的分配与回收。
采用可变式分区管理,使用最坏适应算法实现主存空间的分配与回收。
数据结构:
1、boolROM[N];//定义主存信息,如果内存被占用,则标记为1,否则标记为0,设置内存单元为1024
2、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
#include
#defineN1024
boolROM[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 if(ROM[i]==0) { p=i; for(j=i;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 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 if(ROM[i]==0) { for(j=i;j<=(i+a、size)&&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 ROM[k]=1; printf("插入成功,进程%s的初始地址为%d,结束地址为%d\n",a、name,a、start,a、start+a、size-1); return; } } if(i==N)//未查询到合适的区域 printf("插入失败,无可用空间\n"); } voidinsert_pcb2(pcb&a)//循环首次适应算法来实现作业调度 { inti,j,k; for(i=p;i { if(ROM[i]==0) { for(j=i;j<=(i+a、size)&&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 ROM[k]=1; printf("插入成功,进程%s的初始地址为%d,结束地址为%d\n",a、name,a、start,a、start+a、size-1); p=i+a、size; return; } } } for(i=0;i if(ROM[i]==0) { for(j=i;j<=(i+a、size)&&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 ROM[k]=1; printf("插入成功,进程%s的初始地址为%d\n",a、name,a、start); p=i+a、size; break; } } if(i==p)//查询两部分都未找到合适的区域,输出插入失败语句 printf("插入失败,无可用空间\n"); } voidDelete(pcb&a)//删除作业,修改内存信息与初始化该作业信息 { inti;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验 首次 适应 算法 循环