LRU算法实现原理:
最近最久未使用页面置换算法(LRU)
当需要淘汰某一页时,选择在最近一段时间里最久没有被使用过的页淘汰。
其基本原理为:如果某一个页面被访问了,它很可能还要被访问;相反,如果它长时间不被访问,再最近未来是不大可能被访问的。LRU采用页号栈的实现方法。最近访问的页放在栈顶,较早访问的页往栈底移动。总是先淘汰处于栈底的页。

#include <iostream>#define MAXSIZE    20
using namespace stdvoid 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";
}

2.LRU算法实现 [C++]相关推荐

  1. LRU算法 -- 链表 完整实现

    LRU算法(Least Recently Used) 算是我们经常遇到的一种淘汰算法,其中内存管理模块进行内存页回收时有用到,针对不经常使用的内存页,LRU淘汰策略能够将该内存页回收给操作系统. 属于 ...

  2. 漫画:什么是LRU算法?

    本期封面作者:A17 -----  两个月前  ----- 用户信息当然是存在数据库里.但是由于我们对用户系统的性能要求比较高,显然不能每一次请求都去查询数据库. 所以,小灰在内存中创建了一个哈希表作 ...

  3. 【腾讯三面】你能现场写一下LRU算法吗?

    " 金三银四,又到了换工作的黄金期.各位小伙伴们都准备好了吗? " 这句话大家是不是最近已经要看吐了呢? 每当这个时候,就证明招聘旺季又来啦~ 春招.校招.社招-- 那你真的准备好 ...

  4. LRU算法确定最后使用时间的顺序

    LRU算法是经常采用的页面置换算法,并被认为是相当好的,但是存在如何实现它的问题.LRU算法需要实际硬件的支持.其问题是怎么确定最后使用时间的顺序,对此有两种可行的办法: 1.计数器. 2.栈.

  5. java 最少使用(lru)置换算法_「面试」LRU了解么?看看LinkedHashMap如何实现LRU算法...

    以下内容均是本人原创,希望你看完之后能有更多更深入的了解,欢迎关注➕ 问题:使用Java完成一个简单的LRU算法 什么是LRU算法 LRU(Least Recently Used),也就是最近最少使用 ...

  6. Android图片缓存之Lru算法

    前言: 上篇我们总结了Bitmap的处理,同时对比了各种处理的效率以及对内存占用大小.我们得知一个应用如果使用大量图片就会导致OOM(out of memory),那该如何处理才能近可能的降低oom发 ...

  7. 使用java.util.LinkedList模拟实现内存页面置换算法--LRU算法

    一,LRU算法介绍 LRU是内存分配中"离散分配方式"之分页存储管理方式中用到的一个算法.每个进程都有自己的页表,进程只将自己的一部分页面加载到内存的物理块中,当进程在运行过程中, ...

  8. 操作系统之存储管理——FIFO算法和LRU算法

    操作系统之进程调度--优先权法和轮转法(附上样例讲解) 操作系统之银行家算法-详解流程及案例数据 操作系统之多线程编程-读者优先/写者优先详解 操作系统之存储管理--FIFO算法和LRU算法 操作系统 ...

  9. 编写程序来模拟计算机LRU算法,操作系统-页式虚拟存储管理程序模拟.doc

    实 验3: 页式虚拟存储管理程序模拟 实验目的: 编写程序来模拟计算机的两种调度方式: (1)先进先出算法 (2)最近最少使用算法 程序设计 FIFO() FIFO() LRU() Msize加1 S ...

最新文章

  1. 面试官:啥是集群策略啊?
  2. AI洞观 | 戴上红帽 看IBM冲杀云计算市场
  3. java 拖拽生成_JAVA UI 拖拽功能
  4. 网页上符号显示成方框_如何在word、PPT、Excel以及PDF中添加带√的方框
  5. 物理化学 化学 动力学(下)
  6. linux dns chroot,系统运维|在 CentOS7.0 上搭建 Chroot 的 Bind DNS 服务器
  7. 编写数据访问代码测试–单元测试是浪费
  8. 漫步最优化四十五——矩阵S的生成
  9. Wikioi 2822爱在心中(强连通缩点+dfs)
  10. Sqlserver表数据误删除后的恢复
  11. 用html5绘制星空,用HTML5绘制的一个星空特效图
  12. 台式电脑计算机图标打不开怎么办,电脑计算机图标打不开怎么办
  13. 并发编程学习之线程8锁
  14. Java程序员从笨鸟到菜鸟(三)算法笔试题
  15. 计算电磁学中的矩量法及其求解过程介绍
  16. DTOJ5057 英雄联盟
  17. 参考文献的序号如何设置
  18. 国内wifi用不了谷歌_如何使用Google Wifi阻止不适当的网站
  19. 顺风车这么难搞,滴滴为何从不放弃?
  20. Error: Duplicate resources

热门文章

  1. oracle rman 跨版本恢复 11.2.0.3- 11.2.0.4
  2. winform 安装部署
  3. 【推荐】如何删除windows服务
  4. 信噪比与误码率的计算
  5. 告诉你Hadoop是什么
  6. Python-图像的手绘效果
  7. Android Gradle查询器
  8. c++ 多key_详解Zabbix自定义Key监控Rabbitmq(监控特定队列)
  9. c++ fork 进程时 共享内存_因为没答好进程间通信,面试挂了...
  10. ubuntu9.10硬盘安装记录一