首页
技术博客
PHP教程
数据库技术
前端开发
HTML5
Nginx
php论坛
新用户注册
|
会员登录
PHP教程
技术博客
编程问答
PNG素材
编程语言
前端技术
Android
PHP教程
HTML5教程
数据库
Linux技术
Nginx技术
PHP安全
WebSerer
职场攻略
JavaScript
开放平台
业界资讯
大话程序猿
登录
极速注册
取消
热门标签 | HotTags
php框架
api
pdo
session
h2
上传
yii
wordpress
webhooks
队列
vb
python
asp.net
timeout
gzip
ffmpeg
makefile
cookie
dns
lavarel
nginx
sockets
ruby
cSharp
php水印
okhttp
pipeline
ssl
mq
base64
压力测试
openssl
webserver
微服务
lua
grpc
redis
go
java
http2
stdout
queue
localhost
正则
laravel
rust
mysql
web3
varnish
spring
cpython
爬虫
pipe
crash
curl
memcache
sms
iis
router
注入
touch
swoole
uuid
gcc
cron
golang
pip
hashmap
yaf
struct
static
node.js
cache
timezone
sftp
smtp
token
protocol-buffers
pymongo
当前位置:
开发笔记
>
后端
> 正文
页面置换算法(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中的24种设计模式及其应用,并介绍了七大面向对象设计原则。通过创建型、结构型和行为型模式的分类,帮助开发者更好地理解和应用这些模式,提升代码质量和可维护性。 ...
[详细]
蜡笔小新 2024-12-27 19:10:10
队列
Java并发编程:LinkedBlockingQueue的实际应用
本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ...
[详细]
蜡笔小新 2024-12-27 18:51:49
timeout
Java面试题解析
本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ...
[详细]
蜡笔小新 2024-12-27 13:55:14
队列
C++面试高频题
作者:守望者1028链接:https:www.nowcoder.comdiscuss55353来源:牛客网面试高频题:校招过程中参考过牛客诸位大佬的面经,但是具体哪一块是参考谁的我 ...
[详细]
蜡笔小新 2024-12-25 12:32:36
队列
深入解析Redis内存对象模型
本文详细介绍了Redis内存对象模型的关键知识点,包括内存统计、内存分配、数据存储细节及优化策略。通过实际案例和专业分析,帮助读者全面理解Redis内存管理机制。 ...
[详细]
蜡笔小新 2024-12-23 14:50:23
队列
掌握Java EE的全面指南
探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ...
[详细]
蜡笔小新 2024-12-25 13:38:29
dns
深入解析TCP/IP五层协议
本文详细介绍了TCP/IP五层协议模型,包括物理层、数据链路层、网络层、传输层和应用层。每层的功能及其相互关系将被逐一解释,帮助读者理解互联网通信的原理。此外,还特别讨论了UDP和TCP协议的特点以及三次握手、四次挥手的过程。 ...
[详细]
蜡笔小新 2024-12-24 14:02:48
timeout
FinOps 与 Serverless 的结合:破解云成本难题
本文探讨了如何通过 FinOps 实践优化 Serverless 应用的成本管理,提出了首个 Serverless 函数总成本估计模型,并分享了多种有效的成本优化策略。 ...
[详细]
蜡笔小新 2024-12-24 12:44:26
队列
Servlet 表单处理:GET 和 POST 请求的深入解析
本文详细探讨了HTML表单中GET和POST请求的区别,包括它们的工作原理、数据传输方式、安全性及适用场景。同时,通过实例展示了如何在Servlet中处理这两种请求。 ...
[详细]
蜡笔小新 2024-12-23 18:09:59
队列
优化GPS附近用户搜索的高效排序策略
探讨如何通过高效的数据库查询和排序策略,优化基于GPS位置信息的附近用户搜索功能,以应对大规模用户数据场景。 ...
[详细]
蜡笔小新 2024-12-23 14:26:59
队列
支持队列式写入并适合持久化的数据库有哪些?
本文探讨了哪些数据库支持队列式的写入操作(即一个键对应一个队列,数据可以连续入队),并且具备良好的持久化特性。这类需求通常出现在需要高效处理和存储大量有序数据的场景中。 ...
[详细]
蜡笔小新 2024-12-23 12:21:54
队列
Netflix利用Druid实现高效实时数据分析
本文探讨了全球领先的在线娱乐公司Netflix如何通过采用Apache Druid,实现了高效的数据采集、处理和实时分析,从而显著提升了用户体验和业务决策的准确性。文章详细介绍了Netflix在系统架构、数据摄取、管理和查询方面的实践,并展示了Druid在大规模数据处理中的卓越性能。 ...
[详细]
蜡笔小新 2024-12-23 11:10:01
队列
深入解析for与foreach遍历集合时的性能差异
本文将详细探讨for循环和foreach(迭代器)在遍历集合时的性能差异,并通过实际代码示例和源码分析,帮助读者理解这两种遍历方式的不同之处。文章内容丰富且专业,旨在为编程爱好者提供有价值的参考。 ...
[详细]
蜡笔小新 2024-12-23 10:57:14
nginx
全面解析运维监控:白盒与黑盒监控及四大黄金指标
本文深入探讨了白盒和黑盒监控的概念,以及它们在系统监控中的应用。通过详细分析基础监控和业务监控的不同采集方法,结合四个黄金指标的解读,帮助读者更好地理解和实施有效的监控策略。 ...
[详细]
蜡笔小新 2024-12-22 14:02:29
队列
深入解析GCD:任务队列与多线程编程
本文详细介绍了Grand Central Dispatch (GCD) 的核心概念和使用方法,探讨了任务队列、同步与异步执行以及常见的死锁问题。通过具体示例和代码片段,帮助开发者更好地理解和应用GCD进行多线程开发。 ...
[详细]
蜡笔小新 2024-12-22 10:11:08
PengJin05
这个家伙很懒,什么也没留下!
Tags | 热门标签
php框架
api
pdo
session
h2
上传
yii
wordpress
webhooks
队列
vb
python
asp.net
timeout
gzip
ffmpeg
makefile
cookie
dns
lavarel
nginx
sockets
ruby
cSharp
php水印
okhttp
pipeline
ssl
mq
base64
RankList | 热门文章
1
百度网盘加速教程(绝对有效)
2
DY视频怎么批量下载?如何下载没有水印的视频?
3
《跨界杂谈》商业模式(二)宗教
4
【科大表白墙】能见面说不要电话说,能电话说不要QQ说,能QQ说不要短信说。说的内容?什么都行,反正不是说道理
5
怎么让锁屏微信消息不显示内容?
6
苹果id密码忘了怎么办 id密码忘了解决方法
7
获奖名单丨何以解暑,唯有大薯(条)~
8
百度云盘群组下载,细节操作让你摸不着头脑?
9
文字怎么转换成语音?这个方法清晰又好用
10
微信收款提醒有吗,怎么设置?
11
军哥高质量微信群招人~
12
微信APP怎么打开看一看?微信打开看一看的方法说明
13
33岁程序员去相亲,被人嫌弃工资不够高,房子不是学区房,网友炸了!
14
百度收录的权重 百度收录权重查询
15
如何激励公司员工最有效?
PHP1.CN | 中国最专业的PHP中文社区 |
DevBox开发工具箱
|
json解析格式化
|
PHP资讯
|
PHP教程
|
数据库技术
|
服务器技术
|
前端开发技术
|
PHP框架
|
开发工具
|
在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved |
京公网安备 11010802041100号
|
京ICP备19059560号-4
| PHP1.CN 第一PHP社区 版权所有