[架构之路-188]-《软考-系统分析师》-3-操作系统 - 图解页面替换算法LRU、LFU

这篇具有很好参考价值的文章主要介绍了[架构之路-188]-《软考-系统分析师》-3-操作系统 - 图解页面替换算法LRU、LFU。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言:

一、内存置换算法的缘由

二、算法详解

2.1  最佳页面置换算法(OPT) =》 理论上的最优,实际无法保证

2.2 先进先出置换算法(FIFO)-- 按加载时间/最早访问时间排序

2.3 最近最久未使用的置换算法(LRU)-- 按最后一次访问时间排序

2.4 时钟页面置换算法(Lock)

2.5 最不频繁使用算法(LFU)=》 访问/命中次数排序


前言:

LRU、LFU是两种容易混淆的替换算法。本文就是探讨这个问题。

替换算法的本质是:在岗位总数不变的情况,来了一个新人,如何淘汰掉一个老人的算法。

看似是计算机的问题,实际上是一个非常现实的职场问题。

替换算法的基本思想:时间局部性和空间局部性原理,用过去、现在推测未来!!!

FIFO:保护的是新员工,淘汰的工龄最大的员工,对新员工最有利,对老员工不利。

LFU:保护的是历史功劳最大,淘汰的是功劳最小,对老员工有利,对新员工不利。

LRU:保护的是最近贡献最大,淘汰的是最近贡献最小的,对最近最忙的员工有利,对历史贡献大和搞预研的人不利。

无论是cache的替换算法,还是Web页面的替换算法,本质是都是新人淘汰旧人的算法。

一、内存置换算法的缘由

计算机的运行的程序数据保存在内存中,内存的空间是有限的,所运行的程序可能需要新的数据,而数据不在内存,在磁盘(硬盘)中。 CPU 访问的页面在物理内存时,便会产生一个缺页中断,请求操作系统将所缺页调入到物理内存。

对于要新加载到内存的页面,需要一定的算法来确定把哪些页面剔除出去给新的要加进来的页面让位,之所以需要算法,就是因为内存资源是有限的。所以,页面置换算法的功能是,当出现缺页异常,需调入新页面而内存已满时,选择被置换的物理页面,也就是说选择⼀个物理页面换出到磁盘,然后把需要访问的页面换入到物理页。

那其算法目标则是,尽可能减少页面的换入换出的次数,常见的页面置换算法有如下几种【1】:

  •         最佳页面置换算法(OPT)
  •         先进先出置换算法(FIFO)
  •         最近最久未使用的置换算法(LRU)
  •         时钟页面置换算法(Lock)
  •         最不常用置换算法(LFU)

备注:

替换算法的本质:替换掉未来最不可能使用的页面。

然而,未来还发生,因此,算法的本质是:用过去的经验推测未来!!!

二、算法详解

2.1  最佳页面置换算法(OPT) =》 理论上的最优,实际无法保证

最佳页面置换算法基本思路是,置换在「未来」最⻓时间不访问的页面。所以,该算法实现需要计算内存中每个逻辑页面的「下⼀次」访问时间,然后比较,选择未来最长时间不访问的页面。我们举个例⼦,假设⼀开始有 3 个空闲的物理页,然后有请求的页面序列,那它的置换过程如下图【图源自小林coding】:

lru替换策略计算过程,架构之路,架构,算法,系统分析师,操作系统,页面替换

在这个请求的页面序列中,缺页共发生了 7 次(空闲页换入 3 次 + 最优页面置换 4 次),页面置换共发生了 4 次。

第1次:7号页面,使用空闲页面替换。

第2次:0号页面,使用空闲页面替换。

第3次:1号页面,使用空闲页面替换。

第4次:2号页面,替换掉7号页面

第5次:0号页面,不需要替换,命中。

这很理想,但是实际系统中无法实现,因为程序访问页面时是动态的,我们是无法预知每个页面在「下⼀次」访问前的等待时间。所以,最佳页面置换算法作用是为了衡量你的算法的效率,你的算法效率越接近该算法的效率,那么说明你的算法是高效的。

2.2 先进先出置换算法(FIFO)-- 按加载时间/最早访问时间排序

FIFO算法的本质:淘汰掉年龄最大的,不管是过去和当下的贡献值,也不管未来是否能做贡献。

FIFO算法的核心思想是:年龄越大,未来的潜力越小!(虽然这不一定对)

年龄记录:按照加载的先后顺序排序,它保护的是最年轻的人 。

很显然,FIFO算法很不合理!!!

既然我们⽆法预知页面下⼀次访问前所需的等待时间,那我们可以选择在内存驻留时间最长,或或者说,加载到内存中最早的(有可能反复使用)的页面进行中置换,这个就是「先进先出置换」算法的思想。还是以前⾯的请求的⻚⾯序列作为例子,假设使用先进先出出置换算法,则过程如下图:

lru替换策略计算过程,架构之路,架构,算法,系统分析师,操作系统,页面替换

在这个请求的页面序列中,缺页共发生了 10 次,页面置换共发⽣了 7 次,跟最佳页面置换算法比较起来,性能明显差了很多。

这是因为,先进入的页面,不代表该页面未来就再使用,很有可能,某个页面,虽然最先加载到内存中,但会被频繁使用,如果把这种未来频繁使用的页面替换出去,就导致性能的下降。

最理想的情况就是替换到,为了可能不会使用或未来使用次数最少的页面。

2.3 最近最久未使用的置换算法(LRU)-- 按最后一次访问时间排序

LRU算法的本质是:淘汰掉最近(Recently)最空闲,没事干的那个人,不管他未来是否有事干。

LRU算法的核心思想是:最近最闲,意味着未来可能也是最闲,最没有价值。

空闲值计算方法:每命中一次,空闲值-1, 没有命中,空闲值+1,它保护过去最近最忙的人,对历史贡献大的人是不友好的,因为,随着时间的推移,历史贡献大的人,贡献值会抵消(空闲一次,空闲值-1),最近(Recently),叠加了时间的因素,对于过去功劳大,最近没有贡献的老员工是不利的。

        最近最久未使用(LRU)的置换算法的基本思路是,发生缺页时,选择最长时间没有被访问的页面进行置 换,也就是说,该算法假设:已经很久没有使用的页面很有可能在未来较长的⼀段时间内仍然不会被使用

        这种算法近似最优置换算法,最优置换算法是通过「未来」的使用情况来推测要淘汰的页面,而 LRU 则是 通过「历史」的使用情况来推测要淘汰的页面。 还是以前⾯的请求的页面序列作为例子,假设使用最近最久未使用的置换算法,则过程如下图:

lru替换策略计算过程,架构之路,架构,算法,系统分析师,操作系统,页面替换

在这个请求的页面序列中,缺页共发⽣了 9 次,页面置换共发⽣了 6 次,跟先进先出置换算法⽐较起 来,性能提高了⼀些

虽然 LRU 在理论上是可以实现的,但代价很高。为了完全实现 LRU,需要在内存中维护⼀个所有页面的 链表,最近最多使用的页面在表头,最近最少使用的页面在表尾。 困难的是,在每次访问内存时都必须要更新「整个链表」。在链表中找到⼀个页面,删除它,然后把它移 动到表头是⼀个⾮常费时的操作。

所以,LRU 虽然看上去不错,但是由于开销比较大,实际应用中比较少使用。

2.4 时钟页面置换算法(Lock)

时钟页面置换算法就可以两者兼得,它跟 LRU 近似,又是对 FIFO 的⼀种改进。

该算法的思路是,把所有的页面都保存在⼀个类似钟面的「环形链表」中,⼀个表针指向最老的页面。 当发生缺页中断时,算法首先检查表针指向的页面: 如果它的访问位位是 0 就淘汰该页面,并把新的页面插入这个位置,然后把表针前移⼀个位置; 如果访问位是 1 就清除访问位,并把表针前移⼀个位置,重复这个过程直到找到了⼀个访问位为 0 的 页面为止;

lru替换策略计算过程,架构之路,架构,算法,系统分析师,操作系统,页面替换

2.5 最不频繁使用算法(LFU)=》 访问/命中次数排序

LFU算法的本质:替换掉贡献最小的那个人

LFU核心思想是:过去贡献最小,未来可能贡献最小。

衡量贡献大小的方法:每命中(使用)一次,贡献值+1,它保护的是贡献最大的人,贡献大不受时间推移的影响和消耗,但对不忙的人,没有考量。

        最不常用(LFU)算法,这名字听起来很调皮,但是它的意思不是指这个算法不常用,而是当发生缺页中 断时,选择「访问次数」最少的那个页面,并将其淘汰

它的实现方式是,对每个页面设置⼀个「访问计数器」,每当⼀个页面被访问时,该页面的访问计数器就累加 1。在发生缺页中断时,淘汰计数器值最小的那个页面

看起来很简单,每个页面加⼀个计数器就可以实现了,但是在操作系统中实现的时候,我们需要考虑效率和硬件成本的。 要增加⼀个计数器来实现,这个硬件成本是比较高的.

另外如果要对这个计数器查找哪个页面访问次数最 小,查找链表本身,如果链表长度很大,是非常耗时的,效率不高。

但还有个问题,LFU 算法只考虑了频率问题没考虑时间的问题,比如有些页面在过去时间里访问的频率很高,但是现在已经没有访问了,而当前频繁访问的页面由于没有这些页面访问的次数高,在发生缺页中 断时,就会可能会误伤当前刚开始频繁访问,但访问次数还不高的页面。 那这个问题的解决的办法还是有的,可以定期减少访问的次数,比如当发生时间中断时,把过去时间访问的页面的访问次数除以 2,也就说,随着时间的流失,以前的高访问次数的页面会慢慢减少,相当于加大 了被置换的概率。

缺点:

过去访问多的页面,不代表未来访问次数越多,比如循环结束后的页面,未来很有可能就不再访问了。文章来源地址https://www.toymoban.com/news/detail-810567.html

到了这里,关于[架构之路-188]-《软考-系统分析师》-3-操作系统 - 图解页面替换算法LRU、LFU的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [架构之路-152]-《软考-系统分析师》- 8-软件工程-2-软件工程的N维矩阵模型与软件开发方法(形式化方法、逆 向 工 程)

    8.1  软件工程的矩阵模型 横轴X(时间):是软件的生命周期 :需求分析=》架构设计=》编程实现=》测试=》版本发布=》部署运行 纵轴Y1维度/视角:软件开发活动, 不同什么周期阶段,有不同的开发活动,包括需求规格、设计文档、编码、测试规范、测试用例等活动。 纵轴

    2024年02月05日
    浏览(70)
  • 【系统分析师之路】2022上论文写作历年真题

    2022上论文写作历年真题第一题(75分) 试题一 论原型法及其在信息系统开发中的应用 作为一种信息系统开发方法,原型法( Prototyping )被普遍使用,原型法是指在获取一组基本的需求定义后,利用可视化的开发工具,快速建立一个目标系统的初始版本,并交由用户试用,并

    2024年02月08日
    浏览(50)
  • 系统分析师:全程指导例题

    题解:这里假设能并行处理,画流水线时空图如下: 这里可以看到,处理4个数据需要15At,因此实际速率是4/15At,流水线效率为忙碌时间与总时间对比,也可以看成忙碌时空区/总时空区,即6*4/15*4=2/5。选择D和B。另外:加速比则是不启用流水线和启用流水线的时间比。 题解:

    2024年02月07日
    浏览(55)
  • 系统分析师知识点汇总

    目录 1.计算机组成 1.1计算机组成与分类 1.1.1计算机的组成 1.2.1主存储器(内存) 1.2.2辅助存储器(外存磁盘如硬盘) 1.2.3Cache缓存 1.3输入输出接口 1.3.1输入输出方式 1.3.2总线和接口 1.4各种体系结构 1.4.2流水线技术 1.4.3并行处理 1.4.4互联网络 2.操作系统 2.1操作系统的类型与结

    2023年04月08日
    浏览(90)
  • 2022系统分析师案例分析真题背记内容

    以下内容仅为个人根据当年系分案例真题问题整理的偏需要记背的考点答案,方便个人背诵和记忆使用。方便文字转语音,所以内容全为纯文字内容,以下内容仅供参考。 1.数据流图: 数据流图的特点:通过系统内数据的流动来描述系统功能的-一种方法。强调系统中的数据流动

    2024年02月06日
    浏览(49)
  • 系统分析师:七、软件工程(含系统规划)

            软件生命周期分为5个:获取过程、供应过程、开发过程、运行过程、维护过程,具体如下:         该方法的思想是利用形式化语言,严格定义需求,并用数据推演的方法证明需求的性质。形式化规格包含了严格的语法定义以及一系列数据推演规则。         2.1

    2024年02月07日
    浏览(52)
  • 系统分析师每日练习错题知识点

    计算机网络: RIP协议存在的一个问题就是当网络出现故障的时候,要经过比较长的时间才能把信息传送到所有的路由器。在这个中间过程中,实际就是路由环路的问题;当发生路由环路的时候,路由表会频繁的进行变化,从而导致路由表中的一条或者几条,都无法收敛,结果

    2024年02月09日
    浏览(59)
  • 系统分析师之信息化技术(十一)

    目录 一、企业信息化概述 1.1 信息系统的基本概念 1.1.1 什么是信息 1.1.2 什么是信息化 1.1.3 信息系统分类 二、企业信息化规划 2.1 信息化战略体系 2.2 企业战略与信息化战略集成方法 三、信息系统开发方法 3.1 信息系统开发方法 3.2 系统建模 四、信息系统战略规划方法 五、电

    2023年04月26日
    浏览(55)
  • 系统分析师---论软件开发模型及应用

    论题:论软件开发模型及应用 软件开发模型(Software Development Model)是指软件开发全部过程、活动和任务的结构框架。软件开发过程包括需求、设计、编码和测试等阶段,有时也包括维护阶段。软件开发模型能清晰、直观地表达软件开发全过程,明确规定了要完成的主要任务

    2024年02月04日
    浏览(52)
  • 2023系统分析师---论软件项目管理技术及应用(内部信息)

    试题:“论软件项目管理”技术及其应用。 软件项目管理是为了使软件项目能够按照预定的成本、进度和质量顺利完成,对人员、产品、过程和项目进行分析和管理的活动。软件项目管理的根本目的是为了让软件项目,尤其是大型软件项目的整个生命周期都能在管理者的控制

    2024年02月06日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包