山东大学操作系统实验七文档格式.docx
- 文档编号:3610667
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:17
- 大小:135.60KB
山东大学操作系统实验七文档格式.docx
《山东大学操作系统实验七文档格式.docx》由会员分享,可在线阅读,更多相关《山东大学操作系统实验七文档格式.docx(17页珍藏版)》请在冰点文库上搜索。
LRU算法和FIFO算法
2.能对两种算法给定任意序列不同的页面引用串和任意帧实内存块数的组合测试,显示页置换的过程。
3.能统计和报告不同置换算法情况下依次淘汰的页号、缺页次数(页错误数)和缺页率。
比较两种置换算法在给定条件下的优劣。
4.为了能方便的扩充页面置换算法,更好的描述置换过程,示例实验程序采用了C++语言用Replace类描述了置换算法及其属性。
2.调试过程:
1)建立vmrp.cc程序,将代码写到程序中;
2)再建立以下名为vmrp.h的C语言头文件:
#include<
iostream>
iomanip>
malloc.h>
usingnamespacestd;
classReplace{
public:
Replace();
~Replace();
voidInitSpace(char*MethodName);
//初始化页号记录
voidReport(void);
//报告算法执行情况
voidFifo(void);
//先进先出算法
voidLru(void);
//最近最旧未用算法
voidClock(void);
//时钟(二次机会)置换算法
voidEclock(void);
//增强二次机会置换算法
voidLfu(void);
//最不经常使用置换算法
voidMfu(void);
//最经常使用置换算法
private:
int*ReferencePage;
//存放要访问到的页号
int*EliminatePage;
//存放淘汰页号
int*PageFrames;
//存放当前正在实存中的页号
intPageNumber;
//访问页数
intFrameNumber;
//实存帧数
intFaultNumber;
//失败页数
int*Referencebit;
//引用位
int*count;
int*Modifybit;
//修改位
};
3)建立以下项目管理文件Makefile
head=vmrp.h
srcs=vmrp.cc
objs=vmrp.o
opts=-w-g-c
all:
vmrp
vmrp:
$(objs)
g++$(objs)-ovmrp
vmrp.o:
$(srcs)$(head)
g++$(opts)$(srcs)
clean:
rmvmrp*.o
4)输入make命令编译连接生成可执行的vmrp程序
$gmake
g++-g-cvmrp.ccvmrp.h
g++vmrp.o-ovmrp
5)执行程序
实验代码:
#include"
vmrp.h"
Replace:
:
Replace(){
inti;
//设定总得访问页数,并分配相应的引用页号和淘汰页号记录数组空间
cout<
<
"
Pleaseinputpagenumbers:
"
;
cin>
>
PageNumber;
//存放要访问到的页号
ReferencePage=newint[sizeof(int)*PageNumber];
//访问页数
EliminatePage=newint[sizeof(int)*PageNumber];
//存放淘汰页号
Pleaseinputreferencepagestring:
;
for(i=0;
i<
i++)
ReferencePage[i];
Pleaseinputpageframes:
FrameNumber;
//实存帧数
PageFrames=newint[sizeof(int)*FrameNumber];
//存放当前正在实存中的页号
Referencebit=newint[sizeof(int)*FrameNumber];
count=newint[sizeof(int)*FrameNumber];
Modifybit=newint[sizeof(int)*FrameNumber];
}
~Replace(){
voidReplace:
InitSpace(char*MethodName)
{
endl<
MethodName<
endl;
FaultNumber=0;
//失败页数
//引用还未开始,-1表示无引用页
EliminatePage[i]=-1;
//淘汰页号初始都设为-1
for(i=0;
i++){
PageFrames[i]=-1;
Referencebit[i]=0;
//未被使用引用位设置为0
count[i]=0;
//计数
Modifybit[i]=0;
//修改位初始为0
}
//分析统计选择的算法对于当前输入的页面走向的性能
Report(void){
//报告淘汰页顺序
Eliminatepage:
for(inti=0;
EliminatePage[i]!
=-1;
i++)cout<
EliminatePage[i]<
//报告缺页数和缺页率
Numberofpagefaults="
<
FaultNumber<
setw(6)<
setprecision(3);
Rateofpagefaults="
100*(float)FaultNumber/(float)PageNumber<
%"
//最近最旧未用置换算法
Lru(void)
inti,j,k,l,next;
InitSpace("
LRU"
);
//初始化页号记录
//循环装入引用页
for(k=0,l=0;
k<
k++){//l为淘汰页的标记
next=ReferencePage[k];
//检测引用页当前是否已在实存
for(i=0;
i<
if(next==PageFrames[i]){//与当前正在实存中的页号比较
//引用页已在实存将其调整到页记录栈顶
next=PageFrames[i];
for(j=i;
j>
0;
j--)PageFrames[j]=PageFrames[j-1];
PageFrames[0]=next;
break;
if(PageFrames[0]==next){
//如果引用页已放栈顶,则为不缺页,报告当前内存页号
for(j=0;
j<
j++)
if(PageFrames[j]>
=0)cout<
PageFrames[j]<
continue;
//继续装入下一页
else
//如果引用页还未放栈顶,则为缺页,缺页数加1
FaultNumber++;
//栈底页号记入淘汰页数组中
EliminatePage[l]=PageFrames[FrameNumber-1];
//向下压栈
for(j=FrameNumber-1;
j--)PageFrames[j]=PageFrames[j-1];
PageFrames[0]=next;
//引用页放栈顶
//报告当前实存中页号
//报告当前淘汰的页号
if(EliminatePage[l]>
=0)
->
EliminatePage[l++]<
//分析统计选择的算法对于当前引用的页面走向的性能
Report();
//先进先出置换算法
Fifo(void){
FIFO"
for(k=0,j=l=0;
k++){
//如果引用页已在实存中,报告实存页号
i++)if(next==PageFrames[i])break;
if(i<
FrameNumber){
for(i=0;
PageFrames[i]<
//继续引用下一页
//引用页不在实存中,缺页数加1
//最先入页号记入淘汰页数组
EliminatePage[l]=PageFrames[j];
PageFrames[j]=next;
//引用页号放最先入页号处
j=(j+1)%FrameNumber;
//最先入页号循环下移
//报告当前实存页号和淘汰页号
if(PageFrames[i]>
//时钟(二次机会)置换算法
Clock(void)
intj,i,k,l,next;
Clock"
if(next==PageFrames[i]){
Referencebit[i]=1;
//引用位设置为1
break;
continue;
if(Referencebit[j]==1){//如果引用位为1
Referencebit[j]==0;
//在判断之后,重新设置成0
//引用页号放最先入页号处
Referencebit[j]=1;
//缺页数加1
j=(j+1)%FrameNumber;
}
//增强二次机会置换算法
Eclock(void)
EClock"
//循环装入引用页
count[i]++;
//如果被引用了两次,就把修改位设置成1
if(count[i]%2==0)
Modifybit[i]=0;
//修改位设置为0
Modifybit[i]=1;
if(Referencebit[j]==1){
if(Modifybit[j]==1){
Modifybit[j]=0;
intmin=10*Referencebit[j]+Modifybit[j];
intindex=j;
i<
i++){
if(10*Referencebit[i]+Modifybit[i]<
min){
min=10*Referencebit[i]+Modifybit[i];
index=i;
EliminatePage[l]=PageFrames[index];
PageFrames[index]=next;
Referencebit[index]=0;
Modifybit[index]=1;
count[index]=0;
//引用页不在实存中,缺页数加1
//最不经常使用置换算法
Lfu(void)
Lfu"
count[i]++;
//记录使用次数
intmin=count[0];
intindex=0;
if(count[i]<
min=count[i];
EliminatePage[l]=PageFrames[index];
//最不经常使用的页号记入淘汰页数组
count[index]=1;
//最经常使用置换算法
Mfu(void)
Mfu"
i++)
count[i]=1;
intmax=count[0];
if(count[i]>
max){
max=count[i];
intmain(intargc,char*argv[]){
Replace*vmpr=newReplace();
vmpr->
Lru();
Fifo();
Clock();
Eclock();
Lfu();
Mfu();
return0;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 山东大学 操作系统 实验