OShomework8Word格式文档下载.docx
《OShomework8Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《OShomework8Word格式文档下载.docx(26页珍藏版)》请在冰豆网上搜索。
Opt算法过程缺页次数和缺页率:
lru算法页面调入跳出过程,缺页次数和缺页率:
fifo算法过程缺页次数和缺页率:
代码如下:
#include<
stdlib.h>
stdio.h>
#definepagesize8//页面尺寸大小
typedefstructBLOCK//声明一种新类型--物理块类型
{
intpagenum;
//页号
intaccessed;
//访问量,其值表示多久未被访问
}BLOCK;
intpc;
//程序计数器,用来记录对应的页号
intn;
//缺页计数器,用来记录缺页的次数
staticintnum[320];
//用来存储320条随机数
BLOCKblock[pagesize];
//定义一大小为8的物理块数组
voidinit();
//程序初始化函数
intfindExist(intcurpage);
//查找物理块中是否有该页面
intfindSpace();
//查找是否有空闲物理块
intfindReplace();
//查找应予置换的页面
voiddisplay();
//显示
voidrandam();
//产生320条随机数,显示并存储到num[320]
voidpagestring();
//显示调用的页面队列
voidOPT();
voidLRU();
voidFIFO();
voidmain()
intselect;
printf("
请输入第一个随机数(0~320):
"
);
randam();
*****对应的调用页面队列*******\n"
pagestring();
do
{
****************************************\n"
------1:
OPT2:
LRU3:
FIFO4:
退出-----\n"
请选择一种页面置换算法:
scanf("
%d"
&
select);
*******************************\n"
init();
switch(select)
{
case1:
最佳置换算法OPT:
\n"
*****************\n"
OPT();
break;
case2:
最近最久未使用置换算法LRU:
printf("
*************************\n*"
LRU();
break;
case3:
先进先出置换算法FIFO:
*********************\n"
FIFO();
}
}while(select!
=4);
}
voidinit()
{
inti;
for(i=0;
i<
pagesize;
i++)
block[i].pagenum=-1;
block[i].accessed=0;
pc=n=0;
intfindExist(intcurpage)
i<
i++)
if(block[i].pagenum==curpage)
returni;
//检测到内存中有该页面,返回block中的位置
return-1;
intfindSpace()///寻找空闲空间
i++)
if(block[i].pagenum==-1)
//找到空闲的block,返回block中的位置
}
intfindReplace()
intpos=0;
if(block[i].accessed>
block[pos].accessed)
pos=i;
//找到应该置换页面,返回BLOCK中位置
returnpos;
voiddisplay()
if(block[i].pagenum!
=-1)
%02d"
block[i].pagenum);
voidrandam()
intflag=0;
pc);
******按照要求产生的320个随机数:
*******\n"
320;
num[i]=pc;
if(flag%2==0)
pc=++pc%320;
if(flag==1)
pc=rand()%(pc-1);
if(flag==3)
pc=pc+1+(rand()%(320-(pc+1)));
flag=++flag%4;
%03d"
num[i]);
if((i+1)%10==0)
voidpagestring()//显示调用的页面队列,页面号取法为随机数除10取整
num[i]/10);
voidOPT()//最佳替换算法
intexist,space,position;
intcurpage;
inti,j,k;
pc=num[i];
curpage=pc/10;
exist=findExist(curpage);
if(exist==-1)
space=findSpace();
if(space!
=-1)
block[space].pagenum=curpage;
display();
n=n+1;
else
for(k=0;
k<
k++)
{
for(j=i;
j<
j++)
if(block[k].pagenum!
=num[j]/10)
{
block[k].accessed=1000;
}//将来不会用,设置为一个很大数
else
{
block[k].accessed=j;
break;
}
}
position=findReplace();
block[position].pagenum=curpage;
n++;
缺页次数:
%d\n"
n);
缺页率:
%f%%\n"
(n/320.0)*100);
voidLRU()//最近最久未使用算法
intexist,space,position;
intcurpage,i,j;
exist=findExist(curpage);
space=findSpace();
if(space!
block[space].pagenum=curpage;
else
block[exist].accessed=-1;
//恢复存在的并刚访问过的BLOCK中页面accessed为-1
for(j=0;
j<
j++)
block[j].accessed++;
voidFIFO()//先进先出算法
//转换为页面号
//查找物理块中是否有该页面,没有的话,置为-1
//查找是否有空的物理块,没有的话,置为-1;
有的话,把位置返回
//没有空闲物理块,进行置换
block[position].accessed--;
j++)//把所有在页面里的页面号的访问次数加1