《操作系统 - 清华大学》6 -5:局部页面置换算法:改进的时钟页面置换算法

文章目录

  • 1. 改进的时钟置换算法的工作原理
  • 2. 改进的时钟置换算法示例

1. 改进的时钟置换算法的工作原理

在这里插入图片描述
Clock 算法使用页表项中很重要的 access bit 来表明这个页的访问信息,但需要注意,读和写都是访问,并没有区分到底是读还是写,页表项中除了access bit 之外,还一个 dirty bit,如果这个页做写操作,那么 dirty bit 会置1,如果只是读操作,那 dirty bit 是0。这个 bit 设置也是由硬件来完成,当运行程序对某一页进行访问之后,如果是写操作,硬件会把 access bit 和 dirty bit 都置1,如果是读操作, access bit 是1,dirty bit 还是0,这个 bit 能够区分读和写。

但是区分读和写对页面置换算法有什么帮助?
如果某个页从硬盘读到内存里面来,读进来之后,程序对这个页访问全是读访问,意味着在内存中的这个页的内容和硬盘中存的内容是一致的,如果要把这一页给替换出去,其实不需要把这个页再重新写回到硬盘里去,直接把它释放掉就 OK 了,因为内容是一样的。但是如果程序在访问过程中进行写操作,意味着内存中的数据和硬盘中数据是不一致,如果要把这一页给替换出去,需要把内容写回硬盘,确保硬盘中的数据是最新数据。所以如果通过 dirty bit 判断出来这页在整个访问中没有做写操作,全是读操作,就不需要再去做一次写回操作。

所以这个 bit 可以指导提出一种更高效的 Clock 算法,称为 enhance Clock 算法或者二次机会法。把这两个 bit 都用上了来减少对硬盘的访问。

怎么减少对硬盘的访问?
在这里插入图片描述
把所有访问页搞成环形链表,但判断选择哪页时候,不是基于一个 access bit,而基于 access bit dirty bit,这两个 bit 的情况来决定应该选择哪个页给置换出去。

上图是一个例子,选择哪一页?左下角表里面给出映射关系。

  1. 如果 access bit 和 dirty bit 均为0,会把这个页找出来,替换出去。
  2. 但如果 access bit 是 0,dirty bit 是1,需要做的是把 dirty bit置为 0,然后指针继续旋转找下一页。
  3. 同理,如果 access bit 是 1,dirty bit 是 0,会把 access bit 变成 0,dirty bit 保持不变,指针继续往下走。
  4. 如果说access bit 和 dirty bit 均为1,会把 access bit 变为 0, dirty bit 变为 1 ,指针往下走,假设转一圈,发现是0 1,会变成 0 0。

所以如果一个页的这两个 bit 是1的话,那么它有两次机会让指针经过。但如果说是一个0 和 一个1,那么先变成0 0,再下次经过便被置换出去,只有一次机会。如果都是0 0,没有任何机会,它就是要找被替换出去这个页。

通过这种方式可以把经常使用的 dirty bit 页有更多的机会留在内存中,这是所谓的二次机会法,也是很形象的说法,因为这种访问模式会把写的页有更多机会留在内存中,而那种只读的页会更优先地被换出去,使得写过的页换出概率会减少,从而使得整个对硬盘的访问次数也会减少。

2. 改进的时钟置换算法示例

a b 上面的 w 表示这页的访问是写操作,不是读操作,做个细分。

  1. 初始情况下 a b c d 都是1 0,代表做了访问,都是读操作,因为dirty bit是0。
    在这里插入图片描述
  2. 接下来的4次访问 1 2 3 4,对 c 和 d 做的是读操作,对 a 和 b 是写操作,那做这4次操作之后,对于 a 和 b,从 10 变成 11,而 c 和 d 保持不变还是1 0。因为对 a 和 b 做写操作之后,硬件会把它们 dirty bit 置成1,所以当 4 这个时刻过了之后,环形链表示结构如下。
    在这里插入图片描述
  3. 接下来访问 e ,a b c d 存在,但 e 不存在,要把 a,b,c,d 换一个页出去,当产生缺页中断之后,需要看看当前应该选择哪一页给换出去,指针指向 a 位置,那么这时候 两个 bit 是11,会变成 01 ,然后指针往下走, b 也是 11 变成 01,然后再往下走, c 是10 变成00,再往下走, d 也是 10 变成 00。转一圈回来到 a,a 这时候由 0 1 变成 0 0,往下走, b 也是 01会变成0 0,也往下走, c 是 0 0,那对于 dirty bit 和 access bit 是0 0 的页,会把它作为要被换出去页,那其实换出 c,同时指针指向下个地方 d 。由于对 e 做的是读操作,所以说它会设置成1 0。
    在这里插入图片描述
  4. 接下来访问 b,所以 b 会变成10,访问 a 会变成11,因为它是写操作,又访问 b,那没有任何变化。

在这里插入图片描述

  1. 第 9 时刻访问 c, 在物理页里面不存在了,这时候就需要去置换哪一页?这时候 d 是00,那么这一页直接被替换掉,指针指向 a,同时第四项会变成 10,放的是 c。
    在这里插入图片描述
  2. 访问 d 时候又产生缺页中断,根据刚才特点,走一圈之后替换的是第二项,就是放 b 这个物理页,那么这时候会放 d,把 b 对应地换成 d。
    在这里插入图片描述
    综上,总结出来产生三次缺页中断,还是很接近 LRU 算法,优先地把只读页给换出去,而对于可写页,减少被换出的概率,使得整个内存对硬盘的读写次数会减少,所以说它是对读和写分别对待的一种更好的页置换算法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/929489.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【六足机器人】03步态算法

温馨提示:此部分内容需要较强的数学能力,包括但不限于矩阵运算、坐标变换、数学几何。 一、数学知识 1.1 正逆运动学(几何法) 逆运动学解算函数 // 逆运动学-->计算出三个角度 void inverse_caculate(double x, double y, …

【WRF后处理】WRF时区(UTC)需转化为北京时间(CST)!!!

目录 WRF运行时间标准注意事项-本地时区问题 输入数据:ERA5时间标准ERA5数据和WRF模型需要转换为北京时间!!!北京时间(CST)与协调世界时(UTC)的关系转换方法 参考 WRF运行时间标准 …

如何撰写标准操作流程(SOP):9个快速步骤

要了解一个公司日常的实际运营情况,只需查看他们的标准操作流程(SOP)即可。 尽管SOP在任何成功组织中都扮演着至关重要的角色,但它们往往声名不佳。 人们通常认为,这些针对日常任务的详细指令只是为了限制员工的灵活性…

InfluxDB 集成 Grafana

将InfluxDB集成到Grafana进行详细配置通常包括以下几个步骤:安装与配置InfluxDB、安装与配置Grafana、在Grafana中添加InfluxDB数据源以及创建和配置仪表板。以下是一个详细的配置指南: 一、安装与配置InfluxDB 下载与安装: 从InfluxDB的官…

SpringBoot项目启动报错-Slf4j日志相关类找不到

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

AI新动向:豆包文生图升级,文心一言领先市场

在今日的AI资讯中,我们关注到了几个重要的行业动态,其中包括字节跳动AI助手豆包的功能升级,以及百度文心一言在生成式AI市场的领先地位。 字节跳动旗下的智能AI助手豆包近期对其文生图能力进行了显著提升,用户现在可以通过一键操…

企业网双核心交换机实现冗余和负载均衡(MSTP+VRRP)

MSTP(多生成树协议) 通过创建多个VLAN实例,将原有的STP、RSTP升级,避免单一VLAN阻塞后导致带宽的浪费,通过将VLAN数据与实例绑定,有效提升网络速率。 VRRP(虚拟路由冗余协议) 用…

使用Edu教育邮箱免费使用JetBrains专业版

需要准备的原料: 1个Edu邮箱(最好是公立大学) / JetBrains账户 Edu邮箱是什么? Edu邮箱是由美国高校和教育机构发放的邮箱,通常以“edu”结尾。拥有这个邮箱,你不仅能享受校园内的各种福利,还能…

️️耗时一周,肝了一个超丝滑的卡盒小程序

前言 先看看成品效果: 在上个月,我出于提升自己的英语造句能力的目的,想要找一个阅读或者练习造句类的英语学习 APP,但是最终找了几个 APP 不是不太好用就是要付费。于是我转换思路,找到了一本书,叫《36…

初学者微服务Nocos快速了解使用

Windows安装部署nacos 1.Windows启动nacos服务 下载nacos安装包:下载地址(需要梯子访问):https://github.com/alibaba/nacos/releases 2.解压安装包,不要将nacos放置在中文路径下 3.在bin目录下双击startup.cmd文件 4.…

Qt Quick 开发基础 + 实战(持续更新中…)

最近更新日期:2024/12/5 目录 一、Qt Quick简介 1.3 新建Qt Quick Application工程 1.3.1 导入Qt资源文件 1.3.2 设置应用图标(Windows系统) 二、QML 2.2 import 2.2.1 import模块 2.2.2 import代码文件 2.3 属性:proper…

jmeter基础07_组件的层级

课程大纲 1. 优先级/执行顺序(一般情况) 同级组件:按组件先后顺序执行。如:同一层的线程组、同一层的http请求。 上下级组件:先执行外层(上级),再执行内层(下级&#xff…

Spring Cloud gateway 路由规则

Spring Cloud gateway 路由规则 文章目录 Spring Cloud gateway 路由规则一、路由常用属性解析1.1 示例配置1.2 属性解析 二、问题分析,springCloud微服务中没有任何路由配置,网关为什么能根据请求转发到相应的业务服务的2.1 开启,用于启用通…

一、理论基础-PSI

之前参加了隐语第2期,对隐语SecretFlow框架有了大致的了解,这次参加隐语第4期,学习下PSI和PIR。 一、PSI定义 首先介绍PSI的定义,PSI(隐私集合求交,Private Set Intersection即PSI)是安全多方计算&#x…

ZLMediaKit+wvp (ffmpeg+obs)推拉流测试

这里使用了两种方式: ffmpeg命令和 OBS OBS推流在网上找了些基本没有说明白的, 在ZLMediaKit的issues中看到了一个好大哥的提问在此记录一下 使用OBS推流,rtmp,报鉴权失败 推流 1. ffmpeg命令推流 官方说明文档地址: 推流规则 rtsp://192.168.1.4:10554…

K8S,StatefulSet

有状态应用 Deployment实际上并不足以覆盖所有的应用编排问题? 分布式应用,它的多个实例之间,往往有依赖关系,比如:主从关系、主备关系。 还有就是数据存储类应用,它的多个实例,往往都会在本地…

openEuler 知:安装系统

文章目录 前言图形化安装文本方式安装 前言 本文只介绍安装过程中需要特别注意的地方,常规的内容需要参考其它文档。 图形化安装 自定义分区: 说明:anaconda 默认分区,在 OSNAME.conf 中进行了配置,openEuler 默认根…

打通Vue3+Flask(python3)+Mysql-实现简单数据交互

一、需要准备的工具 下载python3,Vscode,pycharm(这里用的社区版),phpstudy_pro,Node.js(建议下载长期支持版本,版本不宜过低,比如18,20),Vue.js…

SpringBoot的validation参数校验

文章目录 前言一、引入validation 依赖二、validation中的注解说明 (1)Validated(2)Valid(3)NotNull(4)NotBlank(5)NotEmpty(6)Patte…

Webhook应用指南:借助mc工具实现智能自动化

欢迎来到我的博客,代码的世界里,每一行都是一个故事 🎏:你只管努力,剩下的交给时间 🏠 :小破站 Webhook应用指南:借助mc工具实现智能自动化 前言Webhook 基础知识什么是 Webhook&…