操作系统之页面置换算法(FIFO、LFU、LRU、OPT算法)

TIPS:

主存:实际上的物理内存。

虚存(虚拟内存):虚拟存储技术。虚拟内存使计算机系统内存管理的一种技术。它使得应用程序认为它拥有的可用的内存(一个连续完整的地址空间),而实际上,它通常被分割成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。目前,大多数操作系统都是用了虚拟内存,如Windows家族的“虚拟内存”;Linux的“交换内存”等。
  电脑虚拟内存,根据本机物理内存大小和使用率来定,才能达到最好的效果。虚拟内存的原理就是用软件将物理磁盘模拟成内存状态,以供缓存。如果物理内存较小,有明显的不够用的情况,可以设置为物理内存的2-3倍大小,如果物理内存够大,明显够用的时候,则不需要设置很大的虚拟内存,设置为物理内存的1倍就可。

前言

  在我们的系统中经常使用缓存,比如说redis缓存或者是guava缓存等(常用于提升数据查询速度)。由于缓存容量有限,当缓存容量达到上限时,就需要删除部分数据挪出空间,这样新数据才可以添加进来。缓存数据不能随机删除,一般情况下我们需要根据某种算法删除缓存数据。常用淘汰算法有LRU,LFU,FIFO

先进先出算法(FIFO算法)-队列类

  这种算法选择最先调入主存储器的页面作为被替换的页面。它的优点是比较容易实现,能够利用主存储器中页面调用情况的历史信息,但是,没有反映程序的局部性。因为最先调入主存的页面,很可能也是经常要使用的页面。

近期最少使用算法(LFU算法)-堆栈类

  这种算法选择近期最少访问的页面作为被替换的页面。显然,这是一种非常合理的算法,因为到目前为止最少使用的页面,很可能也是将来最少使用的页面。该算法即充分利用了主存中页面调度情况的历史信息,又正确反映了程序的局部性。但是,这种算法实现起来比较困难。

最久没有使用算法(LRU算法)-堆栈类

  这种算法把近期最久没有被访问过的页面作为被替换的页面。它把LFU算法中要记录数量上的“多”与“少”简化成判断“有”与“无”,因此,它实现起来比较容易

  LRU是Least Recently Used的缩写,即最近最少使用页面置换算法。这个算法会认为最近使用的数据是热门数据,下一次很大概率将会被再次使用。而最近很少被使用的数据,很大概率下一次不再用到。当缓存容量满的时候,优先淘汰最近很少使用的数据。
  假设现在缓存内部数据如下图所示(即该缓存只能存储五个数据):

  当调用缓存获取key = 1的数据,LRU算法需要将1这个几点移动到头节点,其余节点不变,如图所示。

  新来的数据直接添加到头节点,将末尾的数据删除。


  这里总结一下LRU算法的具体步骤:

  • 新数据直接插入到列表头部
  • 缓存数据被命中,将数据移动到列表头部
  • 缓存已满的时候,移除列表尾部数据。

实现的数据结构

  1. 双向链表(查询时间复杂度为O(N))
  2. 哈希表(底层是数组+链表,在不发生哈希碰撞的情况下查询的时间复杂度是O(1))

最优替换算法(OPT算法)

  上几种替换算法主要是以主存储器中页面调度的历史情况为依据的,它假设将来主存储器中的页面调度情况与过去一段时间内主存储器中的页面调度情况相同。显然,这种假设不总是正确的。最好的算法应该是选择将来最久不被访问的页面作为被替换的页面,这种替换算法的命中率一定是最高的,它就是最优替换算法。

操作系统之页面置换算法(FIFO、LFU、LRU、OPT算法)相关推荐

  1. 操作系统:页面置换算法(FIFO算法、LRU算法、LFU算法、NRU算法)实验报告

    操作系统实验报告 一.实验名称 :页面置换算法 二.实验目的: 在实验过程中应用操作系统的理论知识. 三.实验内容: 采用C/C++编程模拟实现:FIFO算法.LRU算法.LFU算法.NRU算法四个页 ...

  2. 操作系统实验--页面置换算法(OPT/FIFO/LRU/LFU)cpp

    前言 学习笔记 void IntoPage(int m);//将第m条指令转化为对应的页数 int isInside(int number,int Msize);//判断页号是否在内存中 void O ...

  3. 操作系统:页面置换算法(LRU、FIFO、OPT)

    继续重温操作系统系列知识,页面置换的三种常见算法为:LRU(最近最久未使用).FIFO(先进先出).最佳置换. 部分公司的面试会考到LRU的知识. LRU置换算法 所谓LRU置换算法,单看字面意思较为 ...

  4. 操作系统 页面置换算法FIFO与LRU的实现

    FIFO FIFO算法是最早出现的置换算法.该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰. LRU 最近最久未使用(LRU)的页面置换算法是根据页面调入内存后的使用情况做 ...

  5. 操作系统实验--存储管理--页面置换算法--FIFO and LRU c++实现

    #include<iostream> #include <stdio.h> #include <stdlib.h> #include <time.h> ...

  6. Cache与页面置换算法FIFO、LRU等

    1 Cache与存储结构 (1) 定义 狭义的Cache指的是位于CPU和主存间的快速RAM, 通常它不像系统主存那样使用动态随机存取存储器(Dynamic Random Access Memory, ...

  7. 页面置换算法 FIFO和LRU 及各自的命中率

    (1) 先进先出算法FIFO:该算法的实质是选择作业中在主存驻留时间最长的一页淘汰,这种算法容易实现,例如分配一个作业的存储块数为m,则只需建立一张m个元素的队列表Q(0).Q(1).-.Q(m-1) ...

  8. 页面置换 FIFO LRU OPT 算法在不同内存容量下的命中率(JAVA实现)

    页面置换算法 目的:深入掌握内存调度算法的概念原理和实现方法. 设计要求:编写程序实现: 先进先出页面置换算法(FIFO) 最近最久未使用页面置换算法(LRU) 最佳置换页面置换算法(OPT) 专题: ...

  9. 请求分页系统中的置换算法(FIFO、LRU、Optimal)

    操作系统实验导航 实验一:银行家算法 https://blog.csdn.net/weixin_46291251/article/details/115384510 实验二:多级队列调度和多级反馈队列 ...

最新文章

  1. Docker(四):Docker 三剑客之 Docker Compose
  2. 从零开始入门 K8s | 应用存储和持久化数据卷:核心知识
  3. n个人选k个c语言_leetcode之第k个缺失的正整数
  4. Windows 下用 SecureCRT 连接 VirtualBox 中的 Ubuntu
  5. python创建变量score_关于Python创建类时的self参数和__init__
  6. pip matplotlib 使用镜像源,pytorch 1.5 cpu
  7. 【成长之路】【python】python基础2
  8. or导致索引失效的解决方法_电容引脚断裂失效的机理和解决方法
  9. 线程同步(互斥锁与信号量的作用与区别)
  10. 数据库系统概论-绪论
  11. Keil 5安装教程(C51与MDK共存)
  12. 武汉大学惯性导航课程精要
  13. FiddlerScript实现对QQ空间账号密码获取
  14. Windows 2003 Server报 由于这台计算机没有远程桌面客户端访问许可证
  15. 公告丨Dex.top(大力士)上线Opengram (GRAM)
  16. JDG人脸识别课堂管理系统全栈开发流程报告-软件工程实践报告
  17. re.findall 用法
  18. uboot编译中遇到的错误
  19. 我的中软国际实习Day16
  20. 关于思考和深度思考的真相

热门文章

  1. 网页实现excel下载
  2. WebGL着色器内置变量gl_PointSize、gl_Position、gl_FragColor、gl_FragCoord、gl_PointCoord
  3. 检测电池电量和充电状态
  4. 自定义notepad++ --添加插件SourceCookifier
  5. 节拍器在学习音乐过程中起到什么作用?-小星星节拍器怎么样?
  6. 板载SoC与插槽CPU
  7. WEB前端学习 (3)CSS复习二 ( 复合选择器+元素显示模式+ 背景)
  8. uni-app支付宝小程序map地图组件基础操作+画多边形+打点连线
  9. 显卡告别3D游戏迈向通用计算时代
  10. 七宗罪:我们是如何错误预估人工智能的