页面调度实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
操作系统实验报告
专业网络工程班级08102 学号姓名
课程名称操作系统学年2010-2011 学期下
课程类别专业必修■限选□任选□实践□实验时间2011年12月23日
实验名称
实验四:页面置换调度
实验目的和要求
1、了解内存分页管理策略,掌握3种调度页面的算法
2、分别采用3种页面调度方式实现调度,显示调度结果并计算缺页次数与缺页率
3、编写程序完成实验内容及实验报告
实验软硬件要求
Pentium ||| 450以上CPU 64MB以上内存
WINDOWS XP
Visual C++6.0
实验内容、方法和步骤(可附页)
1、设计结构体存放页面调度顺序串及内存块
2、分别模拟FIFO置换调度算法、LRU置换调度算法以及OPT置换调度算法进行页面调度
3、分别打印输出3种置换算法调度后的内存块状态结果,在缺页的列对应输出缺页标志,计算缺页次数及缺页率
实验结果(可附页)
见截图
小结
这次的页面调度实验让我对页面调度的3种常用置换算法及其性能的优劣比较有了更为深刻的认识,同时也进一步提升了自己的编程能力。
这次我用的一个一维结构体数组来存放页面调度序列串,用一个二维结构体数组模拟内存块,每个结构体有页面号和标记两个变量。整个程序的基本实现没有太大的问题,但是页面调度的序列串不能动态输入而是在数组定义是直接赋值,这样使得程序在交互性上很欠缺,经过老师的指导后我认识到了这个问题,课后通过不断地改进也取得了一定的效果,十分感谢梅老师,我以后一定在这方面更加注意。
评定成绩:批阅教师:年月日
一、问题概述
置换算法在内存中没有空闲页面时被调用,其目的是选出一个被淘汰的页面,把内存和外存统一管理的真正目的是把那些被访问概率非常高的页面放在内存,因此,页面置换算法应该置换那些被访问的概率最低的页面,并将它们移除内存。
常用的置换算法有FIFO先进先出算法、LRU最近最久未使用算法、OPT理想型淘汰算法三种:FIFO 算法认为先调入内存的页面不再被访问的概率比较大,所以每次都选出最早进入内存的页面块调出内存;LRU算法认为某页面被访问了,则它很可能马上还要被访问,所以每次都是选出最近的那个最久没有被访问过的页调出内存;OPT算法淘汰在访问串中将来最久才会被访问的页。
二、设计流程图
主要流程:
图1 主流程图
FIFO置换调度算法流程图:
图2 FIFO置换调度算法流程图
LRU
图3
LRU 置换算法流程图
OPT
图4 OPT置换调度算法流程图
三、数据定义
#define BlockSize 4
#define PageSize 20
struct block{
int num;//页面号
int time;//标记
};
block B[BlockSize][PageSize];//模拟内存块
block A[PageSize];//存放页面访问序列串
四、源程序
1、初始化函数
void chushihua()
{
for(int i=0;i for(int j=0;j for(int k=0;k B[1][1].num=B[1][2].num=B[1][3].num=A[1].num; B[2][2].num=B[2][3].num=A[2].num; B[3][3].num=A[3].num; B[0][3].time=4;B[1][3].time=3;B[2][3].time=2;B[3][3].time=1; } 2、FIFO置换调度算法 void FIFO() { int exist,position;int qy=0;//缺页次数 for(int list=4;list { for(int row=0;row {B[row][list].num=B[row][list-1].num;B[row][list].time=B[row][list-1].time+1;} exist=findExist(list); if(exist==-1) {//缺页 position=findReplace(list);B[position][list].num=A[list].num; B[position][list].time=1;A[list].time=1;qy++;} }disp(1,qy); } 3、LRU置换调度算法 void LRU() { int exist,position; int qy=0;//缺页次数 for(int list=4;list { for(int row=0;row {B[row][list].num=B[row][list-1].num;B[row][list].time=B[row][list-1].time+1;} exist=findExist(list); if(exist!=-1) B[exist][list].time=1;//不缺页 else{//缺页 position=findReplace(list);B[position][list].num=A[list].num; B[position][list].time=1;A[list].time=1;qy++;} } disp(2,qy); } 4、OPT置换调度算法 void OPT() { int exist,position; int qy=0;//缺页次数 for(int list=4;list { for(int row=0;row {B[row][list].num=B[row][list-1].num;B[row][list].time=B[row][list-1].time+1;} exist=findExist(list); if(exist= = -1) { //缺页 opt(list);position=findReplace(list);B[position][list].num=A[list].num; B[position][list].time=1;A[list].time=1; qy++;} }disp(3,qy); } 五、运行结果 页面访问序列串为7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1,根据FIFO置换、LRU置换及OPT置换三种算法,其分别对应的调度顺序为 1、FIFO置换调度: 7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1 7 7 7 2 2 2 2 4 4 4 0 0 0 0 0 0 0 7 7 7 0 0 0 0 3 3 3 2 2 2 2 2 1 1 1 1 1 0 0 1 1 1 1 0 0 0 3 3 3 3 3 2 2 2 2 2 1 * * * * * * * * * * * * * * * 缺页次数:15 缺页率:15/20=75% 2、LRU置换调度: 7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1 7 7 7 2 2 2 2 4 4 4 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 3 3 3 3 2 2 2 2 7 7 7 1 1 1 3 3 3 2 2 2 2 2 3 3 0 0 0 0 0 * * * * * * * * * * * * 缺页次数:12 缺页率:12/20=60%