题目

操作系统中可以使用 LRU(Least Recently Used)内存淘汰旧数据的策略,如果内存需要加载新数据但空间不足,则会按照最近访问时间进行排序,并将最老的数据淘汰。假设现在内存空间大小为 5,原本内存中没有数据,对内存中数据的访问顺序如下:

1, 2, 5, 3, 4, 6,1, 4, 3, 6, 7, 8, 3, 9

问访问过程中发生缺页的次数是多少次?

A. 缺页次数:4

B. 缺页次数:10

C. 缺页次数:5

D. 缺页次数:9

知识点

要解决上面的题目,首先我们先要了解什么是缺页

缺页中断

在请求分页系统中,可以通过查询页表中的状态位来确定所要访问的页面是否存在于内存中。每当所要访问的页面不在内存时,会产生一次缺页中断,此时操作系统会根据页表中的外存地址在外存中找到所缺的一页,将其调入内存。

缺页本身是一种中断,与一般的中断一样,需要经过4个处理步骤:

1. 保护CPU现场

2. 分析中断原因

3. 转入缺页中断处理程序进行处理

4. 恢复CPU现场,继续执行

但是缺页中断时由于所要访问的页面不存在与内存时,有硬件所产生的一种特殊的中断,因此,与一般的中断存在区别:

在指令执行期间产生和处理缺页中断信号

一条指令在执行期间,可能产生多次缺页中断

缺页中断返回时,执行产生中断的那一条指令,而一般的中断返回时,执行下一条指令

还有一点就是我们必需了解 LRU 算法,这个算法使用频率还是相当的高的,因此我们也不陌生。

LRU

LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。

LRU 最常见的实现是使用一个链表保存缓存数据,详细算法实现如下:

新数据插入到链表头部;

每当缓存命中(即缓存数据被访问),则将数据移到链表头部;

当链表满的时候,将链表尾部的数据丢弃。

解题

这道题目答案选择 B ,缺页数为 10,我把解题思路弄了一个流程图出来,可以看下。

最后用 Java 来模拟一下:

java lru笔试题,2016年头条校招笔试(LRU算法)相关推荐

  1. vivo笔试题C语言,vivo校招笔试考什么?vivo在线测评笔试真题及答案解析来啦!...

    原标题:vivo校招笔试考什么?vivo在线测评笔试真题及答案解析来啦! 1 vivo校园招聘笔试简介 vivo2021校园招聘补录已经开启,今天嗖嗖就带大家看一看vivo历年在线测评笔试真题. vi ...

  2. Java工程师笔试题整理[校招篇]

    Java工程师笔试题整理[校招篇] 阿里巴巴 2016 阿里巴巴2016研发工程师笔试题(四) 阿里巴巴2016研发工程师笔试题(三) 阿里巴巴2016研发工程师笔试题(二) 2015 阿里巴巴201 ...

  3. 蘑菇街2015校招 Java研发笔试题 详解,2015java

    蘑菇街2015校招 Java研发笔试题 详解,2015java 1. 对进程和线程描述正确的是( ) A.  父进程里的所有线程共享相同的地址空间,父进程的所有子进程共享相同的地址空间. B.  改变 ...

  4. 2014宇龙酷派校招西安java类笔试题(热乎的,还冒烟呢)

    2014宇龙酷派校招西安java类笔试题(热乎的,还冒烟呢) 分类: 校招笔经 or 面经2013-09-18 16:19 674人阅读 经过了 叫人伤感的 阿里,我决定去 这些小公司找找 信心,今天 ...

  5. 用友2020校招java笔试题_用友Java类笔试题大全

    如下为大家汇总的是一份用友Java类笔试题,欢迎大家关注! 1.Hashtable和HashMap有什么区别? a.Hashtable是继承自陈旧的Dictionary类的,HashMap继承自Abs ...

  6. Java面试笔试题大汇总一(最全+详细答案)

    Java面试笔试题大汇总二(最全+详细答案)https://www.jianshu.com/p/f5120f1b75be Java面试笔试题大汇总三(最全+详细答案)https://www.jians ...

  7. Java面试笔试题大汇总三(最全+详细答案)

    Java面试笔试题大汇总一(最全+详细答案):https://www.jianshu.com/p/73b6b3d35676 Java面试笔试题大汇总二(最全+详细答案)https://www.jian ...

  8. java工程师考试题目_成功拿到Offer,Java工程师笔试题及答案!

    1.是否可以从一个static方法内部发出对非static方法的调用? 不可以.因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时 ...

  9. java字符串笔试题_五道Java常见笔试题及答案汇总

    1.String和StringBuffer的区别? 答:Java平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据.这个String类提供了数 ...

最新文章

  1. java两行两行读取问文件,正则提取两行之间所有行内容方法.
  2. 基于网络抓包实现kubernetes中微服务的应用级监控
  3. oracle银行卡号检查约束,oracle约束学习(1)unique和check
  4. CentOS下与Apache连接的PHP多版本共存方案实现详解
  5. win10打开本机telnet客户端
  6. 游戏中用到的设计模式
  7. 将文件从HDFS复制到本地
  8. 前端设置使用rem最经典代码
  9. java 线程分组_Java多线程可以分组,还能这样玩!
  10. Android代码删除通知,Android:从通知中删除通知b
  11. MongoDb进阶实践之一 如何在Linux系统上安装和配置MongoDB
  12. 嵌入式Linux系统编程学习之二十六多线程概述
  13. SAMBA用户访问指定的目录
  14. python如何用色度表示数值大小_python入门004数字(例程界面很清晰大小也合适)
  15. 稀疏贴图 SparseTexture
  16. 分立元器件——电感器
  17. 【SSM框架】MyBatis
  18. Numpy基础(二)——数组转置、计算内积和换轴
  19. postgresql获取基于当前时间计算的当月第一天,最后一天,下个月的第n天等功能
  20. 解线性方程组的迭代法--大型稀疏矩阵---松弛迭代法C++实现

热门文章

  1. (OS 10038)在一个非套接字上尝试了一个操作 的解决办法
  2. matlab 多项式降幂,MATLAB自动将向量元素按降幂顺序分配给各系数值.PPT
  3. 介绍个人计算机水平,计算机个性自我介绍范文
  4. 如何将图片存进SQL数据库中以及从数据库读取照片(解决办法)
  5. mastercam2020后处理_[后处理]Mastercam 四轴Fanuc系统MP9G后处理
  6. HTML5原生WebGL开发系列教程
  7. cpuz测试分数天梯图_处理器CPU性能天梯图表CinebenchR15Ranking2016
  8. u深度做linux启动盘,u深度启动盘制作
  9. 改进粒子滤波的无人机三维航迹预测方法(基于Matlab代码实现)
  10. html动态网页添加音频_将音频添加到网页