2016年头条校招笔试(LRU算法)

前言

上个星期跟几位朋友一起开了个公众号 “ 于你供读 ”,每日推送Android,iOS,UI,前端,产品和生活情感的文章。好了,入正题,这个星期的面试题是 今日头条的面试题。

今日头条.jpg

题目

操作系统中可以使用 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现场,继续执行

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

  1. 在指令执行期间产生和处理缺页中断信号
  2. 一条指令在执行期间,可能产生多次缺页中断
  3. 缺页中断返回时,执行产生中断的那一条指令,而一般的中断返回时,执行下一条指令

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

LRU

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

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

LRU算法.png
  1. 新数据插入到链表头部;
  2. 每当缓存命中(即缓存数据被访问),则将数据移到链表头部;
  3. 当链表满的时候,将链表尾部的数据丢弃。

解题

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

2016年头条校招笔试题:LRU算法.png

最后用 JAVA 来模拟一下:

Github:LRU.java

LRU队列.png
LRU解题.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 8.1虚拟存储的需求背景 虚拟内存是非连续内存分配的一个延续,非连续内存分配在存储空间内可以连续也可以不连续。虚拟...
    龟龟51阅读 11,169评论 2 6
  • 一、虚拟存储技术 所谓虚拟存储技术是指:当进程运行时,先将其一部分装入内存,另一部分暂留在磁盘,当要执行的指令或访...
    yjaal阅读 8,933评论 0 6
  • 舍本逐末的结果是,思想变得复杂,可是能力又上不去。
    旋律兔斯基阅读 1,196评论 0 0
  • 一 汽车沿环海公路向西行驶,到距离码头大约五公里的地方,可以看见一幢直入云端的摩天大楼。 它像一座垂直小镇,本该是...
    Deca皓阅读 4,021评论 0 2