[操作系统] 页面置换算法(二)

操作系统(六):页面置换算法 1页面置换算法 目录 1.1 功能目标 功能:当缺页中断发生,需要调入新的页面而内存已满时,选择内存当中哪个物理页面被置换。 目标:尽可能减少页面的换入换出次数(即缺页中断的次数)。把未来不再使用的或短期内较少使用的页面换出,通常只能在局部性原理的指导下依据过去的统计数据来进行预测。 页面锁定(frame locking):用于描述必须常驻内存的操作系统的关键部分或时间关键(time-critical)的应用进程。实现方法是,在页表中添加锁定标志位(lock bit)。 实验环境示例.. 阅读详情

页面置换算法(二)



1. 工作集基本概念

1. 什么是工作集

在单纯的分页系统里,刚启动进程时,在内存中并没有页面。在CPU试图读取第一条指令时就会产生一次缺页中断,使操作系统装入含有第一条指令的页面。其他由访问全局数据和堆栈引起的缺页中断通常会紧接着发生。一段时间后,进程需要的大部分页面都已经在内存了,进程开始在较少缺页中断的情况下运行。这个策略称为请求调页,因为页面是在需要时被调入的,而不是预先装入。

大部分进程在工作时表现出了一种局部性访问行为,即在进程运行的任何阶段,它都只是访问较少的一部分页面。而进程当前正在使用的页面的集合被称作它的工作集。

显而易见,如果整个工作集都被装入到了内存中,那么进程在运行到下一运行阶段之前,不会产生很多缺页中断。但若内存太小而无法容纳整个工作集,那么进程在运行过程中就会产生大量的缺页中断。若每执行几条指令程序就发生一次缺页中断,就称这个程序发生了颠簸。

2. 工作集模型

多道程序设计中,经常会把进程转移到磁盘上(即从内存中移走所有页面),这样可以让其他的进程有机会占有CPU,但是当进程再次调回来时,还要重新处理缺页中断,浪费时间。所以不少分页系统会设法跟踪进程工作集,以确保让进程运行以前它的工作集就在内存中,该方法称为工作集模型,其目的在于减少缺页中断率。在让进程运行前预先装入其工作集页面称为预先调页(注意工作集是随时间变化的)。

在任意时刻t,都存在一个集合,包含了最近所有k次所访问过得页面。这个集合w(k, t)就是工作集。因为最近1次访问过后的工作集肯定包含最近2次访问的工作集中的页面。所以w(k, t)是一个单调非递减函数。工作集不可能无限变大,因为程序不可能访问比它的地址空间所能容纳的页面数目上限还多的页面。

为了实现工作集模型,操作系统必须跟踪哪些页面在工作集中。然后通过这些信息推导出一个合理的页面置换算法。当发生缺页中断时,淘汰一个不在工作集中的页面。

3. 工作集的另一种定义

根据定义,工作集就是最近k次内存访问所使用过的页面的集合。所以为了实现工作集算法,必须预先k的值。k值被确定后,页面集合就是惟一确定的了。

  1. 向后找最近k次的内存访问
    设想有一个长度为k次的移位寄存器,每进行一次内存访问就左移一位,然后再最右端插入刚才所访问过的页面号。移位寄存器中的k个页面号的集合就是工作集。理论上,当缺页中断发生时,只要读出移位寄存器中的内容,并排序删除重复页面后,结果就是工作集。然而,维护寄存器并在缺页中断时处理它所需要的开销很大,因此该技术没有被使用过。

  2. 考虑执行时间
    按照以前的方法,定义工作集为前1000万次内存访问所使用过的页面集合,那么现在可以定义:工作集是过去10ms中的内存访问所用到的页面的集合。进程只计算自己的执行时间,如果一个进程在T时刻开始,在T+100 ms的时刻使用了40ms的CPU时间,工作集只是40ms。一个进程从它开始执行到当前所实际使用的CPU时间的总数通常称作当前实际运行时间。

    在这里,进程的工作集可以被称为在过去t秒实际运行时间中它所访问过的页面的集合。

2. 工作集页面置换算法

基本思路是找出一个不在工作集中的页面并淘汰它。在页表中,每个表项至少包含了两条信息:上次使用该页面的近似时间和R(访问)位。其他的域如页框号、保护位、M(修改)位在该算法中不需要,被忽略(用空白域表示)。

工作集算法

假设使用硬件来设置R(访问)位和M(修改)位。同样,假设在每个时钟滴答中,有一个定期的时钟中断会用软件的方法来清除R位。每当缺页中断发生时,扫描页表以找出一个合适的页面淘汰之。

在处理每个表项时,需要检查R位。如果是1,就把当前实际时间写进页表项的”上次使用时间”域,以表示缺页中断时该页面正在被使用。既然该页在当前时钟滴答中已经被访问过,那么很明显它应该出现在工作集中,并且不应该被删除(假设t足够大并横跨多个时钟滴答)。

如果R是0,那么表示在当前时钟滴答中,该页面还没有被访问过,则它就可以作为候选者被置换。我们需要计算它的生存时间(即当前实际运行时间减去上次使用时间),然后与t做比较。如果生存时间较大,那么它就应该被淘汰。

如果R是0,但是生存时间小于等于t,那么该页面应该留在工作集中。并记录下生存时间最长的页面。如果整个表中都没有适合淘汰的页面,只能淘汰生存时间最长的页面。

存在一种情况,所有页面的R位都为1,即都在工作集中,这时需要随机选择一个页面淘汰。最好选择一个没有被有被修改过的干净页面,因为这样可以直接被淘汰,而不需要将该页面在写回磁盘,可以节省时间。

3. 工作集时钟页面置换算法

当缺页中断发生后,需要扫描整个页表才能确定被淘汰的页面。所以基本工作集算法比较费时。有一种改进算法,基于时钟算法,并且使用了工作集信息,称为WSClock(工作集时钟)算法。

与时钟页面置换算法一样,所需的数据结构是一个以页框为元素的循环表。

工作集时钟页面算法

最初,该表是空的当装入第一个页面时,把它加到该表中。随着更多的页面的加入,它们形成一个环。每个表项包含来自基本工作集算法的上次使用时间,以及R(访问)位和M位(修改位,图中由每个表项上面的空白域表示)。

与时钟页面置换算法一样,每次缺页中断时,首先检查指针指向的页面。如果R为被置位1,该页面在当前工作集中,不该被淘汰。然后把该页面R置为0,指针指向下一个页面,重复该算法。

当指针指向的页面R=0时,同样是比较生存时间与t。若生存时间较大,并且页面是干净的,就淘汰该页面,并把新页面放在其中。如果该页面被修改过,不能立即申请页框,为了避免写磁盘操作引起的进程切换,指针继续向前走,找到一个旧的并干净的页面。存在一种可能,所有的页面因为磁盘I/O在某个时钟周期被调度。为了降低磁盘阻塞,所以需要设置一个值n,目的是限制最大只允许写回n个页面。一旦到达该限制,不允许调度新的写操作。

如果指针经过一圈并返回起始点,存在两种情况

  1. 至少调度了一次写操作

    对于这种情况,指针仅仅是不停地移动,寻找一个干净页面。既然已经调度了一个或多个写操作,最终一定会有一个某个写操作完成,并且它的页面会被标记为干净。置换遇到的第一个干净页面,这个页面不一定是第一个被调度写操作的页面。因为磁盘驱动程序可能把写操作重排序。

  2. 没有调度过写操作

    对于这种情况,所有页面都在工作集中。简单的方法是随便选择一个干净页面淘汰,所以在上一步的扫描过程中,需要记录所有干净页面的位置。如果不存在干净页面,那么就把当前页面淘汰。

4. 小结

算法注释
最优算法不可实现,但可以用作基准
最近未使用(NRU)算法最近最少使用(LRU)算法的粗糙近似
先进先出(FIFO)算法可能抛弃最近需要使用的页面
第二次机会算法对先进先出算法的改善
时钟算法第二次机会算法的更好性能的实现
最近最少使用(LRU)算法很优秀,但是需要硬件实现
最不经常使用(NFU)算法LRU的粗略近似
老化算法近似LRU的有效算法
工作集算法实现起来开销很大
工作集时钟算法有好的效率的算法


参考书目:现代操作系统第三版

操作系统——页面置换算法 操作系统将内存按照页的进行管理,在需要的时候才把进程相应的部分调入内存。当产生缺页中断时,需要选择一个页面写入。如果要换出的页面在内存中被修改过,变成了“脏”页面,那就需要先写会到磁盘。页面置换算法,就是要选出最合适的一个页面,使得置换的效率最高。页面置换算法有很多,简单介绍几个。 2.1 Optimal算法(最优算法) 首先介绍最优算法,它需要知道以后要被用到的页,然后将不会被用到的页换出内存;... 阅读详情

相关推荐

Cursor生成JAVA相关的关键词提示规则

你是 Java 编程、Spring Boot、Spring Framework、Maven、JUnit 及相关 Java 技术的专家。在项目根目录创建一个.curstorrules文件(注意有个小数点),之后在该文件内填入下面内容。始终遵循 SOLID 原则,保持高内聚低耦合的 Spring Boot 应用设计。Java 和 Spring Boot 使用规范。Spring Boot 具体规范。

kitonGao的博客 2115

[操作系统] 驻留集和工作集的辨析

驻留集是分配给进程的物理块数 工作集是某段时间内进程要访问的页面的集合一开始看书的时候我被他的描述搞混了,因为他一开始说,驻留集要大于工作集,之后又说,工作集内的页面要调入驻留集,工作集之外的页面可以调出驻留集 驻留集要大于工作集 这句话直觉上隐含了 驻留集包含工作集 工作集内的页面要调入驻留集,工作集之外的页面可以调出驻留集 这句话直觉上隐含了 驻留集与工作集相互独立 就感觉有点矛盾后面我想通了,工作集是逻辑上的定义,驻留集是内存上的定义 理解为: 实际分配的物理内存的大小要大于算法中的工作集的大小 算法

PriceCheap的博客 8992

STM32F103C8T6 Bootloader开发实战:串口IAP固件升级与Keil工程配置详解

本文详细介绍了STM32F103C8T6 Bootloader开发实战,重点讲解串口IAP固件升级的实现方法与Keil uVision5工程配置。通过Flash分区管理、USART1通信协议设计及应用程序跳转机制等核心技术,帮助开发者掌握嵌入式系统固件升级方案,提升设备维护效率。

weixin_29165725的博客 436

操作系统原理:全局页面置换算法、工作集页置换、常驻集页置换、抖动问题

程序在运行过程中具有阶段性,可能刚开始的时候需要访问的内存很多,之后访问的内存可能会很少。如果操作系统给每个程序分配固定的物理页那么就显得不灵活,有没有办法动态地给程序分配页帧呢,在需要访问很多内存的时候多分配点页,不需要访问过多内存的时候少分配点页? 工作集模型:工作程序需要有局部性原理(邻近的代码变量分配在相邻的空间,一条指令的一次执行和下次执行都在很短的时间)。工作集是一个进程当前正在使用的逻辑页面集合。可以用 W(t,Δ) 二元式表示t时刻Δ窗口中的页面组成的...

superSmart_Dong的博客 3686

AI驱动的iOS逆向工程自动化:14阶段工作流与Ghidra集成实践

逆向工程是软件安全分析的核心技术,通过反汇编、调试等手段解析程序内部逻辑与数据流。其原理在于将编译后的二进制代码还原为可理解的逻辑结构,从而发现潜在漏洞或理解软件行为。在移动安全领域,iOS逆向工程具有重要技术价值,能够用于安全审计、漏洞挖掘与恶意软件分析。传统iOS逆向依赖ipsw、class-dump、Frida等工具链组合,存在学习曲线陡峭与流程碎片化问题。本文介绍的ios-reverse-skills项目创新性地将14阶段逆向工程方法论封装为AI可调用的标准化脚本集,通过Ghidra脚本实现Swif

weixin_27268733的博客 430

告别机床‘卡顿’!用C语言在STM32上实现连续小线段速度前瞻(附开源代码)

本文详细介绍了如何在STM32上使用C语言实现工业级连续小线段速度前瞻控制器,解决机床运动控制中的卡顿问题。通过轻量级算法框架设计和混合精度计算策略,显著提升加工效率和表面质量。文章包含开源代码和实战案例,帮助开发者快速掌握速度前瞻规划算法在嵌入式系统中的应用。

weixin_42571738的博客 185

操作系统学习笔记(十六):页面置换算法

功能: 置换算法是指当出现缺页异常时,需要调入新页面而内存已满时,置换算法选择被置换的物理页面。 设计目标: 尽可能减少页面的调入调出次数; 把未来不再访问或短期内不访问的页面调出。 页面锁定: 了解具体的置换算法之前,先了解一个概念,页面锁定。页面锁定是用来描述某些必须常驻内存的逻辑页面,比如操作系统的关键部分,再比如一些要求响应速度的代码和数据, ...

djl806943371的博客 4879

【Creator】cocoscreator 2.4 apk还原为工程 (1)

Cocos Creator 2.4 还原图片 meta文件

jokesuser的博客 2259

页面分配策略(驻留集,工作集,抖动现象)

驻留集:指请求分页存储管理中给进程分配的物理块的集合。在采用了虚拟存储技术的系统中,驻留集大小一般小于进程的总大小。

jungleirim的博客 4521

R 语言 ggplot2 绘制精美高级全球地图

在本教程中,我们将学习如何使用R语言和ggplot2包绘制精美高级地图。ggplot2是一个功能强大的数据可视化包,它可以让我们创建漂亮、交互式的地图。我们将使用R中的一些其他包来处理地理空间数据,以便与ggplot2无缝协作。

Mrrunsen的博客 1866

010、Zephyr RTOS开发环境搭建(Docker)

摘要 本文分享了使用Docker搭建Zephyr RTOS开发环境的实践经验。作者通过团队新人配置环境的真实案例,指出传统安装方式存在版本冲突、缓存污染等问题,而Docker方案能确保环境一致性。文章详细介绍了自定义Docker镜像的设计思路,重点解决工具链版本匹配、Python虚拟环境隔离等问题,将镜像体积从2GB优化到800MB。提供了从拉取镜像到点亮LED的完整工作流程,并总结了USB设备直通、文件权限、缓存问题等常见陷阱。还探讨了多阶段构建、CI集成等进阶用法,同时客观分析了Docker方案的局限性

m0_50546716的博客 78

《操作系统》工作集详解

使用工作集的基本原理:局部性原理 程序的局部性原理是由Danning.P于1968年提出的,它是指程序在执行时将呈现出局部性规律,即在一较短的时间内,程序的执行仅局限于某个部分,相应地,它所访问的存储空间也仅局限于某个区域。局部性原理可表现在以下两个方面: 时间局部性。如果程序中的某条指令一旦执行,则不久以后该指令可能再次执行;如果某个数据被访问,则不久以后该数据可能被再次访问。产生时间局部性的典型原因是:程序中存在大量的循环操作。 空间局部性。一旦程序访问了某个存储单元,则不久以后,其附近的

m0_56244991的博客 5450

构建AI Agent驱动的智能健康管理系统

数据碎片化:健康数据分散在不同的设备和平台中,难以统一管理和分析。个性化不足:健康管理方案通常是通用的,难以根据个人的健康状况实时调整。用户参与度低:用户难以获得及时、个性化的健康建议,导致健康管理效果不佳。AI Agent是一个能够感知环境、采取行动以实现目标的智能实体。根据智能体的智能水平,可以分为简单反应式智能体和复杂适应式智能体。实时监测健康数据。获取个性化的健康建议。收到健康风险预警。

AI天才研究院 749

操作系统内存管理二(3)页面置换算法

操作系统内存管理二(3)页面置换算法

qq_53351708的博客 811

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

操作系统原理(二)——内存管理之页面置换算法

https://www.cnblogs.com/yongheng20/p/4967213.html 页面置换算法 1. 总述   为提高内存利用率,解决内存供不应求的问题,更加合理的使用内存,人们创造了分页式内存抽象。同时有一个虚拟内存的概念,是指将内存中暂时不需要的部分写入硬盘,看上去硬盘扩展了内存的容量,所以叫做“虚拟”内存。使用虚拟内存,应用程序可以使用比实际物理内存更大的内存空间。可...

weixin_30906701的博客 218

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

【SCAU操作系统】实验二页面置换算法的模拟实现及命中率对比python源代码及实验报告参考

指令流(instruct):类型:列表(List)元素:整数(Integer)描述:存储模拟产生的指令地址序列,每个地址通过除以10转换为页号。用户内存(user_mem):类型:列表(List)元素:整数(Integer)描述:模拟的物理内存中的页号,存储最近使用或选定的页面。访问频率计数(temp):类型:列表(List)元素:整数(Integer)描述:在LFU算法中,用于记录用户内存中每个页面在过去一段时间内的访问频率。结果矩阵(result):

weixin_53762564的博客 3700

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

操作系统实验二

这个是操作系统的第二实验 二、分页式存储管理 ●基本要求:在第1部分实验基础上实现进程的分页式内存分配和地址转换过程,并进一步实现请求分页式存储分配和地址转换过程。页面置换算法至少应实现先进先出(FIFO)、最近最久未使用(LRU)等算法。 ●参考学时:9学时 ●实验提示: 1、建立1个位示图,用来模拟内存的分配情况,位示图的位数与设定的物理块个数相同。程序启动时可利用一组随机0和1填充位示图,表...

orange bob的博客 1846

计算机操作系统实验之页面置换算法(C语言)

在进程运行过程中,如果它需要访问的页面不在内存,需要把它调入内存,但是内存已满时,需要把内存中的某页数据送到磁盘的对换区中。而选择哪个页面,则由固定的算法来决定,称为页面置换算法

小姚的博客 4万+

操作系统原理——第六章:页面置换算法

文章目录1. 功能与目标2. 实验设置与评价方法3. 局部页面置换算法3.1 最优页面置换算法(OPT,optimal)3.2 先进先出算法(FIFO)3.3 最近最久未使用算法(LRU,Least Recently Used)3.4 时钟页面置换算法(Clock)3.5 最不常用算法(LFU,Least Frequently Used)3.6 Belady现象3.7 LRU、FIFO和Clock算法4. 全局页面置换算法4.1 局部置换算法的问题4.2 工作集模型4.3 工作集页置换算法4.4 缺页率置换

平什么阿的博客 1万+

操作系统常见的十种页面置换算法

操作系统常见的十种页面置换算法

m0_60388871的博客 7943

操作系统页面置换算法实验 页面置换算法实验

软件学院设计性实验报告 学院:软件学院 专业:计算机科学与技术 年级/班级:19级JAVA2班 2020—2021学年第二学期 课程名称 操作系统 指导教师 学号姓名 魏一鸣 实验地点 计算机学院楼111实验室 实验时间 6月11日, 6月18日10:10-11:50 ...

weixin_47428302的博客 5300

一文搞懂操作系统页面置换算法

首次的3个引用(7,0,1)会引起缺页错误,并被调到这些空帧。因为这个置换,下一个对0的引用将有缺页错误,然后页面1被页面0置换。在内存中找到一些页面,但没有真正使用,将其中的页面拿出。按最佳置换的规则, 往后寻找,最后一个出现的页号就是要淘汰的页面。操作系统确定所需页面的在辅助存储上的位置,但是却发现空闲帧列表上没有空闲帧,所有内存都在使用。然后访问7,首先看内存块没有7,然后开始选择替换的页面,指针经过的内存块把访问位设置为0。过程:第一轮扫描,找(0,0)不改变访问位,所以找到了(0,0)然后置换。

m0_63006478的博客 3683

[操作系统] 页面置换算法(一)

页面置换算法(一) 最优页面置换算法 最近未使用页面置换算法 先进先出置换算法 第二次机会页面置换算法 时钟页面置换算法 最近最少使用页面置换算法 LRU

LLLZH 1万+

【操作系统】第六章——页面置换算法

分为局部页面置换算法和全局页面置换算法两个版块,以及Belady现象和抖动问题也有提及

欢迎来到我的世界 5748

【操作系统】几种基本页面置换算法的基本思想和流程图

在地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断。当发生缺页中断时,如果操作系统内存中没有空闲页面,则操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。而用来选择淘汰哪一页的规则叫做页面置换算法。下面介绍三种常见的页面置换算法。本次实验学习了几种不同的页面置换算法。最佳置换算法选择以后再也不用的页面,没有的话,选择以后最长时间不用的页面;先进先出置换算法基于程序的顺序执行特点选择到达内存最早的页面淘汰;

qq_55930097的博客 9541
上一篇: [操作系统] 页面置换算法(一)
下一篇: [操作系统] 分页系统的设计问题
LLLZHLIU
博客等级 码龄10年 19粉丝 43原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值