模拟操作系统的页面置换实验报告模板文档格式.docx
《模拟操作系统的页面置换实验报告模板文档格式.docx》由会员分享,可在线阅读,更多相关《模拟操作系统的页面置换实验报告模板文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
![模拟操作系统的页面置换实验报告模板文档格式.docx](https://file1.bdocx.com/fileroot1/2022-12/14/9b580e24-3587-4197-8e8a-008909fe37c6/9b580e24-3587-4197-8e8a-008909fe37c61.gif)
范围内,则设置dn+1为1到dn范围内一个随机数。
如果a落在769到1024
范围内,则设置dn+1为dn到32767范围内一个随机数。
例如:
srand();
初始化一个随机函数。
a[0]=10*rand()/32767*255+1;
a[1]=10*rand()/32767*a[0]…语句可用来
产生a[0]与a[1]中的随机数。
或采用以下方式:
(1)通过随机数产生一个指令序列,共320条指令。
指令的
地址按下述原则生成:
A:
50%的指令是顺序执行的
B:
25%的指令是均匀分布在前地址部分
C:
25%的指令是均匀分布在后地址部分
具体的实施方法是:
在[0,319]的指令地址之间随机选取一起点m
顺序执行一条指令,即执行地址为m+1的指令
在前地址[0,m+1]中随机选取一条指令并执行,该指令的地址为m'
D:
顺序执行一条指令,其地址为m'
+1
E:
在后地址[m'
+2,319]中随机选取一条指令并执行
F:
重复步骤A-E,直到320次指令
(2)将指令序列变换为页地址流
设:
页面大小为1K;
用户内存容量4页到32页;
用户虚存容量为32K。
在用户虚存中,按每K存放10条指令排列虚存地址,即320条指令在虚存中的
存放方式为:
第0条-第9条指令为第0页(对应虚存地址为[0,9])
第10条-第19条指令为第1页(对应虚存地址为[10,19])
第310条-第319条指令为第31页(对应虚存地址为[310,319])
按以上方式,用户指令可组成32页。
4、页面大小的取值范围为1K,2K,4K,8K,16K。
按照页面大小将指令
地址转化为页号。
对于相邻相同的页号,合并为一个。
四、实验设计
1.产生访问页面的序列,保存在数组queue中
2.FIFO(先进先出)算法
数组queue_f表示物理内存中的内容
As为页面置换计数器
图1
3.LRU(最近最久未使用)算法
数组queue_f表示物理内存中的内容
数组queue_t与queue_f对应为其进入内存未使用的时间标志
As为页面置换计数器
图2
4.Opt算法
数组queue_t与queue_f对应为其后续页面访问序列出现的第一位置
五、实验实现
voidCMyDlg:
:
OnFIFO()
{
CStringstr1="
"
;
CStringstr2="
intb;
intm=0;
intas=0;
//置换页面计数
boolx;
//页面是否需要置换
if(m_capm<
count)//分配的页面数少于所需要访问的页面数
{
m_list.ResetContent();
UpdateData(0);
for(inti=0;
i<
count;
i++)
{
str1="
str2="
x=true;
for(intk=0;
k<
m_capm;
k++)
{
if(queue[i]==queue_f[k])
{
x=false;
//判断物理块中是不是有跟当前须替换的页面
break;
}
}//如果没有且无空闲的页面,则需要置换
if(x)
inta;
a=(i-m)%m_capm;
queue_f[a]=queue[i];
as++;
}
else
m++;
intmm;
if(m<
m_capm)mm=m;
elsemm=m_capm;
for(intj=0;
j<
mm;
j++)
b=queue_f[j];
str2.Format("
%d"
b);
str1=str1+"
"
+str2;
m_list.InsertString(-1,str1);
}
m_zhihuanshu=as;
m_zhihuanlv=(double)as/count;
if((as-m_capm)<
=0)
{
m_queyeshu=0;
m_queyelv=0;
else
m_queyeshu=as-m_capm;
m_queyelv=(double)(as-m_capm)/count;
}
else
MessageBox("
页面总数小于物理块,不需要进行交换操作!
);
}
OnLRU()
inta,b;
intm=0;
{
queue_t[k]=0;
for(intj=0;
j++)
{
if(j!
=k)
queue_t[j]++;
//使物理块中的每个未使用页面的时间增一
}
m++;
if(x)
{
intc=0,d;
if((i-m)<
m_capm)
a=i-m;
}//当前物理页面未填满时直接装入
else
d=queue_t[0];
for(inth=0;
h<
h++)
if(d<
queue_t[h])
{
d=queue_t[h];
c=h;
}
a=c;
//找出物理块中最久未使用的页面号
//将其替换
queue_t[a]=0;
for(k=0;
if(k!
=a)
queue_t[k]++;
//使物理块中的每个未改变页面的时间增一
m_list.InsertString(-1,str1);
Onopt()
intopu;
//当前占有的页面数
opu=0;
//判断物理块中是不是有跟当前须替换的页面
if((x)&
&
(opu<
m_capm))//还有空位
queue_f[opu]=queue[i];
opu++;
(opu==m_capm))
{//找最晚出现的页面号
for(intnumber=0;
number<
number++)
for(intnum=i;
num<
num++)
if(queue_f[number]==queue[i])
queue_t[number]=i;
if(num==count)
queue_t[number]=count;
}
intlast=0;
for(number=0;
if(queue_t[number]>
last)
last=number;
queue_f[last]=queue[i];
m_capm)mm=opu;
formqueue()
{
UpdateData
(1);
cap=32/m_cap;
intcap1=m_cap*1024;
count=0;
intm;
inta;
intdn=10000;
srand(time(0));
for(inti=0;
256;
{
a=1+rand()%1024;
if(a<
513)
dn=dn+1;
if((a>
512)&
(a<
769))
dn=1+rand()%dn;
768)&
1025))
inttem=32767-dn;
dn=dn+rand()%tem;
UpdateData
(1);
m=dn/cap1;
if(i==0)queue[0]=m;
if((m!
=queue[count])&
(i>
0))
count++;
queue[count]=m;
queue_f=newint[m_capm];
queue_t=newint[m_capm];
intbb=0;
intii=0;
for(intn=0;
n<
n++)
b=queue[n];
str2.Format("
str1=str1+"
if(bb==5)
str1="
bb=0;
bb++;
实验平台:
WINDOWS操作系统、VISAULC++6.0。
六、结果及结果分析
七、实验心得
通过此次实验,加深了对操作系统的认识,了解了操作系统中各种资源分配算法的实现,特别是对虚拟存储,页面置换有了深入的了解,并能够用高级语言进行模拟演示有如下几点体会:
1.两种页面置换算法FIFO,LRU和OPT理解起来相当容易,但在实际编程实现的时候需要注意各种细节,需要耐心细致,实际编程中遇到一些细节上的小问题确实需要仔细考虑才行。
2.因为需要用户输入后才能知道实际内存块和最大页面数的大小,在LRU算法中时间权值数组queue_t是关键,必须与页面变化同步。
七、参考文献
《操作系统教程》(第三版)作者:
孙钟秀高等教育出版社
《C++程序设计语言》主编:
揣锦华西安电子科技出版社
《VisualC++实训教程》主编:
朱家义张同光机械工业出版社