完整word版实验报告关于请求调页存储管理方式Word文档格式.docx
《完整word版实验报告关于请求调页存储管理方式Word文档格式.docx》由会员分享,可在线阅读,更多相关《完整word版实验报告关于请求调页存储管理方式Word文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
请分别考虑最佳置换算法(OPT)、先进先出(FIFO)算法和最近最久未使用(LRU)算法。
4.作业中指令的访问次序按下述原则生成;
50%的指令是顺序执行的;
25%的指令是均匀分布在前地址部分;
25%的指令均匀分布在后地址部分。
具体的实现办法是:
(1)在[0,319]之间随机选取一条起始执行指令,其序号为m;
(2)顺序执行下一条指令,其序号为m+1条指令;
(3)通过随机数,跳转到前地址部分[0,m-1]中的某条指令处,其序号为m1;
(4)顺序执行下一条指令,即序号为m1+1的指令;
(5)通过随机数,跳转到后地址部分[m1+2,319]中的某条指令处,其序号为m2;
(6)顺序执行下一条指令,则序号为m2+1的指令;
(7)重复跳转到前地址部分,顺序执行,跳转到后地址部分;
顺序执行的过程,直至执行320条指令。
二、实验目的
1.通过模拟实现请求页式存储管理的几种基本页面置换算法,了解虚拟储技术的特点。
2.通过对页面、页表、地址转换和页面置换过程的模拟,加深对请求调页系统的原理和实现过程的理解。
3.掌握虚拟存储请求页式存储管理中几种基本页面置换算法的基本思想和实现过程,并比较它们的效率。
三、设计思想
在进程运行过程中,若其所要访问的页面不在内存需把它们调入内存,但内存已无空闲空间时,为了保证该进程能正常运行,系统必须从内存中调出一页程序或数据,送磁盘的对换区中。
但应将哪个页面调出,所以需要根据一定的算法来确定。
在这一过程中,选择换出页面的算法称为页面置换算法。
一个好的页面置换算法,应具有较低的页面更换频率。
页面置换算法的好坏,将直接影响到系统的性能。
以下分别是实验要求的两个页面置换算法的介绍及设计思想。
(1)先进先出法(FirstInFirstOut):
该算法总是淘汰最先进入内存的页面,既选择在内存中驻留时间最久的页面予以淘汰。
在该算法的模拟过程中,每当页面被置换进入内存时,将置换页面所在的物理块中访问标记设为-1;
并且每执行一次指令,便将物理块的访问标记自动加1,需要置换时将访问标记最大的物理块中的页面置换出去,这样能防止当物理块访问标记出现两个以上相同的值的错误执行,更好地模拟了先进先出法;
(2)最近最久未使用(LeastRecentlyUsed):
该算法以最近的过去作为不久将来的近似,将过去最长一段时间里不曾被使用的页面置换掉。
在该算法的模拟过程中,每当物理块中的页面被访问时(包括原先存在的和后来置换进入的页面),便将其物理块访问标记置为-1。
以后每执行一条指令,便将物理块中各页面的访问标记加1,需置换时访问标记最大的便是将要被置换的。
(3)最佳置换算法(OPT):
发生缺页时,有些页面在内存中,其中有一页见很快被访问(也包含紧接着的下一条指令的那页),而其他页面则可能要到10、100或者1000条指令后才会被访问,每个页面都可以用在该页面首次被访问前所要执行的指令数进行标记。
最佳页面置换算法只是简单地规定:
标记最大的页应该被置换。
如果某页在八百万条指令内不会被使用,另一页在600万条指令内不会被使用,则置换前一个页面,从而把因需要调回这一页发生的缺页推到将来,越远越好。
这个算法唯一的一个问题就是它无法实现。
当缺页发生时,操作系统无法知道各个页面下一次是在什么时候被访问。
虽然这个算法不可能实现,但是最佳页面置换算法可以用于对可实现算法的性能进行衡量比较。
四、程序流程图及数据结构
数据结构:
typedefstructBLOCK//声明一种新类型——物理块类型
{
intpagenum;
//页号
intaccessed;
//访问字段,其值表示多久未被访问
}BLOCK;
intcount;
//程序计数器,用来记录指令的序号
intn;
//缺页计数器,用来记录缺页的次数
staticinttemp[320];
//用来存储320条随机数
BLOCKblock[size];
//定义一大小为4的物理块数组
voidinit();
//程序初始化函数
intfindExist(intcurpage);
//查找物理块中是否有该页面
intfindSpace();
//查找是否有空闲物理块
intfindReplace();
//查找应予置换的页面
voiddisplay();
//显示
voidRandom();
//产生320条随机数,显示并存储到temp[320]
voidpagestring();
//显示调用的页面队列
voidOPT();
//OPT算法
voidLRU();
//LRU算法
voidFIFO();
//FIFO算法
五、程序清单
#include<
iostream.h>
#include<
stdlib.h>
conio.h>
stdio.h>
#definesize4
voidinit()
for(inti=0;
i<
size;
i++)
{
block[i].pagenum=-1;
block[i].accessed=0;
count=n=0;
}
}
intfindExist(intcurpage)//查找物理块中是否有该页面
{
i<
i++)
if(block[i].pagenum==curpage)
returni;
//检测到内存中有该页面,返回block中的位置
return-1;
intfindSpace()//查找是否有空闲物理块
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)//物理块不空
{
printf("
%02d"
block[i].pagenum);
}
cout<
<
endl;
voidRandom()
{intflag=0;
cin>
>
count;
"
******按照要求产生的320个随机数:
*******"
320;
temp[i]=count;
if(flag%2==0)count=++count%320;
//产生50%的顺序执行指令(flag=0或2时顺序执行)
if(flag==1)count=rand()%(count-1);
//产生25%的均匀分布在前地址部分指令
if(flag==3)count=count+1+(rand()%(320-(count+1)));
//产生25%的均匀分布在后地址部分指令
flag=++flag%4;
printf("
%03d"
temp[i]);
if((i+1)%10==0)cout<
voidpagestring()//显示调用的页面队列
temp[i]/10);
//------------最佳置换算法
voidOPT()
intexist,space,position;
intcurpage;
if(i%100==0)getch();
count=temp[i];
curpage=count/10;
exist=findExist(curpage);
if(exist==-1)
space=findSpace();
if(space!
=-1)
{
block[space].pagenum=curpage;
display();
n=n+1;
else
for(intk=0;
k<
k++)
{
for(intj=i;
j<
j++)
{
if(block[k].pagenum!
=temp[j]/10)
{
block[k].accessed=1000;
}//将来不会用,设置为一个很大数
block[k].accessed=j;
break;
}
}