虚拟内存页面置换算法实验报告
更新时间:2024-04-11 23:12:01 阅读量: 综合文库 文档下载
软 件 学 院 上 机 实 验 报 告
课程名称: 操作系统原理 实验项目: 虚拟内存页面置换算法 实 验 室: 地狱018 姓 名: 死神 学 号: 专业班级: 实验时间: 2015/12/13
实验成绩
评阅教师
一、 实验目的及要求
通过这次实验,加深对虚拟内存页面置换概念的理解,进一步掌握先进先出FIFO、最佳置换OPI和最近最久未使用LRU页面置换算法的实现方法。结合Linux的内层的分析方法查看内存的分配过程及linux kernel的内存管理机制
二、 实验性质
设计性
三、 实验学时
4学时
四、 实验环境
实验环境1.实验环境: C与C++程序设计学习与实验系统
2.知识准备:
(1)使用Linux的基本命令;
(2)了解Linux vmstat、free、top等命令查看linux系统的内存
分配情况;
(3) 掌握虚拟内存页面置换算法FIFO等基本算法理论。
五、 实验内容及步骤
假设有n个进程分别在T1, … ,Tn时刻到达系统,它们需要的服务时间分别为S1, … ,Sn。分别采用先来先服务FCFS和短作业优先SJF进程调度算法进行调度,计算每个进程的完成时间、周转时间和带权周转时间,并且统计n个进程的平均周转时间和平均带权周转时间。
步骤
通过已知最小物理块数、页面个数、页面访问序列、及采用置换方式可以得出页面置换的缺页次数和缺页率,及每次缺页时物理块中存储。
1.输入的形式
int PageOrder[MaxNumber];//页面序列
int PageNum,LackNum=0,BlockNum;//页面个数,缺页次数,最小物理块数 2. 输出的形式
double LackPageRate//缺页率 缺页个数
每次缺页时物理块中存储 程序所能达到的功能
模拟先进先出FIFO、最佳置换OPI和最近最久未使用LRU页面置换算法的工作过程。假设内存中分配给每个进程的最小物理块数为m,在进程运行过程中要访问的页面个数为n,页面访问序列为P1, … ,Pn,分别利用不同的页面置换算法调度进程的页面访问序列,给出页面访问序列的置换过程,计算每种算法缺页次数和缺页率。测试数据,包括正确的输入及其输出结果和含有错误的输入及其输出结果。
程序中用到的所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层次(调用)关系。
int PageOrder[MaxNumber];//页面序列
int PageCount[MaxNumber]={0};//计算内存内数据离下一次出现的距离 int PageNum,LackNum=0,BlockNum;//页面个数,缺页次数,最小物理块数 double LackPageRate=0; bool found=false;
六、实验数据及结果分析
运行截图:
图6.1
图6.2
图6.3
七、实验总结
这次试验,让我加深了对虚拟内存页面置换算法的理解,进一步掌握先进先出FIFO、最佳置换OPI和最近最久未使用LRU页面置换算法的实现方法。熟悉Linux需要经过大量的实验、改进与思考,在编写代码的过程中遇到了一些问题要积极面对并通过讨论上网或者问老师解决。通过这次试验我了解了虚拟内存置换算法的一些知识,是我对于所学习的专业知识得到了更好的巩固和提升。
附录 源程序清单
#include
using namespace std; #define MaxNumber 100
void OPI(int PageOrder[MaxNumber],int PageCount[MaxNumber],
found)
{
int module[MaxNumber]; int sum=0; int i,j,k,m;
for(i=0;i module[i]=PageOrder[i]; sum++; int PageNum,int LackNum,int BlockNum, double LackPageRate,bool for(j=0;j<=i;j++) cout< cout< } LackNum=BlockNum; for(i=BlockNum;i { found=false; for(j=0;j if(module[j]==PageOrder[i]) { found=true; break; } } if(found==false)//缺页,选择替换 { for(j=0;j PageCount[j]=0; for(k=i+1;k { if(module[j]!=PageOrder[k]) PageCount[j]++; else break; } } int max=PageCount[0]; int kind=0; for(j=0;j if(PageCount[j]>max) { } max=PageCount[j]; kind=j; } module[kind]=PageOrder[i]; LackNum++; for(m=0; m<3;m++) cout< cout< } } LackPageRate=(LackNum*1.0)/PageNum; cout<<\该算法缺页次数为:\ cout<<\该算法缺页率为:\} /****************************** *************************************/ void FIFO(int PageOrder[MaxNumber],int PageCount[MaxNumber], found) { int PageNum,int LackNum,int BlockNum, double LackPageRate,bool 先 进 先 出 置 换 算 法 int module[MaxNumber]; int sum=0; int i,j,m; for(i=0;i module[i]=PageOrder[i]; sum++; PageCount[i]=3-i; for(j=0;j<=i;j++) cout< cout< } LackNum=BlockNum; for(i=BlockNum;i { found=false; for(j=0;j if(module[j]==PageOrder[i]) { found=true; break; } } if(found==false)//缺页,选择替换 { int max=PageCount[0]; int kind=0; for(j=0;j if(PageCount[j]>max) { } max=PageCount[j]; kind=j; } for(int k=0;k { if(k!=kind) PageCount[k]++; } module[kind]=PageOrder[i]; PageCount[kind]=0;// 替换之后已经查询的次数改为0 LackNum++; for(m=0; m<3;m++) cout< cout< } } LackPageRate=(LackNum*1.0)/PageNum; cout<<\该算法缺页次数为:\ cout<<\该算法缺页率为:\} /******************************最近最久未使用置换算法 *************************************/ void LRU(int PageOrder[MaxNumber],int PageCount[MaxNumber], found) { int PageNum,int LackNum,int BlockNum, double LackPageRate,bool int module[MaxNumber]; int sum=0; int i,j,m; for(i=0;i module[i]=PageOrder[i]; sum++; PageCount[i]=3-i; for(j=0;j<=i;j++) cout< cout< } LackNum=BlockNum; for(i=BlockNum;i { found=false; for(j=0;j if(module[j]==PageOrder[i]) { found=true; PageCount[j]=0;//查询后,更改次数 for(int k=0;k if(k!=j) PageCount[k]++; } break; } } if(found==false)//缺页,选择替换 { int max=PageCount[0]; int kind=0; for(j=0;j if(PageCount[j]>max) { } max=PageCount[j]; kind=j; } for(int k=0;k { if(k!=kind) PageCount[k]++; } module[kind]=PageOrder[i]; PageCount[kind]=0;// 替换之后未查询的次数改为0 LackNum++; for(m=0; m<3;m++) cout< cout< } } LackPageRate=(LackNum*1.0)/PageNum; cout<<\该算法缺页次数为:\ cout<<\该算法缺页率为:\} int main () { int PageOrder[MaxNumber];//页面序列 int PageCount[MaxNumber]={0};//计算内存内数据离下一次出现的距离 int PageNum,LackNum=0,BlockNum;//页面个数,缺页次数,最小物理块数 double LackPageRate=0; bool found=false; int chioce1=0,chioce2,chioce3; int i=0; while(chioce1==0) { cout<<\是否重新输入数据;0:不输入,1:重新输入:\cin>>chioce2; if(chioce2==1) { cout<<\请输入页面个数:\ cin>> PageNum; cout<<\请输入最小物理块数\cin>>BlockNum; cout<<\请输入页面序列:\for(i=0;i cout<<\请选择算法:1-FIFO,2-OPI,3-LRU:\cin>>chioce3; if(chioce3==1) FIFO(PageOrder,PageCount,PageNum,LackNum, LackPageRate, found); else { if(chioce3==2) BlockNum, OPI(PageOrder,PageCount,PageNum,LackNum, BlockNum, LackPageRate, found); else BlockNum, LRU(PageOrder,PageCount,PageNum,LackNum, LackPageRate, found); } cout<<\ ******\ } cout<<\请选择继续还是结束:0:继续,1:结束\cin>>chioce1; }
正在阅读:
虚拟内存页面置换算法实验报告04-11
2014九年级新目标英语单词表默写最新版04-09
新形势下的人才工作(讲稿)03-18
夹具毕业设计开题报告05-06
郭锡良古代汉语05-12
发动机构造与维修作业02-01
浅析我国弱势群体的社会保障问题(论文)01-14
- 《江苏省环境水质(地表水)自动监测预警系统运行管理办法(试行)》
- 安乐死合法化辩论赛立论稿(浙大新生赛)
- 公共科目模拟试卷公务员考试资料
- 我国固定资产投资FAI对GDP的影响
- 大学生创新创业训练计划项目申请书大创项目申报表
- 完美版—单片机控制步进电机
- 2013资阳中考化学试题
- 18.两位数减一位数退位(397道)
- 工程量计算规则
- 二年级操行评语(下)
- 第3章 流程控制语句
- 浅基桥墩加固技术
- 课题研究的主要方法
- 5100软件说明书 - 图文
- 车间技术员年终总结
- 关于印发《中铁建工集团开展项目管理实验室活动方案》的通知
- 经典诵读结题报告
- 地下水动力学习题答案
- 2018年全国各地高考数学模拟试题平面解析几何试题汇编(含答案解
- 街道办事处主任2018年度述职述廉报告
- 置换
- 算法
- 内存
- 实验
- 页面
- 虚拟
- 报告
- 2013年初级消防员现场操作考题(带图文)
- ROS基本操作说明 - 图文
- 小学经典数学应用题:数字数位问题(含答案解析)
- 后张法预制箱梁预应力张拉工序作业指导书
- 2016山东省济南济南中考真题
- 大兴新城规划(1)
- 浅论语文课堂教学中的提问艺术(教学论文)
- 《船舶结构与设备》题库
- 村发展壮大集体经济试点实施方案
- 物业管理标准化手册 - 图文
- 中学英语课改心得浅谈
- 0.5平实验型冻干机入门手册 - 图文
- 最新材料员保通过练习题完整版(带答案)
- 山东省威海市2012届高三第二次模拟考试 数学文科试题(2012威海
- 路面施工组织设计11
- 2017年中国眼科医院市场调研及发展现状分析(目录) - 图文
- 基层党组织建设的现状与对策
- 大学英语精读(2)
- 桩板式挡土墙
- 国家计委计标(85)352号