实验四、LRU算法模拟
实验原理:
其基本原理为:如果某一个页面被访问了,它很可能还要被访问;相反,如果它长时间不被访问,再最近未来是不大可能被访问的。
程序源代码:
#define MAXSIZE 20 #include <iostream.h> void main() { int input=0; //用于输入作业号 int worknum=0; //输入的作业个数 int storesize=0; //系统分配的存储区块数 int interrupt=0; //缺页中断次数 int stack[MAXSIZE]; //栈,LRU算法的主要数据结构 int workstep[MAXSIZE]; //记录作业走向 /*初始化*/ for(int i=0;i<MAXSIZE;i++) { stack[i]=0; workstep[i]=0; } cout<<"请输入存储区块数:"; cin>>storesize; cout<<"请输入作业的页面走向(输入0结束):\n"; for(int j=0;j<MAXSIZE;j++) { cout<<"页面号 "<<j+1; cin>>input; workstep[j]=input; if(input==0) { cout<<"输入结束!\n"; break; } worknum++; } if(workstep[0]==0) { cout<<"未输入任何作业,系统将退出!\n"; return; } cout<<"置换情况如下:\n"; for(int k=0;k<worknum;k++) { /*在栈中找相等的页号或空位置*/ for(int l=0;l<storesize;l++) { /*是否有相等的页号*/ if(stack[l]==workstep[k]) { cout<<"内存中有"<<workstep[k]<<"号页面,无须中断!\n"; goto step1; } /*找栈中是否有空位置*/ if(stack[l]==0) { stack[l]=workstep[k]; cout<<"发生中断,但内存中有空闲区,"<<workstep[k]<<"号页面直接调入!\n"; interrupt++; goto step1; } } /*上述情况都不成立则调出栈顶,将调入页面插入栈顶*/ cout<<"发生中断,将"<<stack[0]<<"号页面调出,"<<workstep[k]<<"号装入!\n"; interrupt++; /*新掉入的页面放栈顶*/ step1: for(int m=0;m<storesize;m++) { stack[m]=stack[m+1]; } stack[storesize-1]=workstep[k]; } cout<<"作业"<<worknum<<"个,"<<"中断"<<interrupt<<"次,"<<"缺页率:"<<float(interrupt)/float(worknum)*100<<"%\n"; }
程序调试:
调试一:
请输入存储区块数:3
请输入作业走向(输入0结束):
页面号1:4
页面号2:3
页面号3:2
页面号4:1
页面号5:4
页面号6:3
页面号7:5
页面号8:4
页面号9:3
页面号10:2
页面号11:1
页面号12:5
页面号13:0
输入结束!
置换情况如下:
发生中断,但内存中有空闲区,4号页面直接调入!
发生中断,但内存中有空闲区,3号页面直接调入!
发生中断,但内存中有空闲区,2号页面直接调入!
发生中断,将4号页面调出,1号装入!
发生中断,将3号页面调出,4号装入!
发生中断,将2号页面调出,3号装入!
发生中断,将1号页面调出,5号装入!
内存中有4号页面,无须中断!
内存中有3号页面,无须中断!
发生中断,将5号页面调出,2号装入!
发生中断,将4号页面调出,1号装入!
发生中断,将3号页面调出,5号装入!
作业12个,中断10次,缺页率:83.3333%
Press any key to continue
调试二:
请输入存储区块数:4
请输入作业走向(输入0结束):
页面号1:4
页面号2:3
页面号3:2
页面号4:1
页面号5:4
页面号6:3
页面号7:5
页面号8:4
页面号9:3
页面号10:2
页面号11:1
页面号12:5
页面号13:0
输入结束!
置换情况如下:
发生中断,但内存中有空闲区,4号页面直接调入!
发生中断,但内存中有空闲区,3号页面直接调入!
发生中断,但内存中有空闲区,2号页面直接调入!
发生中断,但内存中有空闲区,1号页面直接调入!
内存中有4号页面,无须中断!
内存中有3号页面,无须中断!
发生中断,将2号页面调出,5号装入!
内存中有4号页面,无须中断!
内存中有3号页面,无须中断!
发生中断,将3号页面调出,2号装入!
发生中断,将5号页面调出,1号装入!
发生中断,将4号页面调出,5号装入!
作业12个,中断8次,缺页率:66.6667%
相关文章
- Python脚本模拟登陆DVWA
- 在k8s中,怎么模拟负载,利用HPA进行自动扩缩容的场景?
- 常量,字段,构造方法 调试 ms 源代码 一个C#二维码图片识别的Demo 近期ASP.NET问题汇总及对应的解决办法 c# chart控件柱状图,改变柱子宽度 使用C#创建Windows服务 C#服务端判断客户端socket是否已断开的方法 线程 线程池 Task .NET 单元测试的利剑——模拟框架Moq
- PHP 使用 CURL 模拟发送 GET/POST/PUT/DELETE 请求
- div 模拟 input 输入框
- 1097 Deduplication on a Linked List (25 分)【难度: 一般 / 知识点: 链表 模拟】
- 拿走吧你,Fiddler模拟请求发送和修改响应数据
- jquery用div模拟一个下拉列表框
- 模拟登陆
- 《Android游戏开发详解》一2.20 对象的更多实践——模拟一个色子
- 【蓝桥杯2021模拟赛】【动态规划】跳跃(超详解+原理分析)
- 在vue.config.js中模拟后端接口数据
- Fiddler-008-简单模拟性能测试
- Mock数据模拟Node服务器
- vue项目中使用mockjs模拟接口返回数据
- popupwindow 模拟新浪、腾讯title弹框效果
- 模拟storage copy 功能失败的记录
- 模拟扑克牌
- 接口 ApiController调用Controller 模拟Session 封装
- D - Back and Forth(模拟)