当前位置: 首页 > news >正文

操作系统

1、页面置换算法:FIFO 、LRU、LFU

腾讯面试时被问了,“怎么设计服务器缓存”,“你是指硬件上的吗?”,“都一样”!!!

Cache是个传统的课题,在处理机、操作系统和数据库等领域都有深入的研究.传统的cache替换算法有LFU(least frequency used)和LRU(least recently used)及LRU的变种LRFU和LRU-K等. LRU是将上一次使用时间最短的数据优先存放在cache中. LFU则是将过去使用频率高的数据优先保存在cache中.这两种算法代表了两个极端,LFU使用数据的访问频率,有利于数据的总体优化使用,但不利于数据访问方式的变化和猝发访问.LRU依据最近一次的访问时间,能较好地适应数据访问的变化,但只是在访问时间上的局部优化,没有考虑数据长期的访问特性.有一些算法试图在数据的访问时间和访问频率两方面达到平衡.如LRFU算法给近几次访问时间乘上一个与访问频率有关的权重,以加权值来取得两者之间的平衡.LRU-K算法则是使用最后第K次访问时间来扩展LRU算法,依靠K值的大小进行平衡.它们都是对访问时间的修正,是对LRU算法的改进.

 

LRU和LFU是不同的!

LRU是最近最少使用页面置换算法(Least Recently Used),也就是首先淘汰最长时间未被使用的页面!

LFU是最近最不常用页面置换算法(Least Frequently Used),也就是淘汰一定时期内被访问次数最少的页!

比如,第二种方法的时期T为10分钟,如果每分钟进行一次调页,主存块为3,若所需页面走向为2 1 2 1 2 3 4

注意,当调页面4时会发生缺页中断

若按LRU算法,应换页面1(1页面最久未被使用) 但按LFU算法应换页面3(十分钟内,页面3只使用了一次)

可见LRU关键是看页面最后一次被使用到发生调度的时间长短,

而LFU关键是看一定时间段内页面被使用的频率!

 

也就是说:
LRU算法适合:较大的文件比如游戏客户端(最近加载的地图文件)
LFU算法适合:较小的文件和教零碎的文件比如系统文件、应用程序文件
其中:LRU消耗CPU资源较少,LFU消耗CPU资源较多。

 

转载于:https://www.cnblogs.com/fridayc/p/4029866.html

相关文章:

  • 《Java编程思想》读书笔记-对象导论
  • 烟波钓叟歌
  • React-setState杂记
  • Android开发学习笔记:浅谈GridView
  • 我从来不理解JavaScript闭包,直到有人这样向我解释它...
  • ExtJs自学教程(1):一切从API開始
  • Create React App 使用
  • 演练5-5:Contoso大学校园管理系统5
  • [USACO12DEC]逃跑的BarnRunning Away From…
  • SpiderData 2019年2月13日 DApp数据排行榜
  • css按钮渐变色
  • 如何胜任知名企业的商业数据分析师?
  • 网站优化技术
  • AI和ML自动化测试是骗人的营销手段吗?
  • C# U盘扫描
  • 【css3】浏览器内核及其兼容性
  • 【技术性】Search知识
  • echarts的各种常用效果展示
  • es6(二):字符串的扩展
  • k8s 面向应用开发者的基础命令
  • Mac转Windows的拯救指南
  • magento2项目上线注意事项
  • MySQL几个简单SQL的优化
  • Node + FFmpeg 实现Canvas动画导出视频
  • PHP的Ev教程三(Periodic watcher)
  • SpiderData 2019年2月16日 DApp数据排行榜
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 聊一聊前端的监控
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 配置 PM2 实现代码自动发布
  • 批量截取pdf文件
  • 区块链分支循环
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 最简单的无缝轮播
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (附源码)计算机毕业设计大学生兼职系统
  • (十六)Flask之蓝图
  • (五)关系数据库标准语言SQL
  • .net MySql
  • .Net 垃圾回收机制原理(二)
  • .NET 中创建支持集合初始化器的类型
  • .NET程序员迈向卓越的必由之路
  • .net反混淆脱壳工具de4dot的使用
  • .net快速开发框架源码分享
  • .NET与 java通用的3DES加密解密方法
  • .sh文件怎么运行_创建优化的Go镜像文件以及踩过的坑
  • @require_PUTNameError: name ‘require_PUT‘ is not defined 解决方法
  • [ 代码审计篇 ] 代码审计案例详解(一) SQL注入代码审计案例
  • [ 隧道技术 ] 反弹shell的集中常见方式(二)bash反弹shell
  • [C#] 基于 yield 语句的迭代器逻辑懒执行
  • [C#7] 1.Tuples(元组)
  • [CareerCup] 14.5 Object Reflection 对象反射