实验四操作系统-动态分区分配算法萨斯的发生的v设计程序模拟四种动态分区分配算法:首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法的工作过程。
假设内存中空闲分区个数为n,空闲分区大小分别为P1, … ,P n,在动态分区分配过程中需要分配的进程个数为m(m≤n),它们需要的分区大小分别为S1, … ,S m,分别利用四种动态分区分配算法将m个进程放入n个空闲分区,给出进程在空闲分区中的分配情况。
程序要求如下:
1)利用首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法四种动态分区分配算法模拟分区分配过程。
2)模拟四种算法的分区分配过程,给出每种算法进程在空闲分区中的分配情况。
3)输入:空闲分区个数n,空闲分区大小P1, …,P n,进程个数m,进程需要的分区大小S1, … ,S m,算法选择1-首次适应算法,2-循环首次适应算法,3-最佳适应算法,4-最坏适应算法。
4)输出:最终内存空闲分区的分配情况。
代码实现:
#include<iostream>
#include<fstream>
#include<iomanip>
using namespace std;
const int MaxNumber=100;
int FreePartition[MaxNumber];次适应算法 2.循环首次适应算法 3.最佳适应算法
4.最坏适应算法:"<<endl;
c in>>intput;
c out<<endl;
s witch(intput)
{
c ase 1:
FirstFit(n,m);
choice(n,m);
break;
c ase 2:
NextFit(n,m);
choice(n,m);
break;
c ase 3:
BestFit(n,m);
choice(n,m);
break;
c ase 4:
WorstFit(n,m);
choice(n,m);
break;
}
c out<<endl;
}
void Print(int n, int m)
{
i nt j;
c out<<"进程名: ";
f or(j=0; j<m; j++ )
{
cout<<"|"<<setw(m)<<setiosflags(ios::left)<<ProcessName[j];
}
c out<<endl;
c out<<"进程分区大小:";
f or(j=0; j<m; j++ )
{
cout<<"|"<<setw(m)<<setiosflags(ios::left)<<ProcessNeed[j];
}
c out<<endl;
c out<<"分配结果:"<<endl;
}
void Print2(int n, int m)
{
i nt i,j;
f or(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
str[i][j] = 0;
}
}
c out<<"进程分配分区:";
f or(i=0; i<n; i++)
{
int k=0;
for(j=0; j<m; j++)
{
if(ProcessPartition[j]==i)
{
str[i][k] = ProcessName[j];
k += 1;
}
}
}
f or(i=0; i<n; i++)
{
cout<<"|";
for(j=0; j<m; j++)
{
cout<<setw(1)<<str[i][j];
}
}
c out<<endl;
}
//===============================================================
void main()
{
i fstream in("");
i nt n,m;
i nt i,j;
i n>>n;
f or(i=0; i<n; i++)
{
in>>FreePartition[i];
}
i n>>m;
f or(j=0; j<m; j++)
{
in>>ProcessName[j];
}
for(j=0; j<m; j++)
{
in>>ProcessNeed[j];
}
c hoice(n,m);
}
运行结果:。