磁盘调度算法模拟内存管理和分配算法模拟Word格式文档下载.docx
- 文档编号:20778845
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:32
- 大小:145.67KB
磁盘调度算法模拟内存管理和分配算法模拟Word格式文档下载.docx
《磁盘调度算法模拟内存管理和分配算法模拟Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《磁盘调度算法模拟内存管理和分配算法模拟Word格式文档下载.docx(32页珍藏版)》请在冰豆网上搜索。
置换次数/页面总数求得。
四、编程工具:
MicrosoftVisualStudio2010
语言:
C++
五、编程实现:
//////////////////////////////
//内存管理和分配算法模拟实验//
#include<
iostream>
usingstd:
:
cout;
cin;
endl;
intpage[20]={7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1};
//在以下代码中s[]代表物理块用数组,count用来记录缺页次数
//下面为算法的实现:
//以下代码为物理块数为3:
//最佳置换算法(3)
doubleOptimal_3()
{
ints[3]={-1,-1,-1};
intcount=0;
intflag1,flag2,flag3,index;
//首先将页装入内存,将物理块装满,并遍历输出
for(inti=0;
i<
3;
i++)
{
s[i]=page[i];
cout<
<
"
第"
i+1<
次:
for(intj=0;
j<
j++)
{
cout<
s[j]<
"
;
}
}
//此后进程访问页面时将会产生缺页中断
for(inti=3;
i<
20;
i++)
<
i+1<
//判断判断页面是否已经在内存中
if(s[0]==page[i]||s[1]==page[i]||s[2]==page[i])
gotoM;
else
count++;
flag1=flag2=flag3=0;
index=-1;
//如果没有在内存中,按照最佳置换算法规则判断哪个页面应该被置换出来
for(intj=i;
j<
j++)
{
if(s[0]==page[j])
{
if(flag1!
=0)
{
gotoL;
}
flag1=1;
index=0;
}
elseif(s[1]==page[j])
if(flag2!
flag2=1;
index=1;
elseif(s[2]==page[j])
if(flag3!
flag3=1;
index=2;
L:
continue;
}
if(flag1==0)
index=0;
elseif(flag2==0)
index=1;
elseif(flag3==0)
index=2;
s[index]=page[i];
M:
for(intk=0;
k<
3;
k++)
s[k]<
cout<
缺页数:
count<
doubleresult;
result=double(count)/20.0;
缺页率:
result<
returnresult;
}
//先进先出算法(3)
doubleFIFO_3()
ints[3]={-1,-1,-1};
inti,j,k=0;
for(i=0;
s[i]=page[i];
for(j=0;
for(i=3;
if(page[i]==s[0]||page[i]==s[1]||page[i]==s[2])
gotoM;
//如果没有在内存中,按照先进先出算法规则判断哪个页面应该被置换出来
else
count++;
s[k]=page[i];
k++;
if(k==3)
k=0;
M:
for(intm=0;
m<
m++)
s[m]<
continue;
result=double(count)/20.0;
//最近最久未使用算法(3)
doubleLRU_3()
ints[3]={-1,-1,-1};
inti,j,flag1,flag2,flag3,index;
(i+1)<
if(s[0]==page[i]||s[1]==page[i]||s[2]==page[i])
gotoL;
else
flag1=flag2=flag3=0;
index=-1;
//如果没有在内存中,按照最近最久未使用算法规则判断哪个页面应该被置换出来
for(j=i-1;
j>
=0;
j--)
if((flag1*flag2*flag3)!
gotoN;
if(s[0]==page[j])
if(flag1!
flag1=1;
index=0;
elseif(s[1]==page[j])
if(flag2!
flag2=1;
index=1;
elseif(s[2]==page[j])
if(flag3!
flag3=1;
index=2;
N:
s[index]=page[i];
L:
//以下代码为物理块数为4(原理与物理块数为3相同):
//最佳置换算法(4)
doubleOptimal_4()
ints[4]={-1,-1,-1,-1};
inti,j,k,flag1,flag2,flag3,flag4,index;
4;
for(i=5;
if(s[0]==page[i]||s[1]==page[i]||s[2]==page[i]||s[3]==page[i])
flag1=flag2=flag3=flag4=0;
for(j=i;
elseif(s[3]==page[j])
if(flag4!
flag4=1;
index=3;
if(flag1==0)
elseif(flag2==0)
elseif(flag3==0)
elseif(flag4==0)
for(k=0;
s[k]<
//先进先出算法(4)
doubleFIFO_4()
ints[4]={-1,-1,-1,-1};
i+1<
if(page[i]==s[0]||page[i]==s[1]||page[i]==s[2]||page[i]==s[3])
if(k==4)
//最近最久未使用算法(4)
doubleLRU_4()
inti,j,flag1,flag2,flag3,flag4,index;
if(s[0]==page[i]||s[1]==page[i]||s[2]==page[i]||s[3]==page[i])
if((flag1*flag2*flag3*flag4)!
s[m]<
intmain()
{
intn;
doublea1,b1,c1;
doublea2,b2,c2;
p:
*************************"
*请选择物理块个数:
*"
*1:
物理块个数为3*"
*2:
物理块个数为4*"
cin>
>
n;
//判断物理块个数是3还是4,并比较缺页率最低的算法输出
if(n==1)
最佳置换算法:
a1=Optimal_3();
先进先出算法:
b1=FIFO_3();
最近最久未使用算法:
c1=LRU_3();
缺页率最低的算法为:
if(a1>
=b1)
if(b1>
c1)
cout<
最近最久未使用算法"
elseif(b1<
先进先出算法"
elseif(b1==c1)
elseif(a1<
b1)
if(a1>
elseif(a1<
最佳置换算法"
elseif(a1==c1)
if(a1<
elseif(a1>
elseif(n==2)
a2=Optimal_4();
b2=FIFO_4();
c2=LRU_4();
if(a2>
=b2)
if(b2>
c2)
elseif(b2<
elseif(b2==c2)
elseif(a2<
b2)
if(a2>
elseif(a2<
elseif(a2==c2)
if(a2<
elseif(a2>
输入错误,请重新输入!
gotop;
system("
pause"
);
return0;
六、使用说明:
1、双击运行Debug文件夹下的suanfa.exe
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 磁盘 调度 算法 模拟 内存 管理 分配