您的当前位置:首页正文

操作系统实验四实验报告动态分区分配算法

来源:个人技术集锦
操纵系统实验四之马矢奏春创作

【实验题目】:动态分区分配算法 【实验学时】:4学时 【实验目的】

通过这次实验,加深对动态分区分配算法的理解,进一步掌握首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法的实现方法。 【实验内容及要求】 问题描述:

设计程序模拟四种动态分区分配算法:首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法的工作过程。假设内存中空闲分区个数为n,空闲分区大小分别为P1, … ,Pn,在动态分区分配过程中需要分配的进程个数为m(m≤n),它们需要的分区大小分别为S1, … ,Sm,分别利用四种动态分区分配算法将m个进程放入n个空闲分区,给出进程在空闲分区中的分配情况。 程序要求:

1)利用首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法四种动态分区分配算法模拟分区分配过程。 2)模拟四种算法的分区分配过程,给出每种算法进程在空闲分区中的分配情况。

3)输入:空闲分区个数n,空闲分区大小P1, … ,Pn,进程个数m,进程需要的分区大小S1, … ,Sm。

4)输出:首次适应算法,循环首次适应算法,最佳适应算法,最坏适应算法,最终内存空闲分区的分配情况。 实现源代码: #include #include #include #include #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\"); int i,j; char ch; inf>>work_num;

cout<<\"作业数:\"<>zone_num;

cout<<\"空闲分区数:\"<inf.get(ch); d[j].name=ch;

cout<cout<cout<<\"作业大小:\"; for(i=0;iinf>>d[i].data;

cout<cout<cout<<\"空闲分区:\"; for(j=0;jinf>>T[j].data;

temp[j].data=T[j].data; T[j].length=0; temp[j].length=0;

cout<cout<void renew() { int j;

for(j=0;jT[j].data=temp[j].data; T[j].length=temp[j].length; }

}

void re() { int i;

for(i=0;iT[i].array[T[i].length]='#'; } }

void show() {

int i,j; re();

for(i=0;iif(T[i].data==temp[i].data) cout<cout<for(j=0;j{

if(T[i].array[j]=='#') break; else

cout<cout<void first_fit() {

renew();

cout<<\"fist fit:\"; int i,j; int tag=0;

for(i=0;ifor(j=0;jif(d[i].data<=T[j].data) {

T[j].data=T[j].data - d[i].data; T[j].array[T[j].length]=d[i].name; T[j].length++; tag=0; break; } else tag=1; }

if(tag==1) {

cout<<\"作业太大,无满足条件分区!break; } } //re(); }

void next_fit() {

renew();

cout<<\"next fit:int i,j;

\"<for(j=m;jif(d[i].data<=T[j].data) {

T[j].data=T[j].data - d[i].data; T[j].array[T[j].length]=d[i].name; T[j].length++; tag=0; m=j; break; } else { tag=1; count++; } }

while(tag==1 && countfor(j=0;jif(d[i].data<=T[j].data) {

T[j].data=T[j].data - d[i].data; T[j].array[T[j].length]=d[i].name; T[j].length++; tag=0; break; } else { tag=1; count++; } } }

if(tag==1 && count==zone_num) {

cout<<\"作业太大,无满足条件分区!\"<} //re(); }

void best_fit() {

renew();

cout<<\"best fit:\"; int i,j,k,temp,m; int tag=0,n=0;

for(i=0;ifor(j=0;jif(d[i].data<=T[j].data) {

temp=T[j].data; m=j; int tag1=0;

for(k=m+1;k<=zone_num;k++) {

if(T[k].dataif(T[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; }

if(tag==1) {

cout<<\"作业太大,无满足条件分区!\"<break; } } //re(); }

void worst_fit() {

renew();

cout<<\"worst fit:\"; int i,j,k,temp,m; int tag=0,n=0;

for(i=0;ifor(j=0;jif(d[i].data<=T[j].data) {

int tag1=0; 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].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<<\"作业太大,无满足条件分区!\"<void main() { Init(); first_fit(); show(); next_fit(); show(); best_fit(); show(); worst_fit(); show();

system(\"pause\"); }

实验截图:

因篇幅问题不能全部显示,请点此查看更多更全内容