虚拟内存之页面置换算法

news2024/9/24 9:23:46

内存空间不够,OS将内存中暂时用不到的信息换出到外存。但页面的换入/出需要磁盘I/O,系统开销较大。页面置换算法要更少的缺页率。
一、最佳置换(OPT)-optimal
1.思想
每次选择淘汰以后永不使用、在最长时间内不再被访问的页面,以此保证最低的缺页率。
2.实现
如果有可用空闲内存块,缺页不必进行页面置换,直接调入内存即可。
如果没有可用空闲内存块,往右找最远的页面即是要被淘汰的页面,将其换出
2.计算
缺页中断次数=内存块数+页面置换次数
缺页率=缺页中断次数/总访问次数
3.特点
实现前提是操作系统会预先知道访问页面的序列,实际是无法实现的,是一种理想化算法。
二、先进先出置换算法(FIFO)
1.思想
每次选择淘汰早出最早进入内存的页面,以此保证最低的缺页率。
2.实现
按调入内存顺序将页面排成一个队列。
如果有可用空闲内存块,缺页不必进行页面置换,直接将其插入队列队尾即可。
如果没有可用空闲内存块,淘汰队头页面,将新调入页面插入队尾
3.特点
当为进程分配的物理块数增大时,缺页次数也会增加。
盲目淘汰最先进入的页面,而未考虑其访问次数,算法性能差。
三、最近最久未使用置换算法(LRU)-least recently used
1.思想
每次选择淘汰最近最久未使用的页面,以此保证最低的缺页率。
2.实现
为每个页面建一个页表项,并用访问字段记录该页面由上次被访问以来所经历的时间。
如果有可用空闲内存块,缺页不必进行页面置换,直接调入内存即可。
如果没有可用空闲内存块,淘汰页面中t值最大的页面,将其换出。(即往左找最远的页面即为要淘汰的页面)
3.特点
需要专门硬件支持,实现困难,开销大
四、时钟置换算法(CLOCK)
即最近未用算法(NRU, not recently used)
1.思想
每次选择淘汰最近未用的页面,以此保证最低的缺页率。
2.实现
为每个页面设置一个访问位,再将内存中页面通过指针链接成一个循环队列。被访问时访问位置为1。
按可用空闲内存块,将页面调入并链接成一个循环队列,访问位均是1.
如果没有可用空闲内存块,淘汰访问位为0的页面,将其换出;如果访问位都是1,将其置为0,暂不换出,开始第二轮扫描时,淘汰访问位为0的页面
3.特点
只考虑到页面最近是否被访问,未考虑淘汰页面的状态(是否被修改)进行置换
3.改进
优先淘汰未被访问未被修改过(0,0) ——> (0,1)的页面无需执行I/O操作写回外存。增加一个修改位,0-未被修改,1-已被修改。
用(访问位,修改位)表示各页面状态,进行置换。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3 tensorflow构建模型详解

上一篇:2 用TensorFlow构建一个简单的神经网络-CSDN博客 1、神经网络概念 接上一篇,用tensorflow写了一个猜测西瓜价格的简单模型,理解代码前先了解下什么是神经网络。 下面是百度AI对神经网络的解释: 神经网络是一种运算模型&…

音视频技术开发周刊 | 317

每周一期,纵览音视频技术领域的干货。 新闻投稿:contributelivevideostack.com。 MIT惊人再证大语言模型是世界模型!LLM能分清真理和谎言,还能被人类洗脑 MIT等学者的「世界模型」第二弹来了!这次,他们证明…

什么是Steam红锁?及红锁的原因

Steam红锁分为两种,一种是商业红,一种是欺诈红。 造成红锁的原因有哪些? 1.非正常玩家,大量囤货,就是你交易饰品的交易量太大了,而且频繁地买进同一个饰品,官方就会判定你是商业行为&#xff0…

批量重命名文件夹:用数字随机重命名法管理您的文件夹

在文件管理中,文件夹的命名是一项至关重要的任务。一个好的文件夹命名方案可以帮助我们更高效地组织和查找文件。然而,随着时间的推移,我们可能会遇到文件夹数量过多,难以管理和查找的问题。为了解决这个问题,我们可以…

ubuntu PX4 vscode stlink debug设置

硬件 stlink holybro debug板 pixhawk4 安装openocd 官方文档,但是第一步安装建议从源码安装,bug少很多 github链接 编译安装,参考 ./bootstrap (when building from the git repository)./configure [options]makesudo make install安装后…

SpringMVC Day 06 : 转发视图

前言 在SpringMVC框架中,视图解析器可以将逻辑视图名称转换为实际的视图对象。除了直接渲染视图,你还可以通过SpringMVC提供的转发和重定向机制来跳转到另一个视图。在本篇博客中,我们将学习SpringMVC中的转发视图技术,以及如何使…

sscanf 函数的使用

一、sscanf 函数介绍 头文件 #include <stdio.h> 原型&#xff1a; int sscanf(const char *str, const char *format, ...); 返回&#xff1a; On success, these functions return the number of input items success‐ fully matched and assigned; this can be few…

钡铼技术ARM工控机在机器人控制领域的应用

ARM工控机是一种基于ARM架构的工业控制计算机&#xff0c;用于在工业自动化领域中进行数据采集、监控、控制和通信等应用。ARM&#xff08;Advanced RISC Machine&#xff09;架构是一种低功耗、高性能的处理器架构&#xff0c;广泛应用于移动设备、嵌入式系统和物联网等领域。…

如何使用内网穿透工具,将Tomcat网页发布到公共互联网上

文章目录 前言1.本地Tomcat网页搭建1.1 Tomcat安装1.2 配置环境变量1.3 环境配置1.4 Tomcat运行测试1.5 Cpolar安装和注册 2.本地网页发布2.1.Cpolar云端设置2.2 Cpolar本地设置 3.公网访问测试4.结语 前言 Tomcat作为一个轻量级的服务器&#xff0c;不仅名字很有趣&#xff0…

API安全之《大话:API的前世今生》

写在前面&#xff1a;本文结合API使用的业界现状&#xff0c;系统性地阐述API的基本概念、发展历史、表现形式等基础内容&#xff0c;主要包含以下内容&#xff1a; 1.什么是API 2.API的发展历史 3.现代API常用消息格式 4.top N 互联网企业API 使用现状 当前的世界是一个信…

【Go入门】GO流程与函数介绍(代码运行逻辑控制)

流程和函数 这小节我们要介绍Go里面的流程控制以及函数操作。 流程控制 流程控制在编程语言中是最伟大的发明了&#xff0c;因为有了它&#xff0c;你可以通过很简单的流程描述来表达很复杂的逻辑。Go中流程控制分三大类&#xff1a;条件判断&#xff0c;循环控制和无条件跳…

回文链表Java

我们可以采用双指针的办法进行,如下图: 如果链表长度为偶数,则直接从第二个指针的位置开始对链表进行反转;如果是奇数,则从第二指针的下一位进行链表反转 代码实现: public static void main(String[] args) {ListNode next4 new ListNode(1, null);ListNode next3 new Lis…

Jetson Xavier NX FFmpeg支持硬件编解码

最近在用Jetson Xavier NX板子做视频处理&#xff0c;但是CPU进行视频编解码&#xff0c;效率比较地下。 于是便考虑用硬解码来对视频进行处理。 通过jtop查看&#xff0c;发现板子是支持 NVENC硬件编解码的。 1、下载源码 因为需要对ffmpeg进行打补丁修改&#xff0c;因此需…

堆栈与队列算法-以数组来实现堆栈

目录 堆栈与队列算法-以数组来实现堆栈 C代码 扑克牌发牌算法 C代码 堆栈与队列算法-以数组来实现堆栈 以数组结构来实现堆栈的好处是设计的算法都相当简单。不过&#xff0c;如果堆栈本身的大小是变动的&#xff0c;而数组大小只能事先规划和声明好&#xff0c;那么数组规…

Qt QUrl详解

1.QUrl概述 QUrl 是Qt框架中用于处理URL的类&#xff0c;提供了一些方法来解析和构造URL。URL&#xff08;Uniform Resource Locator&#xff09;是用于定位和访问互联网资源的地址。QUrl类可以用于解析URL的各个部分&#xff0c;并提供了一些方法来获取和设置URL的各个部分。…

Android RecyclerView — 实现自动加载更多

在App中&#xff0c;使用列表来显示数据是十分常见的。使用列表来展示数据&#xff0c;最好不要一次加载太多的数据&#xff0c;特别是带图片时&#xff0c;页面渲染的时间会变长&#xff0c;常见的做法是进行分页加载。本文介绍一种无感实现自动加载更多的实现方式。 实现自动…

Windows原生蓝牙编程 第三章 配对后进行蓝牙通信【C++】

蓝牙系列文章目录 第一章 获取本地蓝牙并扫描周围蓝牙信息并输出 第二章 选取设备输入配对码并配对 第三章 配对后进行蓝牙通信 文章目录 前言头文件一、建立连接套接字二、设置发送信息函数三、全部代码四、测试服务端选择及蓝牙通信总结 前言 接着第二章&#xff0c;我们已经…

爱写bug的小邓程序员个人博客

博客网址: http://www.006969.xyz 欢迎来到我的个人博客&#xff0c;这里主要分享我对于前后端相关技术的学习笔记、项目实战经验以及一些技术感悟。 在我的博客中&#xff0c;你将看到以下主要内容&#xff1a; 技术文章 我将会分享我在学习前后端技术过程中的一些感悟&am…

【并发编程】进程与线程

主要知识点&#xff1a; 进程和线程的概念 并行和并发的概念 线程基本应用 一、进程与线程 进程 程序由指令和数据组成&#xff0c;但这些指令要运行&#xff0c;数据要读写&#xff0c;就必须将指令加载至 CPU&#xff0c;数据加载至内存。在指令运行过程中还需要用到磁盘、…

【SpringMVC篇】讲解RESTful相关知识

&#x1f38a;专栏【SpringMVC】 &#x1f354;喜欢的诗句&#xff1a;天行健&#xff0c;君子以自强不息。 &#x1f386;音乐分享【如愿】 &#x1f384;欢迎并且感谢大家指出小吉的问题&#x1f970; 文章目录 &#x1f384;REST简介&#x1f33a;RESTful入门案例⭐案例一⭐…