实验四 动态分区分配算法
目录
1、需求分析
说明程序设计的任务和目的,明确规定下述内容:
(1) 输入的形式和输入值的范围;
#dene MAXNUMBER 100
static int PartitionNum; //内存中空闲分区的个数
static int FreePartition[MAXNUMBER]; //空闲分区对应的内存
static int ProcessNum; //进程个数
static char ProcessName[MAXNUMBER];//进程名字
static int ProcessNeed[MAXNUMBER]; //进程大小
static char NameProcessToPartition[MAXNUMBER][MAXNUMBER];//各个进程所
在分区位置
static int LeftFreePartition[MAXNUMBER];
static int LeftProcessNeed[MAXNUMBER];
(2) 输出的形式;
FF
ProcessName A B C D E
ProcessNeed
PartitionNum
FreePartition
LeftFreePartition
A:
B:
C:
D:
E:
(3) 程序所能达到的功能;
(4) 测试数据,包括正确的输入及其输出结果和含有错误的输入及其输出结果。
FF
ProcessName A B C D E
ProcessNeed 7 5 18 22 46
PartitionNum P1 P2 P3 P4 P5
FreePartition 32 16 64 64 16
LeftFreePartition 2 16 42 18 16
A:P1
B:P1
C:P1
D:P3
E:P4
NF
ProcessName A B C D E
ProcessNeed 7 5 18 22 46
PartitionNum P1 P2 P3 P4 P5
FreePartition 32 16 64 64 16
LeftFreePartition 25 11 0 42 16
A:P1
B:P2
C:P3
D:P3
E:P4
BF
ProcessName A B C D E
ProcessNeed 7 5 18 22 46
PartitionNum P1 P2 P3 P4 P5
FreePartition 32 16 64 64 16
LeftFreePartition 14 4 42 18 16
A:P1
B:P2
C:P2
D:P3
E:P4
WF
ProcessName A B C D E
ProcessNeed 7 5 18 22 46
PartitionNum P1 P2 P3 P4 P5
FreePartition 32 16 64 64 16
LeftFreePartition 32 16 35 41 16
A:P3
D:P3
B:P4
C:P4
E: Fail to Partition
2、概要设计
说明本程序中用到的所有抽象数据类型的定义、主程序的流程以及
各程序模块之间的层次(调用)关系。
void Enter();//输入分区数和大小、资源数和大小
void initial();//初始化供 4 个算法使用
void display();//显示分区结果
void FirstFit();//首次适应算法 FF
void NextFit();//循环首次适应算法 NF
void BestFit();//最佳适应算法 BF
void WorstFit();//最坏适应算法 WF
3、详细设计
实现程序模块的具体算法。
//输入分区数和大小、资源数和大小
void Enter(){
int i;
cout<<"Enter PartitionNum: ";
cin>>PartitionNum;
cout<<"Enter FreePartition: ";
for (i=0;i<PartitionNum;i++){
cin>>FreePartition[i];
}
cout<<"Enter ProcessNum: ";
cin>>ProcessNum;
for (i=0;i<ProcessNum;i++){
ProcessName[i]=i+65;
}
cout<<"Enter ProcessNeed: ";
for (i=0;i<ProcessNum;i++){
cin>>ProcessNeed[i];
}
}
//初始化供 4 个算法使用
void initial(){
int i,j;
for (i=0;i<ProcessNum;i++){
for (j=0;j<PartitionNum;j++){
NameProcessToPartition[i][j] =NULL;
LeftFreePartition[j] = FreePartition[j];
}
}
for (i=0;i<ProcessNum;i++){
LeftProcessNeed[i] = ProcessNeed[i];
}
}
//显示分区结果
void display(){
int i;
cout<<"ProcessName: "<<"\t\t";
for (i=0;i<ProcessNum;i++){
cout<<ProcessName[i]<<"\t";
}
cout<<endl;
cout<<"ProcessNeed: "<<"\t\t";
for (i=0;i<ProcessNum;i++){
cout<<ProcessNeed[i]<<"\t";
}
cout<<endl;
cout<<"PartitionNum: "<<"\t\t";
for (i=0;i<PartitionNum;i++){
cout<<"P"<<i+1<<"\t";
}
cout<<endl<<"FreePartition: "<<"\t\t";
for (i=0;i<PartitionNum;i++){
cout<<FreePartition[i]<<"\t";
}
cout<<endl<<"LeftFreePartition: "<<"\t";
for (i=0;i<PartitionNum;i++){