操作系统实验最佳适应算法最坏适应算法Word格式文档下载.docx
- 文档编号:18000436
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:16
- 大小:373.45KB
操作系统实验最佳适应算法最坏适应算法Word格式文档下载.docx
《操作系统实验最佳适应算法最坏适应算法Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《操作系统实验最佳适应算法最坏适应算法Word格式文档下载.docx(16页珍藏版)》请在冰豆网上搜索。
charname[10];
intstart;
intsize;
intstate=0;
}pcb;
主要函数:
voidfind_free_rom();
//寻找空闲区
voidsort1();
//对空闲区进行排序从小到大
//对空闲区进行排序从大到小
voidshow();
//显示函数
voidinsert_pcb1(pcb&
a);
//最佳适应算法
voidinsert_pcb2(pcb&
//最坏适应算法
voidinit();
//初始化函数
算法流程图:
最佳适应算法:
最坏适应算法:
#include<
stdio.h>
string.h>
#defineN1024
boolROM[N];
intp=0;
intcount=0;
intfree_rom_counter=0;
//空闲区数目
typedefstructPcb//进程结构体
//大小
//状态
pcbnum[20];
//进程数组
typedefstructFree_rom//空闲区结构体
intnum;
intend;
intspace;
//空闲区大小
}Free_room;
Free_romfree_rom[100];
//空闲区数组
voidshow()//显示空闲区信息
printf("
****************************************************************\n\n"
);
空闲区名\t开始地址\t\t大小\t\t结束地址\t\t\n"
for(inti=1;
i<
=free_rom_counter;
i++)
%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);
\n"
}
voidfind_free_rom()//寻找空闲区,更新空闲区数组
free_rom_counter=0;
inti,j,p;
for(i=0;
N;
if(ROM[i]==0)
{
p=i;
for(j=i;
j<
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)//对最后一个内存进行特殊处理
voidsort1()//最佳适应算法对空闲区从小到大排序
find_free_rom();
Free_roma;
for(inti=1;
free_rom_counter;
for(intj=1;
if(free_rom[j].space>
free_rom[j+1].space)
a=free_rom[j];
free_rom[j]=free_rom[j+1];
free_rom[j+1]=a;
voidsort2()//最坏适应算法对空闲区从大到小排序
if(free_rom[j].space<
voidinit()//初始化
for(inti=0;
ROM[i]=0;
voidinput(pcb&
a)//输入
输入进程名\n"
scanf("
%s"
&
a.name);
输入进程大小\n"
%d"
a.size);
a)//最佳适应算法插入进程
sort1();
inti,j,k;
for(i=1;
=free_rom_counter;
i++)//判断插入
if(a.size<
=free_rom[i].space)
for(j=free_rom[i].start;
free_rom[i].start+a.size;
ROM[j]=1;
a.state=1;
a.start=free_rom[i].start;
num[count++]=a;
if(i==free_rom_counter+1)//插入失败
可用空间不足!
a)//最坏适应算法插入{
find_free_rom();
sort2();
inti,j,k;
for(i=1;
j++)//寻找
if(i==free_rom_counter+1)//插入失败
voidDelete(pcb&
a)//内存中释放进程
inti;
for(i=a.start;
a.start+a.size;
//更新内存信息,更新进程状态数组
a.state=0;
删除成功\n"
intmain()//主函数
init();
intchoose1;
intchoose;
1、最佳适应算法\n"
//主界面
2、最坏首次适应算法\n"
choose1);
pcba;
do
\n\n1、插入进程\n"
2、删除进程\n"
3、显示进程信息\n"
4、显示空余内存信息\n"
choose);
if(choose==1)//选择
input(a);
if(choose1==1)
insert_pcb1(a);
elseinsert_pcb2(a);
elseif(choose==2)
输入删除进程的名字\n"
name);
count;
if(!
strcmp(num[i].name,name))
Delete(num[i]);
elseif(choose==3)
进程名\t\t开始地址\t\t大小\t\t结束地址\t\t\n"
//输出内存信息
if(num[i].state!
=0)
%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);
\n****************************************************************\n\n"
elseif(choose=4)
show();
elsebreak;
while
(1);
return0;
截图:
构造如下空闲区:
此时插入一个进程G,大小为80H,应插入到第二块空闲区
再插入一个大小为30的进程H,应插入到第三块中
再插入一个小进程,大小为5,插入到第二块空闲区,查看进程信息和空闲区信息:
最佳适应算法成立。
插入一个大小为80的进程G,插入到第一块空闲区。
在插入一个大小为20的进程H,插入到第三块空闲区。
再插入一个大小为20的进程,插入到第三块空闲区。
最坏适应算法成立。
【小结或讨论】
1、本次实验涉及到两个表,空闲区登记表和进程分配表,分配空间需要进程所需空间的大小,给出过分配后进程的起始地址;
回收空间除了需要进程所需空间的大小以外,还需要知道进程的起始地址,再进行一系列判断然后回收。
2、本次实验的两个算法是在首次适应算法的基础上进行的改进,最佳适应算法是将所有区按照区的大小进行升序排列,再从第一个区即最小的区开始检索分配内存;
最坏适应算法是将所有区按照区的大小进行降序排列,再直接将第一个区即最大的区给进程分配空间。
3、最坏适应算法较最佳适应算法简单一些,只需要一层for循环,只跟第一个区大小进行比较即可。
4、通过本次实验,我对于主存空间的动态分配与回收有了进步的理解。
掌握了最佳适应算法和最坏适应算法的中心思想。
最佳适应算法是首先将主存空闲空间大小进行排序,找到最适合的一个空间分配。
但看似充分利用了空闲空间,但导致剩余的空间过于小而导致无法使用。
而最坏适应算法与其恰恰相反。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验 最佳 适应 算法 最坏