操作系统实验四模拟页面置换算法Word下载.docx
- 文档编号:15751192
- 上传时间:2022-11-15
- 格式:DOCX
- 页数:13
- 大小:436.05KB
操作系统实验四模拟页面置换算法Word下载.docx
《操作系统实验四模拟页面置换算法Word下载.docx》由会员分享,可在线阅读,更多相关《操作系统实验四模拟页面置换算法Word下载.docx(13页珍藏版)》请在冰豆网上搜索。
缺页率=disaffect/total_instruction
命中率=1-disaffect/total_instruction
(4)说明FIFO算法存在的Belady现象。
三、实现:
数据结构
(1)存放页面访问序列的数组:
intAcess_Series[total_instruction];
inttotal_instruction;
//进程总的页面数
(2)用一个结构数组M_Frame[]记录为进程分配的内存页面的使用情况:
structone_frame{//记录为进程分配的内存页面情况;
intpage_No;
//记录页面号
inttime;
//记录页面进入内存时间
intused_time;
//记录页面最近使用时间
};
one_frameM_Frame[frame_num];
intframe_num;
//驻留集大小
(3)本次实验我并没有采用推荐的数据结构——
structone_frame{
intpage_no;
charflag;
};
structone_frameM_Frame[frame_num];
是因为我认为这个数据结构并没有很好地体现出FIFO依据进入内存时间来置换页面、LRU依据最近使用时间来置换页面。
所以我在自己编写程序时用了我自认为最恰当的数据结构,这也是本程序的大胆创新点。
程序流程图
图1父进程流程图
图2子进程pc1流程图
图3子进程pc3流程图
四、运行结果及说明
上述两幅图为驻留集大小为3的情况
上述两幅图为驻留集大小为4的情况
对比不难发现,FIFO算法随着内存页框的增多,缺页率却随之增加,这就是Belady现象;
而LRU算法随着内存页框的增多,缺页率随之下降。
五、源代码
#include<
stdio.h>
sys/types.h>
stdlib.h>
sys/stat.h>
fcntl.h>
error.h>
wait.h>
unistd.h>
iostream>
usingnamespacestd;
intmain(){
inttime1=0,time2=0;
//系统时间
intpage1,page2;
//每次读入一个逻辑页面
intp1=0,p2=0;
//内存页框指针,最大为frame_num
intdiseffect1=0,diseffect2=0;
//缺页次数
floatf;
//缺页率
printf("
PleaseinputthenumberofPageFrames:
\n"
);
scanf("
%d"
&
frame_num);
one_frameM_Frame[frame_num];
PleaseinputthenumberofPages:
total_instruction);
intAccess_series[total_instruction];
for(inti=0;
i<
frame_num;
i++)
M_Frame[i].page_No=-1;
inta=0;
是否随机生成访问页序号?
(1为是)\n"
a);
if(a!
=1){
Pleaseinput%d个数字\n"
total_instruction);
total_instruction;
Access_series[i]);
}
else{//产生随机数,即页面分配情况
Access_series[i]=rand()%total_instruction+1;
intpc1,pc2;
//两个子进程,p1执行FIFO算法,p2执行LRU算法
while((pc1=fork())==-1);
if(pc1==0){
i++){
intflag1=0;
//页面是否已存在于内存中的标志,1表示存在
page1=Access_series[i];
//读入一个逻辑页面
for(intj=0;
j<
p1;
j++){//查找该页面是否已存在于内存中
if(page1==M_Frame[j].page_No){
%d"
Access_series[i]);
%dhavefound!
page1);
M_Frame[j].used_time=time1;
for(intk=0;
k<
k++)
M_Frame[k].page_No);
\n\n"
flag1=1;
break;
if(flag1==0){//若不存在,发生缺页,缺页次数加1
diseffect1++;
if(p1<
frame_num){//若内存页面没有分配满
M_Frame[p1].page_No=page1;
//分配一个空的内存页面
M_Frame[p1].time=time1;
//新进入的页面要注意记录进入时间
M_Frame[p1].used_time=time1;
p1++;
j++)
Access_series[j]);
%ddiseffect!
M_Frame[j].page_No);
else{//内存中没有,内存又满了,只能使用FIFO算法淘汰内存中最先进入的页面
intmin=999,pos=0;
//找到内存中最先进入的页面,其占用的内存页面号为pos
j++){
if(M_Frame[j].time<
min){
min=M_Frame[j].time;
pos=j;
inttemp1=M_Frame[pos].page_No;
M_Frame[pos].page_No=page1;
//将所读的页面调入
M_Frame[pos].time=time1;
M_Frame[pos].used_time=time1;
lose%d\n"
page1,temp1);
time1++;
//系统时间增加
//cout<
<
"
i"
"
i;
f=diseffect1/(total_instruction*1.0);
//计算缺页率
diseffectrateofFIFO%f\n\n\n"
f);
exit(0);
wait(0);
while((pc2=fork())==-1);
if(pc2==0){
intflag2=0;
page2=Access_series[i];
j<
p2;
j++){//首先在内存中查找
if(page2==M_Frame[j].page_No){
page2);
M_Frame[j].used_time=time2;
//用到的页面要注意记录最后一次使用时间
k<
k++)
flag2=1;
if(flag2==0){//没有找到,发生缺页
diseffect2++;
if(p2<
frame_num)//内存页面还没有分配完
{
M_Frame[p2].page_No=page2;
M_Frame[p2].time=time2;
M_Frame[p2].used_time=time2;
p2++;
\n"
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验 模拟 页面 置换 算法