首页
技术博客
PHP教程
数据库技术
前端开发
HTML5
Nginx
php论坛
新用户注册
|
会员登录
PHP教程
技术博客
编程问答
PNG素材
编程语言
前端技术
Android
PHP教程
HTML5教程
数据库
Linux技术
Nginx技术
PHP安全
WebSerer
职场攻略
JavaScript
开放平台
业界资讯
大话程序猿
登录
极速注册
取消
热门标签 | HotTags
php水印
frontend
nginx
stdout
api
cPlusPlus
mvc
多线程
golang
openssl
yii
php绘图
curl
syslog
vb
router
sockets
lvs
pdo
iis
ssl
webhooks
go
queue
mysql
lavarel
crash
sms
nlp
分布式
cookies
cpython
asp.net
storage
crontab
gcc
jvm
touch
lua
server
localhost
rust
gzip
pipeline
spring
cSharp
package
织梦cms
php框架
php5
memcache
h2
hashmap
static
redis
ffmpeg
uuid
smtp
interface
cache
transform
http
upload
session
log4j
nodejs
timezone
phpmyadmin
java
thinkphp
cookie
sftp
django
okhttp
并发
timeout
pipe
protocol-buffers
pip
当前位置:
开发笔记
>
后端
> 正文
页面置换算法(OPT、FIFO、LRU、CLOCK、改进的时钟置换算法)
作者:PengJin05 | 来源:互联网 | 2023-07-05 14:38
一、页面置换算法请求分页存储管理与基本分页存储管理的主要区别:①、在程序执行过程中,当所访问的信息不在内存时,由操作系统负责将所需信息从
一、页面置换算法
请求分页
存储管理与
基本分页
存储管理的主要区别:
①、在程序执行过程中,当所
访问的信息不在内存时,由操作系统负责将所需信息从外存调入内存
【操作系统要提供请求调页功能,将缺失页面从外存调入内存】
,然后继续执行程序。
②、若内存空间不够,由操作系统负责
将内存中暂时用不到的信息换出到外存
【操作系统要提供页面置换的功能,将暂时用不到的页面换出外存】
。
(一)最佳置换算法(OPT)
最佳置换算法(OPT,Optimal):每次选择
淘汰的页面
将是
以后永不使用
,或者
在最长时间内不再被访问的页面
,这样可以保证最低的缺页率。
例:假设系统为某进程分配了三个内存块,并考虑到有一下页面号引用串(会依次访问这些页面):7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1
最佳置换算法可以保证最低的缺页率,但实际上,只有在进程执行的过程中才能知道接下来会访问到的是哪个页面。操作系统无法提前预判页面访问序列。因此,
最佳置换算法是无法实现的。
(二)先进先出置换算法(FIFO)
先进先出置换算法(FIFO):每次选择
淘汰的页面
是
最早进入内存的页面
实现方法:把调入内存的页面根据调入的先后顺序排成一个队列,需要换出页面时选择队头页面即可。
队列的最大长度取决于系统为进程分配了多少个内存块。
例:假设系统为某进程分配了
三个
内存块,并考虑到有以下页面号引用串:3, 2, 1, 0, 3, 2, 4, 3, 2, 1, 0, 4
例:假设系统为某进程分配了
四个
内存块,并考虑到有以下页面号引用串:3, 2, 1, 0, 3, 2, 4, 3, 2, 1, 0, 4
Belady 异常
——当为进程分配的物理块数增大时,缺页次数不减反增的异常现象。
只有 FIFO 算法会产生 Belady 异常
。另外,FIFO算法虽然
实现简单
,但是该算法与进程实际运行时的规律不适应,因为先进入的页面也有可能最经常被访问。因此,
算法性能差
(三)最近最久未使用置换算法(LRU)
最近最久未使用置换算法(LRU,least recently used):每次
淘汰的页面
是
最近最久未使用的页面
实现方法:赋予每个页面对应的页表项中,用
访问字段记录该页面自上次被访问以来所经历的时间t。
当需要淘汰一个页面时,选择现有页面中 t 值最大的,即最近最久未使用的页面。
例:假设系统为某进程分配了
四个
内存块,并考虑到有以下页面号引用串:1, 8, 1, 7, 8, 2, 7, 2, 1, 8, 3, 8, 2, 1, 3, 1, 7, 1, 3, 7
该算法的实现需要专门的硬件支持,虽然算法
性能好
,但是
实现困难,开销大
(四)时钟置换算法(CLOCK)
最佳置换算法性能最好,但无法实现;先进先出置换算法实现简单,但算法性能差;最近最久未使用置换算法性能好,是最接近OPT算法性能的,但是实现起来需要专门的硬件支持,算法开销大。
时钟置换算法
是一种性能和开销较均衡的算法,又称
CLOCK算法
,或
最近未用算法
(
NRU
,NotRecently Used)
简单的CLOCK
算法实现方法:为每个页面设置一个
访问位
,再将内存中的页面都通过链接指针链接成一个循环队列。
①、当某页被访问时,其访问位置为1。当需要淘汰一个页面时,只需检查页的访问位。
②、如果是0,就选择该页换出;如果是1,则将它置为0,暂不换出,继续检查下一个页面,若第一轮扫描中所有页面都是1,则将这些页面的访问位依次置为0后,再进行第二轮扫描(第二轮扫描中一定会有访问位为0的页面,因此
简单的CLOCK
算法选择一个淘汰页面
最多会经过两轮扫描
)
例:假设系统为某进程分配了
五个
内存块,并考虑到有以下页面号引用串:1, 3, 4, 2, 5, 6, 3, 4, 7
(五)改进型的时钟置换算法
简单的时钟置换算法
仅考虑到一个页面最近是否被访问过。事实上,如果被淘汰的页面没有被修改过,就不需要执行I/O操作写回外存。
只有被淘汰的页面被修改过时,才需要写回外存。
因此,除了考虑一个页面最近有没有被访问过之外,操作系统还应考虑页面有没有被修改过。
在其他条件都相同时,应优先淘汰没有修改过的页面
,避免I/O操作。这就是改进型的时钟置换算法的思想。
修改位=0
,表示页面没有被修改过;
修改位=1
,表示页面被修改过。
为方便讨论,用
(访问位,修改位)
的形式表示各页面状态。如(1,1)表示一个页面近期被访问过,且被修改过。
算法规则
:将所有可能被置换的页面排成一个循环队列。
①、第一轮:从当前位置开始扫描到第一个(0, 0)的帧用于替换。本轮扫描不修改任何标志位。
②、第二轮:若第一轮扫描失败,则重新扫描,查找第一个(0, 1)的帧用于替换。本轮将所有扫描过的帧访问位设为0。
③、第三轮:若第二轮扫描失败,则重新扫描,查找第一个(0, 0)的帧用于替换。本轮扫描不修改任何标志位。
④、第四轮:若第三轮扫描失败,则重新扫描,查找第一个(0, 1)的帧用于替换。
由于第二轮已将所有帧的访问位设为0,因此经过第三轮、第四轮扫描一定会有一个帧被选中,因此
改进型CLOCK置换算法
选择一个淘汰页面
最多会进行四轮扫描
算法
队列
写下你的评论吧 !
吐个槽吧,看都看了
会员登录
|
用户注册
推荐阅读
多线程
深入理解Java多线程并发处理:基础与实践
本文探讨了Java中的多线程并发处理机制,从基本概念到实际应用,帮助读者全面理解并掌握多线程编程技巧。通过实例解析和理论阐述,确保初学者也能轻松入门。 ...
[详细]
蜡笔小新 2024-12-20 19:28:45
分布式
备战BAT面试:掌握这些MySQL核心问题
本文深入探讨了MySQL中常见的面试问题,包括事务隔离级别、存储引擎选择、索引结构及优化等关键知识点。通过详细解析,帮助读者在面对BAT等大厂面试时更加从容。 ...
[详细]
蜡笔小新 2024-12-20 18:58:01
queue
深入剖析JVM垃圾回收机制
本文详细探讨了Java虚拟机(JVM)中的垃圾回收机制,包括其意义、对象判定方法、引用类型、常见垃圾收集算法以及各种垃圾收集器的特点和工作原理。通过理解这些内容,开发人员可以更好地优化内存管理和程序性能。 ...
[详细]
蜡笔小新 2024-12-20 17:24:41
多线程
Python面试题精粹
本文档汇总了Python编程的基础与高级面试题目,涵盖语言特性、数据结构、算法以及Web开发等多个方面,旨在帮助开发者全面掌握Python核心知识。 ...
[详细]
蜡笔小新 2024-12-19 20:26:25
分布式
深入解析BookKeeper的设计与应用场景
本文介绍了由Yahoo在2009年开发并于2011年开源的BookKeeper技术。BookKeeper是一种高效且可靠的日志流存储解决方案,广泛应用于需要高性能和强数据持久性的场景。 ...
[详细]
蜡笔小新 2024-12-19 11:08:57
mysql
优化Flask应用的并发处理:解决Mysql连接过多问题
本文探讨了在Flask应用中通过优化后端架构来应对高并发请求,特别是针对Mysql 'too many connections' 错误的解决方案。我们将介绍如何利用Redis缓存、Gunicorn多进程和Celery异步任务队列来提升系统的性能和稳定性。 ...
[详细]
蜡笔小新 2024-12-21 09:21:49
queue
LeetCode: 实现队列与栈的高级应用
本文介绍如何使用队列和栈实现特定功能,包括动态维护队列元素并计算其平均值,以及栈操作中的优化技巧。 ...
[详细]
蜡笔小新 2024-12-21 00:38:44
queue
贪心与优先队列:最小化加法代价问题
本题要求在一组数中反复取出两个数相加,并将结果放回数组中,最终求出最小的总加法代价。这是一个经典的哈夫曼编码问题,利用贪心算法可以有效地解决。 ...
[详细]
蜡笔小新 2024-12-20 23:20:38
queue
Java异步编程实践
本文详细介绍了Java中实现异步调用的多种方式,包括线程创建、Future接口、CompletableFuture类以及Spring框架的@Async注解。通过代码示例和深入解析,帮助读者理解并掌握这些技术。 ...
[详细]
蜡笔小新 2024-12-20 18:02:19
queue
UNIX进程间通信(IPC)详解
本文深入探讨了UNIX/Linux系统中的进程间通信(IPC)机制,包括消息传递、同步和共享内存等。详细介绍了管道(Pipe)、有名管道(FIFO)、Posix和System V消息队列、互斥锁与条件变量、读写锁、信号量以及共享内存的使用方法和应用场景。 ...
[详细]
蜡笔小新 2024-12-20 10:14:51
queue
优化Spring Boot项目,大幅提升并发性能
本文探讨了如何通过一系列技术手段提升Spring Boot项目的并发处理能力,解决生产环境中因慢请求导致的系统性能下降问题。 ...
[详细]
蜡笔小新 2024-12-19 21:07:12
queue
使用WinForms 实现 RabbitMQ RPC 示例
本文通过两个WinForms应用程序演示了如何使用RabbitMQ实现远程过程调用(RPC)。一个应用作为客户端发送请求,另一个应用作为服务端处理请求并返回响应。 ...
[详细]
蜡笔小新 2024-12-19 19:15:17
分布式
深入解析Hadoop的核心组件与工作原理
本文详细介绍了Hadoop的三大核心组件:分布式文件系统HDFS、资源管理器YARN和分布式计算框架MapReduce。通过分析这些组件的工作机制,帮助读者更好地理解Hadoop的架构及其在大数据处理中的应用。 ...
[详细]
蜡笔小新 2024-12-19 17:17:51
queue
深入解析Volatile机制及其优化与应用
本文详细探讨了Java中Volatile关键字的工作原理、优化技巧及其在实际开发中的应用场景,特别是在提高多线程环境下数据可见性和减少锁竞争方面的优势。 ...
[详细]
蜡笔小新 2024-12-19 10:41:14
queue
深入理解队列与栈的数据结构
本文详细介绍了队列与栈这两种基本的数据结构。队列是一种遵循先进先出(FIFO)原则的线性数据结构,允许在队首进行删除或读取操作,在队尾进行插入操作。而栈则是另一种线性数据结构,它遵循后进先出(LIFO)的原则,所有操作均在同一端进行。 ...
[详细]
蜡笔小新 2024-12-19 00:14:07
PengJin05
这个家伙很懒,什么也没留下!
Tags | 热门标签
php水印
frontend
nginx
stdout
api
cPlusPlus
mvc
多线程
golang
openssl
yii
php绘图
curl
syslog
vb
router
sockets
lvs
pdo
iis
ssl
webhooks
go
queue
mysql
lavarel
crash
sms
nlp
分布式
RankList | 热门文章
1
【观察】多地国税局升级华为存储,“降税减负”服务国计民生
2
Hive大数据Hive的安装与启动大数据之Hive工作笔记0005
3
iOS 中如何不通过继承,重写实例方法 ?
4
一个普通的服务端 APP,启动时间多少是比较合理的?
5
navicat oracle修改查询,Navicat 教程:排序、查找或替换记录
6
Oracle 将行转置为列
7
深入浅出MongoDB
8
【国双智说】助推民航产业数智化转型升级的道与术
9
oracle816安装,oracle 816 imp恢复数据遇到问题及解决
10
开发周期会议的功能,如何进行设计和数据存储?
11
前任与现任的较量,我该何去何从
12
mybatis插入数据后回写自增的ID值到传参封装类中
13
SQL DDL DML DCL
14
Greenplum学习笔记 Greenplum
15
快与慢,看啥?
PHP1.CN | 中国最专业的PHP中文社区 |
DevBox开发工具箱
|
json解析格式化
|
PHP资讯
|
PHP教程
|
数据库技术
|
服务器技术
|
前端开发技术
|
PHP框架
|
开发工具
|
在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved |
京公网安备 11010802041100号
|
京ICP备19059560号-4
| PHP1.CN 第一PHP社区 版权所有