虚拟存储中页面调度算法的模拟实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告
( 2014/ 2015 学年第一学期)
课程名称操作系统A
实验名称虚拟存储中页面调度算法的模拟实现实验时间2014 年12 月 3 日指导单位
指导教师徐鹤
学生姓名班级学号
学院(系) 计算机学院专业软件工程
实验报告
实验名称虚拟存储中页面调度算法的模拟实现指导教师徐鹤
实验类型验证实验学时 2 实验时间2014.12.3
一、实验目的和要求
1、通过模拟实现请求页式存储管理的几种基本页面置换算法,了解虚拟存储技术的特点,掌握虚拟存储请求页式存储管理中几种基本页面置换算法的基本思想和实现过程,并比较它们的效率。
2、设计一个虚拟存储区和内存工作区,并使用以下算法计算访问命中率:①最佳淘汰算法(OPT);
②先进先出算法(FIFO);③最近最久未使用算法(LRU)。
二、实验环境(实验设备)
Windows XP + VMWare + RedHat Linux 8
实验报告
三、实验过程描述与结果分析
1、页面调度(淘汰)算法主要有:FIFO,最近最少使用调度算法(LRU),最近最不常用调度算法(LFU)以及最佳算法(OPT);其中经常被采用、易于实现的是FIFO和LRU算法。
2、输入:
进程的页面请求序列,即一系列页面号(页面号用整数表示,用空格作为分隔符),用来模拟待换入的页面
输出要求:
显示缺页的总次数和缺页中断率
3、源代码:
#include
#define n 12
#define m 3
int page[n]; //保存需要访问的页面
int i,j,q,mem[m]={0},List[m][n],sum;
char flag,f[n];
void Init();
void FIFO();
void LRU();
void main()
{
cout<<"*********************实验***********************"< cout<<" ┏━━━━━━━━━━━━━━━━━━━━━━━┓"< cout<<" ┃页面调度算法的模拟实现┃"< cout<<" ┠───────────────────────┨"< cout<<" ┃先进先出算法FIFO ┃"< cout<<" ┃最近追少使用算法LRU ┃"< cout<<" ┗━━━━━━━━━━━━━━━━━━━━━━━┛"< cout<<" 请输入页面访问序列:\n"<<" "; for(i=0;i cin>>page[i]; cout< FIFO(); Init(); LRU(); } void Init() //初始化函数 { sum=0; //初始化计算缺页次数的变量 for(int i=0;i mem[i]=0; for(i=0;i for(j=0;j List[i][j]=0; } void FIFO() { for(i=0;i { q=0; while((page[i]!=mem[q])&&(q!=m)) q++; if(q==m) flag='*'; //缺页,则置标志flag为'*' else flag=' '; if(flag=='*') { for(j=m-1;j>0;j--) //淘汰最先调入的页面调入当前访问的mem[j]=mem[j-1]; mem[0]=page[i]; } for(j=0;j List[j][i]=mem[j]; f[i]=flag; } cout<<" 0代表为空,*代表有缺页:\n"; cout< cout<<"-----------FIFO算法结果------------"< for(i=0;i { for(j=0;j cout< cout< } for(i=0;i { if(f[i]=='*') sum++; cout< } cout<<"\n-----------------------------------"< cout<<"缺页次数是:"< void LRU() { for(i=0;i { q=0; while((page[i]!=mem[q])&&(q!=m)) q++; if(q==m) flag='*'; //缺页,则置标志flag为'*' else flag=' '; for(j=q;j>0;j--) mem[j]=mem[j-1]; mem[0]=page[i]; for(j=0;j List[j][i]=mem[j]; f[i]=flag; } cout< cout<<"------------LRU算法结果------------"< for(i=0;i { for(j=0;j cout< cout< } for(i=0;i { if(f[i]=='*') sum++; cout<