《操作系统 - 清华大学》6 -4:局部页面置换算法:时钟页面置换算法 (Clock)

文章目录

  • 1.时钟置换算法的工作原理
  • 2.时钟置换算法的具体实现过程
  • 3. 时钟置换算法示例

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

需要考虑有没有新的办法,既能有 LRU 算法这种效果,产生缺页次数比较少,同时实现的效率比较简洁和方便,有点类似于 FIFO,只需要维护一个简单 List 就 OK 了。为此提出一种基于时钟的页面置换算法。这是一个形象的比喻,因为它整个处理过程像对闹钟在做相应的操作,所以叫做 clock 页面置换算法。

本来为了精确地统计每页的访问时间,要搞一个链表或者堆栈,那链表或堆栈的顺序,就意味着访问时间的顺序,那精确地记录其实带来开销很大。第一要插到相应的位置,第二还需要查找。

那能不能用一种不太精确,但是能够近似地表明访问的先后顺序的状态呢?
在这里插入图片描述
在这里插入图片描述
在前面讲页表时候,一个页表项存的是这个页帧号,这个页表项的 index 是页号,页表项里面的内容很重要是页号,这样页帧号和页号就有对应关系了,知道页号,可以知道页帧号,就可以查对应的地址。

除了页帧号之外,还有一些 bit,这些位有很重要的含义。其中有一位叫访问位 access bit ,当程序访问这个页之后,它会把这个页表项中 bit 给置1,置1的过程是由硬件来完成,整个置1过程不需要软件参与,由硬件来完成。当 CPU 访问某个页时候,它会把这个页对应的页表项的 access bit 给置1,这样的话根据这个access bit ,可以把它作为一个粗略的估计,如果这个页被置1,认为这个页最近被访问了,如果这个页是0,认为这个页最近没有被访问。

它只用一个 bit 来表示时间信息,这个表示肯定是不精确的,但它是有效的,clock 算法充分利用这个 access bit 来完成对这个访问时间的粗略估计,同时把这个程序访问的所有页面组成一个环形的链表,这时候通过一个指针指向当前是否要去探测这个页是否是最老页。把它做一个指标来探测,那这个指针走一圈,不停地在走,不停地在转,来查找来判断这个页是不是老页,如果是老页就把它换出去,但需要注意,这个老是一个近似的老,或者相对老,它不像刚才说 LRU 算法,那找的确实是最老的页,这也是不太一样。

2.时钟置换算法的具体实现过程

在这里插入图片描述

那它怎么来判断老和不老?就是看那个 access bit ,因为硬件访问某一个页之后,把那个页对应页表项中 access bit 给置1,然后操作系统定期会把那个 bit 给清零,操作系统定期清零,进程一旦访问这个页并且access bit 为1,那可以简单地、粗略地估计说这个页最近被访问了,如果是0,意味着有段时间没被访问。

clock 算法通过把所有的页组成一个环形链表,有一个指针,就像时钟一样,指针不停地扫描这个页表,看看access bit 是 0 还是1,如果是1,它认为这个页正在被访问,如果是0,认为这个页有段时间没访问,认为是老页,认为这个页可以被换出去,这种方式就可以把老页给找出来。它里面依据是 access bit,这个是很重要一个特例。

基于上图来看,假设运行程序有5个物理页帧,它可能在系统里面要访问的虚拟页有8个,建好一个环形的 List, 虚拟页有 7 4 0 3 1,这5个虚拟页放物理内存中:

  1. 同时最左边这一位代表它是否存在,如果是1,代表这个页在物理内存中存在,一旦存在代表这个映射关系是正常的
  2. 第二位代表 access bit,如果是1代表当前这个页已经被访问一次,然后硬件把它置1了
  3. 再后面 0 3 4 1 5 是页帧号

这里面首先要关注它的映射是合理的,即存在位必须是1,假定它们都是1了,Clock 算法依据第二个 bit,以这个 bit 作为置换依据。 Cloud 算法首先有一个指针,指针指向了它上一次访问的位置,访问这个环形列表的位置。这时候这个程序还在正常地跑,当它访问某一页产生了缺页中断,它需要去把新的页调到物理内存中来,发现5个物理页帧已经满了,那需要替换,怎么替换?

  1. 从当前指针指向页目录项来看它的情况,当前指针指向虚拟页0对应的页表项,页表项里面access bit 是1,意味着这个页最近刚被访问过。所以它做处理时,第一要把这个 bit 清零,同时指针顺时针往下挪一格,去看下一个页表项存的信息是什么。
  2. 然后再找页号为 3 的页表项,看它的access bit也是1,再挪一格。
  3. 依此类推,一直找到 access bit 为0的页表项,一旦找到,这个页表项对应的物业页帧就应该被替换出去。比如这里面虚拟页为1的页表项,它就会替换出去,会替换成当前缺页时候需要访问的虚拟页号,就把那个页面内容填到这个物理页里面去。

简单地再回顾一下怎么来做,把所有这些页形成一个 List 环,指针指向当前被置换页的位置,然后判断 access bit 为1,就把它清 0,然后去寻找下个位置,为0,把这个页拎出来作为要去替换的页,这就是 Clock 算法。

3. 时钟置换算法示例

同样的序列,如果采取 Clock 算法,那和 LRU 算法和 FIFO 算法相比,它会产生多少缺页中断?

  1. 完全一样的初始条件和访问序列,前四次访问序列是 c a d b,因为 a,b,c,d 都已经在物理页帧中,由于访问 4 次之后,硬件会把 access bit 置成1,指针指向 a 位置。
    在这里插入图片描述
    在这里插入图片描述

  2. 接下来访问 e 时候,产生了一次缺页中断,基于 Clock 算法,首先看当前指针指向那个位置它的 access bit 是多少,如果是 1 把它变成 0,然后指针继续旋转往下挪,如果是1,继续变成0,走一圈,都把它变成0,再回来第二次再访问 a 的时候,是第一次碰到0,那么这个页就会做被替换页,同时这个指针指向下一个位置 b,替换 a 之后,a 的位置放虚拟页 e 的内容,所以 e的 access bit 是 1 ,硬件置 1 了,但是它的内容已经从 a 变成了 e。
    在这里插入图片描述

  3. 接下来再访问 b ,需要注意,虽然没有产生中断,但是硬件会把它的 b 的 access bit 置成1。
    在这里插入图片描述

  4. 访问 a,时钟指向的是 b 这个位置,所以说会把它变成 0,同时指针跳到下一项 c,因为c 的access bit 是 0,所以要替换页是c,替换掉之后会把 a 放进去,同时把 access bit 置1,指针指向下一个。
    在这里插入图片描述

  5. 再接下来访问的是 b,需要注意刚才 b 的 access bit 是0,所以硬件会把它置成1.
    在这里插入图片描述

  6. 再接下来访问 c, 由于 d 的 access bit 是0,则开始就把这个页找到了, d 替换出去,所以把放 d 位置 换成 c,同时指针移到下一项 e
    在这里插入图片描述

  7. 又访问 d,从 e 这位置开始往下走,接下来的四项都是1,那转一圈,转回来之后把第一项 e 给它替换掉,存成 d,同时执行下一个。
    在这里插入图片描述
    可以看到它产生了四次缺页中断,比 LRU 要稍微差一些,与FIFO 差不多,当然这个序列给得很短,在实际系统里面,Clock 页面置换算法和 LRU 算法的缺页中断次数其实接近,因为它用了一个 bit 来模拟了整个历史信息,它不精确,所以它达不到 LRU 最佳的效果,但是可以接近这个效果。

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

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

相关文章

Centos7安装MySQL8.0详细教程(压缩包安装方式)

本章教程,主要介绍如何在Centos7上安装MySQL8.0版本数据库(压缩包安装方式) 一、卸载系统自带的 Mariadb 1、查询 rpm -qa|grep mariadb2.、卸载 如果有查询结果,就进行卸载,没有就跳过该步骤。 rpm -e --nodeps mar…

brew安装mongodb和php-mongodb扩展新手教程

1、首先保证macos下成功安装了Homebrew, 在终端输入如下命令: brew search mongodb 搜索是不是有mongodb资源, 演示效果如下: 2、下面来介绍Brew 安装 MongoDB,代码如下: brew tap mongodb/brew brew in…

Flink四大基石之CheckPoint(检查点) 的使用详解

目录 一、Checkpoint 剖析 State 与 Checkpoint 概念区分 设置 Checkpoint 实战 执行代码所需的服务与遇到的问题 二、重启策略解读 重启策略意义 代码示例与效果展示 三、SavePoint 与 Checkpoint 异同 操作步骤详解 四、总结 在大数据流式处理领域,Ap…

springboot旅游管理系统的设计与实现

springboot旅游管理系统的设计与实现 如需源码pc端👉👉👉资源 手机端👉👉👉资源 摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于…

16asm - 汇编介绍 和 debug使用

文章目录 前言硬件运行机制微机系统硬件组成计算机系统组成8086cpu组织架构dosbox安装配置debug debug使用R命令D命令E命令U命令T命令A命令标志寄存器 总结 前言 各位师傅大家好,我是qmx_07,今天给大家讲解 十六位汇编 和 debug调试器的使用 硬件运行…

多级缓存设计实践

缓存是什么? 缓存技术是一种用于加速数据访问的优化策略。它通过将频繁访问的数据存储在高速存储介质(如内存)中,减少对慢速存储设备(如硬盘或远程服务器)的访问次数,从而提升系统的响应速度和…

鸿蒙开发-HMS Kit能力集(地图服务、华为支付服务)

地图服务 Map Kit(地图服务)是鸿蒙生态下的一个地图服务,为开发者提供强大而便捷的地图能力,助力全球开发者实现个性化地图呈现、地图搜索和路线规划等功能,轻松完成地图构建工作。 Map Kit提供了千万级别的 Poi&…

【k8s深入学习之 event 记录】初步了解 k8s event 记录机制

event 事件记录初始化 一般在控制器都会有如下的初始化函数,初始化 event 记录器等参数 1. 创建 EventBroadcaster record.NewBroadcaster(): 创建事件广播器,用于记录和分发事件。StartLogging(klog.Infof): 将事件以日志的形式输出。StartRecording…

STM32 ADC --- 知识点总结

STM32 ADC — 知识点总结 文章目录 STM32 ADC --- 知识点总结cubeMX中配置注解单次转换模式、连续转换模式、扫描模式单通道采样的情况单次转换模式:连续转换模式: 多通道采样的情况禁止扫描模式(单次转换模式或连续转换模式)单次…

如何打开链接中的网址

文章目录 1 概念介绍2 使用方法3 示例代码我们在上一章回中介绍了包管理相关的内容,本章回中将介绍如何使用url_launcher包.闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 我们在这里介绍url_launcher包主要用来打开Url中的内容,Url可以是电话号码,网址,邮箱等内容。如…

cpp的set

一、关联式容器和键值对 1.关联式容器 关联式容器也是用来存储数据的&#xff0c;与序列式容器不同的是&#xff0c;其里面存储的是<key, value>结构的键值对&#xff0c;在数据检索时比序列式容器效率更高 2.键值对 用来表示具有一一对应关系的一种结构&#xff0c;…

Vue3学习宝典

1.ref函数调用的方式生成响应式数据&#xff0c;可以传复杂和简单数据类型 <script setup> // reactive接收一个对象类型的数据 import { reactive } from vue;// ref用函数调用的方式生成响应式数据&#xff0c;可以传复杂和简单数据类型 import { ref } from vue // 简…

数据结构——排序第三幕(深究快排(非递归实现)、快排的优化、内省排序,排序总结)超详细!!!!

文章目录 前言一、非递归实现快排二、快排的优化版本三、内省排序四、排序算法复杂度以及稳定性的分析总结 前言 继上一篇博客基于递归的方式学习了快速排序和归并排序 今天我们来深究快速排序&#xff0c;使用栈的数据结构非递归实现快排&#xff0c;优化快排&#xff08;三路…

数字经济发展的新视角:数字产业化、数据资产化、产业数字化与数据产业

在当今数字化、网络化和智能化的时代&#xff0c;数字经济的快速发展催生了一系列新兴概念&#xff0c;其中“数字产业化、数据资产化、产业数字化与数据产业”尤为引人注目。这四个概念不仅代表了数字经济发展的不同阶段和方向&#xff0c;也深刻影响着传统产业的转型升级和经…

springboot370高校宣讲会管理系统(论文+源码)_kaic

毕 业 设 计&#xff08;论 文&#xff09; 高校宣讲会管理系统设计与实现 摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c…

ansible自动化运维(一)配置主机清单

目录 一、介绍 1.1了解自动化运维 1.2 ansible简介 1.3 ansible自动化运维的优势 1.4 ansible架构图 二、部署ansible 2.1 基本参数 2.2 Ansible帮助命令 2.3 配置主机清单 2.3.1 查看ansible的所有配置文件 2.3.2 /etc/ansible/ansible.cfg常用配置选项 2.3.3 ssh密…

计算机网络 —— HTTP 协议(详解)

前一篇文章&#xff1a;网页版五子棋—— WebSocket 协议_网页可以实现websocket吗-CSDN博客 目录 前言 一、HTTP 协议简介 二、HTTP 协议格式 1.抓包工具的使用 2.抓包工具的原理 3.抓包结果 4.HTTP协议格式总结 三、HTTP 请求 1. URL &#xff08;1&#xff09;UR…

GaussDB的BTree索引和UBTree索引

目录 一、简介 二、BTree索引和UBTree索引结构 三、BTree索引和UBTree索引优势 四、总结与展望 一、简介 数据库通常使用索引来提高业务查询的速度。本文将深入介绍GaussDB中最常用的两种索引&#xff1a;BTree索引和UBTree索引。我们将重点解读BTree索引和UBTree索引的存储…

通义灵码走进北京大学创新课堂丨阿里云云原生 10 月产品月报

云原生月度动态 云原生是企业数字创新的最短路径。 《阿里云云原生每月动态》&#xff0c;从趋势热点、产品新功能、服务客户、开源与开发者动态等方面&#xff0c;为企业提供数字化的路径与指南。 趋势热点 &#x1f947; 通义灵码走进北京大学创新课堂&#xff0c;与 400…

python 练习题

目录 1&#xff0c;输入三个整数&#xff0c;按升序输出 2&#xff0c;输入年份及1-12月份&#xff0c;判断月份属于大月&#xff0c;小月&#xff0c;闰月&#xff0c;平月&#xff0c;并输出本月天数 3&#xff0c;输入一个整数&#xff0c;显示其所有是素数因子 4&#…