操作系统-实验四动态分区分配算法源代码最全(可编辑)
实验四 操作系统-动态分区分配算法
萨斯的发生的v
程序模拟四种动态分区分配算法:首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法的工作过程。假设内存中空闲分区个数为n,空闲分区大小分别为P1, … ,Pn,在动态分区分配过程中需要分配的进程个数为m(m?n),它们需要的分区大小分别为S1, … ,Sm,分别利用四种动态分区分配算法将m个进程放入n个空闲分区,给出进程在空闲分区中的分配情况。
程序要求如下:
1)利用首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法四种动态分区分配算法模拟分区分配过程。
2)模拟四种算法的分区分配过程,给出每种算法进程在空闲分区中的分配情况。
3)输入:空闲分区个数n,空闲分区大小P1, … ,Pn,进程个数m,进程需要的分区大小S1, … ,Sm,算法选择1-首次适应算法,2-循环首次适应算法,3-最佳适应算法,4-最坏适应算法。
4)输出:最终内存空闲分区的分配情况。
代码实现:
#include
#include
#include
using namespace std;
const int Number100; int FreePartition[Number];//空闲分区大小 int FirstPartition[Number];//1-首次适应算法 int CycleFirstPartition[Number];//2-循环首次适应算法 int BestPartition[Number];//3-最佳适应算法 int WorstPartition[Number];//4-最坏适应算法 int ProcessNeed[Number];//进程需要的分区大小 int PartitionNum,ProcessNum; char ProcessName[Number];//进程名
char ProcessPartition[Number];//进程分配的序列 int Partition[Number]; char str[Number][Number]; void FirstFitint n,int m; void NextFitint n,int m; void BestFitint n,int m; void WorstFitint n,int m; void Printint n, int m; void Print2int n, int m; //
void FirstFitint n, int m cout"选择了首次适应算法!"endl;
coutendl;
int i,j,k0;
fori0; in; i++
FirstPartition[i] FreePartition[i]; forj0; jm; j++
fori0; in; i++
ifProcessNeed[j]FirstPartition[i] ProcessPartition[j]i;
//str[i][k] ProcessName[j];
FirstPartition[i] FirstPartition[i]-ProcessNeed[j];
break;
Printn,m;
cout"空间序号:"" ";
fori0; in; i++
cout"|"setwm-1"空间"i+1;
coutendl;
cout"分区大小:"" ";
fori0; in; i++
cout"|"setwmsetiosflagsios::leftFreePartition[i];
coutendl;
cout"剩余分区大小:";
fori0; in; i++
cout"|"setwmsetiosflagsios::leftFirstPartition[i];
coutendl;
Print2n,m;
void NextFitint n, int m cout"选择了循环首次适应算法!"endl; coutendl;
int i,j,flag0;
fori0; in; i++
CycleFirstPartition[i] FreePartition[i];
forj0; jm; j++
foriflag; in; i++
ifProcessNeed[j]CycleFirstPartition[i]
ProcessPartition[j]i; CycleFirstPartition[i] CycleFirstPartition[i]-ProcessNeed[j];
flag i+1;
ifin-1
flag0;
break;
Printn,m;
cout"空间序号:"" ";
fori0; in; i++
cout"|"setwm-1"空间"i+1;
coutendl;
cout"分区大小:"" ";
fori0; in; i++
cout"|"setwmsetiosflagsios::leftFreePartition[i];
coutendl;
cout"剩余分区大小:";
fori0; in; i++
cout"|"setwmsetiosflagsios::leftCycleFirstPartition[i];
coutendl;
Print2n,m;
void BestFitint n, int m
cout"选择了最佳适应算法!"endl;
coutendl;
int i,j,flag0,temp,id0,flag10; fori0; in; i++
BestPartition[i] FreePartition[i]; whileflag1m
flag 0;
fori0; in; i++
Partition[i]0;
fori0; in; i++
ifProcessNeed[flag1]BestPartition[i] Partition[flag]i;
flag + 1;
temp BestPartition[Partition[0]]; id Partition[0]; fori1;
iflag; i++ iftemp BestPartition[Partition[i]] temp BestPartition[Partition[i]];id Partition[i]; BestPartition[id]BestPartition[id]-ProcessNeed[flag1];
ProcessPartition[flag1]id; flag1 + 1;
Printn,m;
cout"空间序号:"" ";
fori0; in; i++
cout"|"setwm-1"空间"i+1;
coutendl;
cout"分区大小:"" ";
fori0; in; i++
cout"|"setwmsetiosflagsios::leftFreePartition[i]; coutendl;
cout"剩余分区大小:";
fori0; in; i++
cout"|"setwmsetiosflagsios::leftBestPartition[i]; coutendl;
Print2n,m;
void WorstFitint n, int m
cout"选择了最坏适应算法!"endl;
coutendl;
int i,j,flag0,temp,id0,flag10;
fori0; in; i++
WorstPartition[i] FreePartition[i];
whileflag1m
flag 0;
fori0; in; i++
Partition[i]0;
fori0; in; i++
ifProcessNeed[flag1]WorstPartition[i]
Partition[flag]i;
flag + 1;
temp WorstPartition[Partition[0]]; id Partition[0]; fori1;
iflag; i++ ifWorstPartition[Partition[i]] temp temp WorstPartition[Partition[i]];id Partition[i]; WorstPartition[id]WorstPartition[id]-ProcessNeed[flag1];
ProcessPartition[flag1]id; flag1 + 1;
Printn,m;
cout"空间序号:"" ";
fori0; in; i++
cout"|"setwm-1"空间"i+1;
coutendl;
cout"分区大小:"" ";
fori0; in; i++
cout"|"setwmsetiosflagsios::leftFreePartition[i];
coutendl;
cout"剩余分区大小:";
fori0; in; i++
cout"|"setwmsetiosflagsios::leftWorstPartition[i];
coutendl;
Print2n,m;
void choiceint n, int m int intput;
cout"\n请选择:1.首次适应算法 2.循环首次适应算法 3.最佳适应算法 4.
最坏适应算法:"endl;
cinintput;
coutendl;
switchintput
case 1:
FirstFitn,m;
choicen,m;
break;
case 2:
NextFitn,m;
choicen,m;
break;
case 3:
BestFitn,m;
choicen,m;
break;
case 4:
WorstFitn,m; choicen,m;
break;
coutendl;
void Printint n, int m
int j;
cout"进程名:";
forj0; jm; j++ cout"|"setwmsetiosflagsios::leftProcessName[j];
coutendl;
cout"进程分区大小:";
forj0; jm; j++ cout"|"setwmsetiosflagsios::leftProcessNeed[j];
coutendl;
cout"分配结果:"endl;
void Print2int n, int m int i,j;
fori0; in; i++
forj0; jm; j++
str[i][j] 0;
cout"进程分配分区:";
fori0; in; i++
int k0;
forj0; jm; j++
ifProcessPartition[j]i str[i][k] ProcessName[j];
k + 1;
fori0; in; i++
cout"|";
forj0; jm; j++
coutsetw1str[i][j]; coutendl;
//
void main
ifstream in"yin.txt"; int n,m;
int i,j;
inn;
fori0; in; i++ inFreePartition[i]; inm;
forj0; jm; j++ inProcessName[j]; forj0; jm; j++ inProcessNeed[j]; choicen,m;
运行结果: