操作系统实验报告
班级:3G软件12-01
姓名:
学号:
首次适应算法
设计图:
核心代码:
//首次适应算法
int first_fit(char jname,int size){
printf("name=%c,size=%d\n",jname,size);
int flag=0;//默认flag=0情况分配失败,而flag=1时分配成功
int sum=0;//对sum的初始化
for(int i=0;i
//number为已定义的进程数量
if(fqlist[i].flag!=1){
//当某一分区不在使用时
if(fqlist[i].capactity>size)//如果内存空间大于进程长度
{
if(i
//分配内存,已使用内存块增加
for(int j=number-1;j>i;j--)
{
fqlist[j]=fqlist[j-1];
}
fqlist[i+1].name='n';
fqlist[i+1].start=sum+size;
fqlist[i+1].end=fqlist[i].end;
fqlist[i+1].capactity=fqlist[i].capactity-size;
fqlist[i+1].flag=fqlist[i].flag;
}
fqlist[i].name=jname;
fqlist[i].start=sum;
fqlist[i].end=sum+size-1;
fqlist[i].capactity=size;
fqlist[i].flag=1;
fqNum++;//进程数目增1
//需要把以后的分区块往后一个位置
flag=1;
}else{
//当未使用的分区块大小不足时
sum=sum+fqlist[i].capactity;
}
}else{
//当该分区块在使用时
sum=sum+fqlist[i].capactity;
}
}
if(flag==1)
printf("已为进程%c分配内存区!\n",jname);
else
printf("为进程%c分配内存区失败!\n",jname);
return 0;
}
//回收内存
int Memory_recovery(){
int flag=0;//标记回收是否成功 0:失败1:成功
int sflag=0;
int tflag=0;
char jname='z';
getchar();//吸收空白键
printf("请输入进程名称:");
scanf("%c",&jname);
for(int i=0;i
if(fqlist[i].name==jname){
fqlist[i].name='n';
fqlist[i].flag=2;//表示为回收的内存区
flag=1;
fqNum--;
}
}
if(flag==1)
printf("进程%c结束,内存回收成功!\n",jname);
else printf("进程%c无法结束,内存回收失败!\n",jname);
//将连续的已回收的内存区合并
while(flag<3){
for(i=0;i
if(fqlist[i].flag==0||fqlist[i].flag==2){
if(fqlist[i+1].flag!=1){
if(fqlist[i+1].flag==3)
{
fqlist[i].end=fqlist[i+1].end;
fqlist[i].capactity=fqlist[i].capactity+fqlist[i+1].capactity;
fqlist[i].flag=fqlist[i+1].flag;
for(int j=i+1;j
fqlist[j]=fqlist[j+1];
}
i=number;
flag++;
}
else{
fqlist[i].end=fqlist[i+1].end;
fqlist[i].capactity=fqlist[i].capactity+fqlist[i+1].capactity;
fqlist[i].flag=fqlist[i+1].flag;
for(int j=i+1;j
{
fqlist[j]=fqlist[j+1];
}
}
}
}
}
flag++;
}
return 0;
}
编程环境和系统环境:
Microsoft (R) Developer Studio软件和win8.1操作系统
结果截图:
分配内存:
添加进程;
分配失败:
添加成功:
回收内存;
退出: