实验报告
课程名称: 操作系统
实验名称: 页面置换算法
实验类型: 设计性
实验地点: 学院 307 实验日期: 2017.11.17
指导教师: 徐华
专业: 计算机科学与技术
班级: 算机 1504
学号: 1511010403
姓名: 刘元山
成绩:
辽宁石油化工大学计算机与通信工程学院
实验报告说明
(1) 实验目的
加深对请求分页存储管理实现原理的理解,掌握页面置换
算法。
(2) 实验内容与要求
用 C 或 C++语言实现下列要求,并写出实验报告,报告内容包括:
题目、目的、内容和要求、程序清单、运行情况(输入、输出)、
总结。 设进程大小 6 页,编号为 0~5;供进程使用的内存块数为
4,编号为 0~3 已知页面走向为:4 3 2 1 4 3 5 4 3 2 1 5 假
设进程页面开始时都不在内存,页表长度 6,表项内容可有:页号、
块号、是否在内存等信息。编写程序,输出采用 FIFO 和 LRU 页
面置换算法时,访问各页面时各物理块中的页号情况及缺页次数、
缺页率。(提示:访问一个页面时,查页表,看该页面是否在内存,
若不在,调入、修改页表。)
(3) 实验原理
LRU 置换算法:
#include
#include
#include
using namespace std;
struct opt
{
int value; //存储页面走向
int time; //存储页面访问时间
};
const int maxn=105;
int a[maxn]; //存储页面走向顺序
int main()
{
deque
dq;
deque::iterator pos; //创建队列迭代器
int numcpulru,numlostlru=0;
printf("请输入物理内存块数:");
scanf("%d",&numcpulru);
int n;
printf("请输入页面走向个数:");
scanf("%d",&n);
for(int j=0; j if((*pos).value==in)
{
flag=1;
break;
}
if(!flag) //不存在此页面
{
numlostlru++;//缺页数+1
int m=dq.front().time;
deque::iterator mp=dq.begin();
for (pos = dq.begin(); pos != dq.end(); pos++)
{
printf("%d %d\n",(*pos).value,(*pos).time);
if((*pos).time>m)
{
printf("迭代");
mp=pos;//时间最大的页面的位置
m=(*pos).time; //此时队列中剩余最长页面
}
}
opt temp;
temp.value=in;
int f=0;
dq.erase(mp);
temp.time=0; //加进来之后
dq.push_back(temp);
}
}
//每次之后各对象的 time
for (pos = dq.begin(); pos != dq.end(); pos++)
{
int f=0;
for(int j=i; j>=0; j--)
if(a[j]==(*pos).value)
{
(*pos).time=i-j;
break;
}
}
}
printf("LRU 缺页次数为:%d\n",numlostlru);
printf("LRU 中断率为:%lf\n",(double)numlostlru*1.0/n);
}
FIFO 置换算法
#include
#include
#include
using namespace std;
int main()
{
deque dq;
deque::iterator pos;
int numcpufifo,numlostfifo=0;
printf("请输入内存块数:");
scanf("%d",&numcpufifo);
int n;
printf("\n 请输入页面走向个数:");
scanf("%d",&n);
for(int i=0; i flag=1;
break;
}
if(!flag) //不存在此元素
{
numlostfifo++;
dq.push_back(in);//放入队列
}
}
else //不存在多余页框
{
int flag=0;
for (pos = dq.begin(); pos != dq.end(); pos++)
if((*pos)==in)
{
flag=1;
break;
} //存在该元素
if(!flag) //不存在此元素 则置换最先进入的项
{
numcpufifo++;//缺页数+1
dq.pop_front();//最先进入的出队列
dq.push_back(in);//进队列
}
}
}
printf("FIFO 缺页次数为:%d\n",numcpufifo);
printf("FIFO 缺页中断率为:%lf\n",(double)numlostfifo*1.0/n);
}
(4)实验总结
【实验总结】
通过本次实验,我学会 LRU 页面置换算法和 FIFO 页面置
换算法,个人感觉编写 LRU 置换算法的难度较大,可以用堆
栈和队列来实现,我选择用队列来实现,发现对页面访问时
间顺序的记录较为困难,通过查阅资料进一步学习堆栈知识,
最终得以解决问题。
【指导教师评与成绩】
成绩:
指导教师(签字):
年 月 日