if(free[c][1] <=idle[q][0]){ for(int j=num;j>=q;j--){idle[j+1][0]=idle[j][0]; idle[j+1][1]=idle[j][1]; }
idle[j][0]=free[c][1]; idle[j][1]=free[c][2]; b++;
if(idle[j+1][0]==idle[j][0]+idle[j][1]){ idle[j][1]=idle[j][1]+idle[j+1][1];
for(int m=j+1;m <=num;m++){ idle[m][0]=idle[m+1][0]; idle[m][1]=idle[m+1][1]; }
idle[m][0]=0; idle[m][1]=0; b--; }
if(idle[j-1][0]==idle[j][0]){
第4页 共8页
idle[j-1][1]=idle[j-1][1]+idle[j][1]; for(int n=j;j <=num;j++){ idle[n][0]=idle[n+1][0]; idle[n][1]=idle[n+1][1]; }
idle[n][0]=0; idle[n][1]=0; b--; }
break; } }
if(ch2==1)zuixian(); if(ch2==2)zuijia(); if(ch2==3)zuihuai();
for(int p=c;c cout<<\"该进程已被成功回收!\"<void fp(){int tag=0; num=0; b=0; jishu(); jishu1();
for(int j=0;j if(work[b][1] idle[j][0]=idle[j][0]+work[b][1]; idle[j][1]=idle[j][1]-work[b][1]; tag=1; break; }else if(work[b][1]==idle[j][1]){ free[b][0]=work[b][0]; free[b][1]=idle[j][0];
第5页 共8页
free[b][2]=work[b][1]; tag=1;
for(int i=j;i <=num-1;i++){
idle[i][0]=idle[i+1][0]; idle[i][1]=idle[i+1][1]; }
break; }
else tag=0; }
if(tag==0)cout <<\"作业过大没有足够存储空间!\" <void print(){ num=0; b=1; jishu(); jishu1();cout <<\"已分配表为:\" <cout <<\"作业名:\" <cout <cout <<\"空闲区表为:\" <cout <<\"起始地址:\" <void main(){ init();int n;
cout <<\"1.分配空间;2.回收空间;\" <>ch1; cout <cout <<\"1.最先适应法;2.最佳适应法;3.最坏适应法;\" <>ch2; cout <cout <<\"请输入要分配内存的作业名及占用内存大小:\"; cin>>work[b][0]>>work[b][1];第6页 共8页
cout <else if(ch2==2){ zuijia(); fp(); }else if(ch2==3){ zuihuai(); fp(); }
print(); }
cout <<\"输入要回收的作业名:\" <>n; huishou(n); }第7页 共8页
心得体会
我们可以采用最先适应法,最佳适应法,最坏适应法来分配主存空间。当一个作业要求装入主存时,必须从空闲区表中找出一个足够大的空闲区。当一个作业撤离时,归还的区域如果与其他空闲区相邻,则合并成一个较大的空闲区,登在空闲区表中。
第8页 共8页