操作系统实验四动态分区分配算法源代码最新最全.docx

上传人:b****5 文档编号:7963300 上传时间:2023-01-27 格式:DOCX 页数:13 大小:56.87KB
下载 相关 举报
操作系统实验四动态分区分配算法源代码最新最全.docx_第1页
第1页 / 共13页
操作系统实验四动态分区分配算法源代码最新最全.docx_第2页
第2页 / 共13页
操作系统实验四动态分区分配算法源代码最新最全.docx_第3页
第3页 / 共13页
操作系统实验四动态分区分配算法源代码最新最全.docx_第4页
第4页 / 共13页
操作系统实验四动态分区分配算法源代码最新最全.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

操作系统实验四动态分区分配算法源代码最新最全.docx

《操作系统实验四动态分区分配算法源代码最新最全.docx》由会员分享,可在线阅读,更多相关《操作系统实验四动态分区分配算法源代码最新最全.docx(13页珍藏版)》请在冰豆网上搜索。

操作系统实验四动态分区分配算法源代码最新最全.docx

操作系统实验四动态分区分配算法源代码最新最全

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

萨斯的发生的v设计程序模拟四种动态分区分配算法:

首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法的工作过程。

假设内存中空闲分区个数为n,空闲分区大小分别为Pl,…,Pn,在动态分区分配过程中需要分配的进程个数为m(m

区大小分别为Si,…,Sm,分别利用四种动态分区分配算法将m个进

程放入n个空闲分区,给出进程在空闲分区中的分配情况。

程序要求如下:

1)利用首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法四种动态分区分配算法模拟分区分配过程。

2)模拟四种算法的分区分配过程,给出每种算法进程在空闲分区中的分配情况。

3)输入:

空闲分区个数n,空闲分区大小Pi,…,Pn,进程个数m,进程需要的分区大小Si,…,Sm,算法选择1-首次适应算法,2-循环首次适应算法,3-最佳适应算法,4-最坏适应算法。

4)输出:

最终内存空闲分区的分配情况。

代码实现:

#include

#include

#include

usingnamespacestd;

constintMaxNumber=100;

intFreePartition[MaxNumber];//空闲分区大小

intFirstPartition[MaxNumber];//1-首次适应算法

intCycleFirstPartition[MaxNumber];//2-循环首次适应算法

intBestPartition[MaxNumber];//3-最佳适应算法

intWorstPartition[MaxNumber];//4-最坏适应算法

intProcessNeed[MaxNumber];//进程需要的分区大小

intPartitionNum,ProcessNum;

charProcessName[MaxNumber];//进程名

charProcessPartition[MaxNumber];//进程分配的序列

intPartition[MaxNumber];

charstr[MaxNumber][MaxNumber];

voidFirstFit(intn,intm);

voidNextFit(intn,intm);

voidBestFit(intn,intm);

voidWorstFit(intn,intm);

voidPrint(intn,intm);

voidPrint2(intn,intm);

//========================================================

voidFirstFit(intn,intm)

{

cout<<"选择了首次适应算法!

"<

cout<

inti,j,k=0;

for(i=0;i

{

FirstPartition[i]=FreePartition[i];

}

for(j=0;j

{

for(i=0;i

{

if(ProcessNeed[j]<=FirstPartition[i])

{

ProcessPartition[j]=i;

//str[i][k]=ProcessName[j];

FirstPartition[i]=FirstPartition[i]-ProcessNeed[j];break;

}

}

}

Print(n,m);

cout<<"空间序号:

"<<"";

for(i=0;i

cout<

}

cout<

cout<<"分区大小:

"<<"";

for(i=0;i

cout<

:

left)<

}

cout<

cout<<"剩余分区大小:

";

for(i=0;i

cout<<"|"<

:

left)<

}

cout<

Print2(n,m);

}

voidNextFit(intn,intm)

cout<<"选择了循环首次适应算法!

"<

cout<

inti,j,flag=0;

for(i=0;i

CycleFirstPartition[i]=FreePartition[i];

}

for(j=0;j

for(i=flag;i

if(ProcessNeed[j]<=CycleFirstPartition[i])

ProcessPartition[j]=i;

CycleFirstPartition[i]=CycleFirstPartition[i]-ProcessNeed[j];

flag=i+1;

if(i==n-1)

flag=O;

break;

Print(n,m);

cout«"空间序号:

for(i=0;i

{

cout«"|"«setw(m-1)«"空间"«(i+1);

cout«endl;

cout«"分区大小:

"vv"

for(i=0;i

{

cout«"|"«setw(m)«setiosflags(ios:

:

left)«FreePartition[i];

cout«endl;

cout«"剩余分区大小:

";

for(i=0;i

{

cout«"|"«setw(m)«setiosflags(ios:

:

left)«CycleFirstPartition[i];

cout«endl;

Print2(n,m);

voidBestFit(intn,intm)

{

cout«"选择了最佳适应算法!

"«endl;

cout«endl;

intij,flag=O,temp,id=O,flag1=0;

for(i=0;i

{

BestPartition[i]=FreePartition[i];

while(flag1

{

flag=0;

for(i=0;i

Partition[i]=0;

}

for(i=0;i

if(ProcessNeed[flag1]<=BestPartition[i])

Partition[flag]=i;

flag+=1;

}

}

temp=BestPartition[Partition[0]];

id=Partition]。

];

for(i=1;i

if(temp>BestPartition[Partition[i]])

temp=BestPartition[Partition[i]];

id=Partition[i];

}

}

BestPartition[id]=BestPartition[id]-ProcessNeed[flag1];

ProcessPartition[flag1]=id;

flag1+=1;

}

Print(n,m);

cout<<"空间序号:

"<<"";

for(i=0;i

cout<

}

cout<

cout<<"分区大小:

"<<"";

for(i=0;i

cout<<"|"<

:

left)<

}

cout<

cout<<"剩余分区大小:

";

for(i=0;i

cout<<"|"<

:

left)<

}

cout<

Print2(n,m);

voidWorstFit(intn,intm)

cout<<"选择了最坏适应算法!

"<

cout<

inti,j,flag=0,temp,id=0,flag1=0;

for(i=0;i

WorstPartition[i]=FreePartition[i];

}

while(flag1

flag=0;

for(i=0;i

Partition[i]=0;

}

for(i=0;i

if(ProcessNeed[flag1]<=WorstPartition[i])

Partition[flag]=i;

flag+=1;

}

}

temp=WorstPartition[Partition[0]];

id=Partition[0];

for(i=1;i

if(WorstPartition[Partition[i]]>temp)

temp=WorstPartition[Partition[i]];

id=Partition[i];

}

}

WorstPartition[id]=WorstPartition[id]-ProcessNeed[flag1];

ProcessPartition[flag1]=id;

flag1+=1;

}

Print(n,m);

cout<<"空间序号:

"<<"";

for(i=0;i

cout<

}

cout<

cout<<"分区大小:

"<<"";

for(i=0;i

cout<

:

left)<

}

cout<

cout<<"剩余分区大小:

";

for(i=0;i

cout<<"|"<

:

left)<

}

cout<

Print2(n,m);

}

voidchoice(intn,intm)

intintput;

cout<<"\n请选择:

1.首次适应算法2.循环首次适应算法3.最佳适应算法4.最坏适应算

法:

"<

cin>>intput;

cout<

switch(intput)

case1:

FirstFit(n,m);

choice(n,m);

break;

case2:

NextFit(n,m);

choice(n,m);

break;

case3:

BestFit(n,m);

choice(n,m);

break;

case4:

WorstFit(n,m);

choice(n,m);

break;

}

cout<

}

voidPrint(intn,intm)

intj;

cout<<"进程名:

";

for(j=0;j

cout<

:

left)<

}

cout<

cout<<"进程分区大小:

";

for(j=0;j

cout<<"|"<

:

left)<

}

cout<

cout<<"分配结果:

"<

}

voidPrint2(intn,intm)

inti,j;

for(i=0;i

for(j=0;j

str[i][j]=0;

}

}

cout<<"进程分配分区:

";

for(i=0;i

intk=0;

for(j=0;j

if(ProcessPartition[j]==i)

str[i][k]=ProcessName[j];k+=1;

}

for(i=0;i

cout<<"|";

for(j=0;j

cout<

(1)<

}

}

cout<

}

//===============================================================

voidmain()

ifstreamin("yin.txt");

intn,m;

inti,j;

in>>n;

for(i=0;i

in>>FreePartition[i];

}

in>>m;

for(j=0;j

in>>ProcessName[j];

}

for(j=0;j

in>>ProcessNeed[j];

}

choice(n,m);

运行结果:

青选择:

L首次适应算法2-循环首汶适应算法八最佳适应算法4■最坏适应算法:

择了首衩适应算怯,

;A:

B;C;D;E:

F

!

?

18!

9120135:

8

:

空间II空间2:

空间31空间41空间51空间引空间71空间81空间9

!

1€11C191321G4!

32!

6116164

0:

8:

8!

14If:

32:

8I1&!

^4

IAC:

FIIBIDE!

I!

!

请选择;L首次适应算法L循环首次适应算法3.最佳适应算法4一最坏适应算洛

选择了循好苜次适应算洼星

请选择:

「苜次适应算法八循环首次话应算法"最佳适应算法4.最坏适应算法;

单了最在适应耳洼,

请选择|「苜次适应算法2•循环苜次适应算法3,最佳适应算法4•最坏适应算法;

诜择了最坏诂应算注!

进我吾:

ft

id呈芬区大小:

7

分◎噬果,、

9叩芋号:

空间

卜区大小匕!

16

』余力区大小:

!

16

曲程"•配分区”

:

B:

18

1:

空间

16

16

2;空间3;空间

8!

32

;B124

IE:

F

I3S:

H

4:

Z|j]♦三间日;正汇?

ZlT8:

Tj]丫

!

&4:

32

;2B;32

:

ACD:

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 冶金矿山地质

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1