操作系统实验--页面置换算法(OPT/FIFO/LRU/LFU)cpp
前言
学习笔记
void IntoPage(int m);//将第m条指令转化为对应的页数
int isInside(int number,int Msize);//判断页号是否在内存中
void OPT(int num,int Msize);//最佳置换算法(OPT)
void FIFO(int num,int Msize);//先进现出置换算法(FIFO)
void LRU(int num,int Msize);//最近最久未使用置换算法(LRU)
void LFU(int num,int Msize);//最不经常使用置换算法(LFU)
void OPT(int num,int Msize){//最佳置换算法(OPT)int max=0; // 表示内存中的页号,下一次出现的距离,初始为0int maxchange; //表示内存中下次出现距离最大的页号在内存中的位置int k;if(isInside(num,Msize)==1){/*cout<<"命中!"<<endl;cout<<"内存Inside中内容为:"; //如果命中则打印当前内存页面,为简化程序输出而注释取消for(int i=0;i<Msize;i++)cout<<Inside [i]<<" ";cout<<endl;*/}else //未命中lost++; //未命中次数加1for(int j=0;j<Msize;j++){for(k=num;k<MMM;k++){//找到当前内存中的页面,在随后的页地址流中再次被调用时的位置if(Inside[j]==page[k])break;}if(k>max){max=k; //k表示在这个地方会再次出现给定页面maxchange=j;//j 表示把内存中第j个Inside中的页面从内存拿出,把新的页面放入}}//cout<<"置换内存中Inside["<<maxchange<<"]处的页面\n";Inside[maxchange] = page[num];//将此页写入内存中最晚再被调度的页面的位置cout<<"内存Inside中内容为:";for(int i=0;i<Msize;i++) //打印按本算法置换页面后内存中的页面序列,为简化程序输出而注释取消cout<<Inside [i]<<" ";cout<<endl;
}
void FIFO(int num,int Msize){//先进现出置换算法(FIFO) if(isInside(num,Msize)){/*cout<<"命中!"<<endl; //如果命中则打印当前内存页面,为简化程序输出而注释取消cout<<"内存Inside中内容为:";for(int i=0;i<Msize;i++)cout<<Inside [i]<<" ";cout<<endl;*/}else{lost++;Inside[insert]=page[num];//insert始终指向最老的页面,即最先进入的页面insert++;//insert指向下一个最早进入的页面insert=insert%Msize;//当insert指针指向内存中最后一个页面时,返回第一个页面继续循环cout<<"内存Inside中内容为:"; //打印按本算法置换页面后内存中的页面序列,为简化程序输出而注释取消for(int i=0;i<Msize;i++)cout<<Inside [i]<<" ";cout<<endl;}
}
void LRU(int num,int Msize){//最近最久未使用置换算法(LRU)int max=0; // 表示内存中的页号,上一次出现的距离int maxchange; //表示内存中上一次出现距离最大的页号在内存中的位置int k;if(isInside(num,Msize)){/*cout<<"命中!"<<endl; //如果命中则打印当前内存页面,为简化程序输出而注释取消cout<<"内存Inside中内容为:";for(int i=0;i<Msize;i++)cout<<Inside [i]<<" ";cout<<endl;*/}else{lost++;for(int j=0;j<Msize;j++){for(k=num;k>=0;k--){ //从当前的页号向前看,发现页号与内存中的页号相同则breakif(Inside[j]==page[k])break;}if((num-k)>max){ //比较内存中页号在页地址流中的位置max=num-k; //将距离最大的存入maxmaxchange=j; //j表示把内存中第j个Inside中的页面从内存拿出,把新的页面放入}}Inside[maxchange]=page[num]; cout<<"内存Inside中内容为:";for(int i=0;i<Msize;i++) //打印按本算法置换页面后内存中的页面序列,为简化程序输出而注释取消cout<<Inside [i]<<" ";cout<<endl;}
}
void LFU(int num,int Msize){//最不经常使用置换算法(LFU)int Min=MMM; //表示最小次数,初始化为MMM(最大)int minchange=0; //表示内存中最小频率的页面所在的位置int k;int *frequent=new int[32];//frequent数组记录目前为止每个页面已出现的频率for(int i=0;i<=31;i++)frequent[i]=0;if(isInside(num,Msize)){/*cout<<"命中!"<<endl; //如果命中则打印当前内存页面,为简化程序输出而注释取消cout<<"内存Inside中内容为:";for(int i=0;i<Msize;i++)cout<<Inside [i]<<" ";cout<<endl;*/}else{if(num<Msize){//若当前内存的页面没装满lost++;Inside[num]=page[num];//依次将页地址流的前Msize个页面装入内存}else{ //内存中页面已经装满lost++;for(int j=0;j<Msize;j++){for(k=num;k>=0;k--){ //从当前的页号向前看if(Inside[j]==page[k])//若发现页号与内存中的页号相同则将已访问频率加1frequent[Inside[j]]++;}if(frequent[Inside[j]]<Min){ //比较内存中页号出现的频率Min=frequent[Inside[j]]; //将频率最小的存入minminchange=j; //j表示把内存中第j个Inside中的页面从内存拿出,把新的页面放入}}Inside[minchange]=page[num]; cout<<"内存Inside中内容为:";for(int i=0;i<Msize;i++) //打印按本算法置换页面后内存中的页面序列,为简化程序输出而注释取消cout<<Inside [i]<<" ";cout<<endl;}}
}
操作系统实验--页面置换算法(OPT/FIFO/LRU/LFU)cpp相关推荐
- 操作系统之页面置换算法(FIFO、LFU、LRU、OPT算法)
操作系统之页面置换算法(FIFO.LFU.LRU.OPT算法) TIPS: 主存:实际上的物理内存. 虚存(虚拟内存):虚拟存储技术.虚拟内存使计算机系统内存管理的一种技术.它使得应用程序认为它拥有的 ...
- OS 页面置换算法(OPT,FIFO,LRU)颠簸/抖动
介绍 置换算法 置换算法(replacement algorithm)又称为淘汰算法.替换算法,用于确定页面的调出原则. 在地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断.当发 ...
- 【操作系统⑫】——存储管理(下)【分段存储管理 虚拟存储管理 段页式存储管理方案 页面置换算法 OPT FIFO LRU】
- 操作系统:页面置换算法(FIFO算法、LRU算法、LFU算法、NRU算法)实验报告
操作系统实验报告 一.实验名称 :页面置换算法 二.实验目的: 在实验过程中应用操作系统的理论知识. 三.实验内容: 采用C/C++编程模拟实现:FIFO算法.LRU算法.LFU算法.NRU算法四个页 ...
- 页面置换算法(FIFO , LRU, OPT)(C++实现模拟)
简述 先输入一个N表示的是,页表大小(最多能存的帧数). 之后的序列是最大为9,最小为0的一个申请序列. 之后的输入一个数字T,表示输入的测试命令的数目. 之后的命令. 第一个数表示使用什么页面置换算 ...
- 缓存算法(页面置换算法)-FIFO、LFU、LRU
为什么80%的码农都做不了架构师?>>> 转自:http://www.cnblogs.com/dolphin0520/ 1.FIFO算法 FIFO(First in First ...
- fifo页面置换算法java_缓存算法(页面置换算法)-FIFO、LFU、LRU
转自:http://www.cnblogs.com/dolphin0520/ 1.FIFO算法 FIFO(First in First out),先进先出.其实在操作系统的设计理念中很多地方都利用到了 ...
- 【南邮操作系统实验】页面置换算法(FIFO、LRU、OPT)图形化界面(JavaFx)
页面置换算法图形化界面 前言 运行效果 源码 FIFO LRU OPT FXML界面 控制器 启动类 前言 其实以前操作系统实验的时候我写过了三份了:(命令行) 页面置换算法 (FIFO.LRU.OP ...
- C++实现虚拟内存页面置换算法(FIFO, OPT, LRU)
虚拟内存页面置换算法(FIFO, OPT, LRU) 0x01 FIFO 置换策略:置换掉先来的页面(FIFO队列首元素) 优点: 简单易理解且易实现 缺点: 性能不理想,会发生Belady异常(页框 ...
最新文章
- 【linux】可执行程序执行时报错-sh: ./mxc_v4l2_tvin.out: No such file or directory的解决方法
- (转载)Ubuntu命令卸载软件
- Android 如何有效的解决内存泄漏的问题
- boost::mpl::divides相关的测试程序
- Entity Framework(二)
- 转:python的内置对象
- Matrix Chain Multiplication (堆栈)
- c语言 归一化图片大小,OpenCV学习笔记(1)——resize函数实现图像大小归一化
- 怎么不能锁门_镜子能不能对着床
- 机器学习中特征选择_机器学习中的特征选择
- 基于Matlab使用激光雷达从点云到跟踪列表跟踪车辆仿真(附源码)
- 限流 Redis list 列表 Lpush rpop 实现令牌桶 – PHP 实例
- raid卡组不同raid_磁盘阵列卡组RAIDO 对比主板自带组磁盘阵列
- office2019选框虚线_手把手教你分析PS2019里怎么画虚线
- onethink搭建
- java阳历转为阴历错了一天_Java 阴历阳历转换
- 2020年计算机竞赛姜子敬,初赛公示_2020年全国高校计算机能力挑战赛
- EM2040D和SES2000采集图像判读(一)
- 开源项目扮演的角色_适用于Linux的5种开源角色扮演游戏
- 日期转换为后端需要的格式 Fri Oct 09 2020 00:00:00 GMT+0800 (中国标准时间)
热门文章
- java多态造型,Java基础学习:面向对象之多态
- Win11系统 PrintScreen/PrtSc 屏幕截图快捷键无反应
- 混沌密码能对抗量子计算机吗,使命召唤17混沌行动密码是多少 混沌行动解密流程...
- EventBus使用总结和使用场景
- Android 调用系统图片浏览器
- JS代码加密时,什么情况下不能使用全局变量、函数名加密?
- 魅族的android m l,魅族两款新机齐曝光:其中一款竟然采用原生 Android
- 英特尔推出功能强大的FPGA加速卡
- 画面截屏_第五人格:双十一“单身盛典”,狂欢免费送福利11+11个许愿码,玩家截屏这四个画面像极了爱情...
- 第五人格服务器6月维护,第五人格6月7日更新维护公告 更新内容汇总