1、操作系统实验四 【实验题目】:动态分区分配算法 【实验学时】:4学时 【实验目得】 通过这次实验,加深对动态分区分配算法得理解,进一步掌握首次适应算法、循环首次适应算法、最佳适应算法与最坏适应算法得实现方法。 【实验内容及要求】 问题描述: 设计程序模拟四种动态分区分配算法:首次适应算法、循环首次适应算法、最佳适应算法与最坏适应算法得工作过程。假设内存中空闲分区个数为n,空闲分区大小分别为P1, … ,Pn,在动态分区分配过程中需要分配得进程个数为m(m≤n),它们需要得分区大小分别为S1, … ,Sm,分别利用四种动态分区分配算法将m个进程放入n个空闲分区,给出进程在空闲分区
2、中得分配情况.
程序要求:
1)利用首次适应算法、循环首次适应算法、最佳适应算法与最坏适应算法四种动态分区分配算法模拟分区分配过程。
2)模拟四种算法得分区分配过程,给出每种算法进程在空闲分区中得分配情况。
3)输入:空闲分区个数n,空闲分区大小P1, … ,Pn,进程个数m,进程需要得分区大小S1, … ,Sm。
4)输出:首次适应算法,循环首次适应算法,最佳适应算法,最坏适应算法,最终内存空闲分区得分配情况。
实现源代码:
#include〈iostream〉
#include〈fstream>
#include<iomanip>
#include 3、define max 100
using namespace std;
int work_num;
int zone_num;
struct Data{
ﻩint data;
ﻩchar name;
};
Data *d=new Data[max];
struct Table{
ﻩint data;
char array[max];
ﻩint length;
};
Table *T=new Table[max];
Table *temp=new Table[max];
void Init()
{
ﻩifstream inf(”DTFQ、txt"); 4、
ﻩint i,j;
char ch;
inf〉>work_num;
cout<<”作业数:"〈〈work_num〈 5、 inf〉>d[i]、data;
ﻩcout〈 6、{
ﻩT[j]、data=temp[j]、data;
ﻩﻩT[j]、length=temp[j]、length;
ﻩ}
}
void re()
{
ﻩint i;
for(i=0;i 7、 ﻩcout〈<setiosflags(ios::right)<〈setw(4)〈<T[i]、data< 8、int tag=0;
for(i=0;i 9、<<"作业太大,无满足条件分区!”< 10、[j]、length]=d[i]、name;
ﻩ T[j]、length++;
ﻩﻩ tag=0;
ﻩﻩ m=j;
ﻩ ﻩ break;
ﻩﻩﻩ}
ﻩﻩﻩelse
ﻩ {
ﻩﻩﻩtag=1;
ﻩ count++;
ﻩ }
ﻩﻩ}
ﻩwhile(tag==1 && count〈zone_num)
{
ﻩﻩfor(j=0;j<m;j++)
{
ﻩ if(d[i]、data<=T[j]、data)
ﻩ ﻩ {
ﻩ ﻩ ﻩT[j]、data=T[j]、data - d[i]、data;
ﻩ ﻩﻩT[j]、a 11、rray[T[j]、length]=d[i]、name;
ﻩﻩﻩﻩﻩT[j]、length++;
ﻩﻩ tag=0;
ﻩ break;
ﻩﻩ}
ﻩﻩﻩﻩelse
ﻩ {
ﻩﻩ ﻩ tag=1;
ﻩ count++;
}
ﻩ ﻩ}
ﻩﻩ}
ﻩﻩif(tag==1 && count==zone_num)
ﻩﻩ{
ﻩ cout〈<"作业太大,无满足条件分区!"〈〈endl;
break;
}
}
ﻩ//re();
}
void best_fit()
{
renew();
cout<<"best 12、 fit:";
int i,j,k,temp,m;
int tag=0,n=0;
ﻩfor(i=0;i〈work_num;i++)
{
ﻩfor(j=0;j 13、k]、data>=d[i]、data)
ﻩﻩﻩ ﻩ{
ﻩﻩ ﻩ ﻩﻩtemp=T[k]、data;
ﻩﻩ ﻩﻩ n=k;
ﻩﻩ ﻩﻩtag1=1;
ﻩ ﻩ }
ﻩﻩﻩﻩﻩ}
ﻩﻩﻩﻩ ﻩelse if(tag1==0)
ﻩﻩ ﻩn=j;
ﻩ ﻩ ﻩ}
ﻩﻩ ﻩﻩT[n]、data=temp - d[i]、data;
ﻩﻩﻩ T[n]、array[T[n]、length]=d[i]、name;
ﻩ ﻩT[n]、length++;
ﻩﻩﻩ ﻩtag=0;
ﻩ break;
ﻩ }
ﻩﻩﻩelse
ﻩﻩﻩtag=1;
14、
}
ﻩﻩif(tag==1)
ﻩﻩ{
ﻩﻩ cout<<”作业太大,无满足条件分区!"〈〈endl;
ﻩ ﻩbreak;
}
}
ﻩ//re();
}
void worst_fit()
{
renew();
cout<〈”worst fit:";
int i,j,k,temp,m;
ﻩint tag=0,n=0;
ﻩfor(i=0;i〈work_num;i++)
ﻩ{
for(j=0;j 15、ﻩﻩ temp=T[j]、data;
m=j;
ﻩﻩﻩﻩfor(k=m+1;k<=zone_num;k++)
ﻩﻩﻩ{
ﻩﻩﻩ if(T[k]、data〉temp)
ﻩﻩ ﻩﻩ{
ﻩﻩﻩﻩﻩ if(T[k]、data>=d[i]、data)
ﻩ ﻩﻩﻩ {
ﻩ ﻩ ﻩﻩtemp=T[k]、data;
ﻩﻩﻩﻩ n=k;
ﻩ ﻩ ﻩﻩﻩtag1=1;
ﻩ }
ﻩﻩ ﻩ}
ﻩ ﻩelse if(tag1==0)
ﻩ n=j;
ﻩﻩﻩﻩﻩ}
ﻩ ﻩ ﻩT[n]、 16、data=temp - d[i]、data;
ﻩ ﻩﻩﻩT[n]、array[T[n]、length]=d[i]、name;
ﻩT[n]、length++;
ﻩ ﻩﻩ tag=0;
ﻩ ﻩﻩ break;
ﻩﻩ}
ﻩﻩelse
tag=1;
ﻩ}
ﻩ if(tag==1)
ﻩ {
cout〈〈”作业太大,无满足条件分区!"〈〈endl;
ﻩ ﻩbreak;
ﻩ}
ﻩ}
//re();
}
void main()
{
ﻩInit();
ﻩfirst_fit();
show();
next_fit();
show();
best_fit();
show();
worst_fit();
ﻩshow();
system("pause");
}
实验截图:
>T[j]、data;
temp[j]、data=T[j]、data;
ﻩT[j]、length=0;
ﻩﻩtemp[j]、length=0;
cout〈〈setw(4)<〈T[j]、data;
}
cout〈






