页面置换与页面分配详解
这里写目录标题
- 页面置换算法
- 最佳置换算法(OPT,理想置换算法)
- 先进先出置换算法(FIFO)
- 最近最久未使用算法(LRU)
- 时钟置换算法(CLOCK)
- 实现一个LRU算法(LeetCode146)
- 驻留集和工作集
- 页面分配策略
- 固定分配局部置换
- 可变分配全局置换
- 可变分配局部置换
- 抖动(颠簸)现象
页面置换算法
将逻辑地址转换为物理地址的过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断。当发生缺页中断时,如果操作系统内存中没有空闲页面,则操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。而用来选择淘汰哪一页的规则叫做页面置换算法。
最佳置换算法(OPT,理想置换算法)
从主存中移出永远不再需要的页面,如无这样的页面存在,则选择最长时间不需要访问的页面。由于所选择的被淘汰页面将是以后永不使用的,或者是在最长时间内不再被访问的页面,这样可以保证获得最低的缺页率。
先进先出置换算法(FIFO)
当需要淘汰一个页面时,总是选择驻留主存时间最长的页面进行淘汰,即先进入主存的页面先淘汰。其理由是:最早调入主存的页面不再被使用的可能性最大。
最近最久未使用算法(LRU)
当需要淘汰一个页面时,总是选择在最近一段时间内最久不用的页面予以淘汰。这种算法的基本思想是:利用局部性原理,根据一个作业在执行过程中过去的页面访问历史来推测未来的行为。它认为过去一段时间里不曾被访问过的页面,在最近的将来可能也不会再被访问。
时钟置换算法(CLOCK)
LRU算法的性能接近于OPT,但是实现起来比较困难,且开销大;FIFO算法实现简单,但性能差。所以操作系统的设计者尝试了很多算法,试图用比较小的开销接近LRU的性能,这类算法都是CLOCK算法的变体。
CLOCK算法需要使用到访问位。把各个页面组织成环形链表(类似于时钟面)。把指针指向最老的页面。当发生一个缺页中断的时候。若它的访问位为0,则淘汰,页面插入该位置并把访问位置1,指针下移;若访问位为1,则把该位置0,指针下移。
实现一个LRU算法(LeetCode146)
实现LRU的基本方法有两种:
- 用一个数组来存储数据,给每一个数据项标记一个访问时间戳,每次插入新数据项的时候,先把数组中存在的数据项的时间戳自增,并将新数据项的时间戳置为0并插入到数组中。每次访问数组中的数据项的时候,将被访问的数据项的时间戳置为0。当数组空间已满时,将时间戳最大的数据项淘汰。
- 利用一个链表来实现。每次新插入数据的时候将新数据插到链表的头部;每次缓存命中(即数据被访问),则将数据移到链表头部;那么当链表满的时候,就将链表尾部的数据丢弃。
对于第一种方法,需要不停地维护数据项的访问时间戳,另外,在插入数据、删除数据以及查询数据时,时间复杂度都是O(n)。对于第二种方法,链表查询数据的时间复杂度为O(n),插入数据和删除数据的时间复杂度是O(1)。
有没有办法既能够让其查询快,又能够快速进行增删操作?我们可以选择链表+hash表,hash表的查询可以达到O(1)时间复杂度,这样就完美的解决我们查询时间慢的问题了。
驻留集和工作集
驻留集指请求分页存储管理中给一个进程分配的物理块的集合,在采用了虚拟存储技术的系统中,驻留集大小一般小于进程的总大小。
工作集指在某段时间间隔里,进程实际访问页面的集合。
若驻留集太小,会导致缺页频繁,系统要花大量的时间来处理缺页,实际用于进程推进的时间很少;驻留集太大,又会导致多道程序并发度下降,资源利用率降低。所以应该选择一个合适的驻留集大小。
采用页面分配策略决定每个进程驻留集的大小。
页面分配策略
常见的页面分配策略分为三种:固定分配局部置换、可变分配全局置换、可变分配局部置换。
固定分配局部置换
系统为每个进程分配一定数量的物理块,在整个运行期间都不改变。若进程在运行中发生缺页,则只能从该进程在内存中的页面中选岀一页换岀,然后再调入需要的页面。
这种策略的缺点是:很难在刚开始就确定应为每个进程分配多少个物理块才算合理,采用这种策略的系统可以根据进程大小、优先级、或是根据程序员给岀的参数来确定为一个进程分配的内存块数。
可变分配全局置换
刚开始会为每个进程分配一定数量的物理块。操作系统会保持一个空闲物理块队列。当某进程发生缺页时,从空闲物理块中取岀一块分配给该进程;若已无空闲物理块,则可选择个未锁定(系统会锁定一些页面,如:重要的内核数据))的页面换出外存,再将该物理块分配给缺页的进程。
釆用这种策略时,只要某进程发生缺页,都将获得新的物理块,仅当空闲物理块用完时,系统才选择一个未锁定的页面调岀。被选择调岀的页可能是系统中任何一个进程中的页,因此这个被选中的进程拥有的物理块会减少,缺页率会增加。
可变分配局部置换
刚开始会为每个进程分配一定数量的物理块。当某进程发生缺页时,只允许从该进程自己的物理块中选出一个进行换出外存。如果进程在运行中频繁地缺页,系统会为该进程多分配几个物理块,直至该进程缺页率趋势适当程度;反之,如果进程在运行中缺页率特别低,则可适当减少分配给该进程的物理块。
抖动(颠簸)现象
刚刚换出的页面马上又要换入内存,刚刚换入的页面马上又要换出外存,这种频繁的页面调度行为称为抖动或颠簸。
产生抖动的主要原因是进程频繁访问的页面数目高于可用的物理块数(分配给进程的物理块不够)。
为进程分配的物理块太少,会使进程发生抖动现象。为进程分配的物理块太多,又会降低系统整体的并发度,降低某些资源的利用率。因此,一般来说,驻留集大小不能小于工作集大小,否则进程运行过程中将频繁缺页。
页面置换与页面分配详解相关推荐
- 13 操作系统第三章 内存管理 虚拟内存 请求分页管理方式 页面置换算法 页面分配策略
文章目录 1 虚拟内存 1.1 传统存储管理方式的特征.缺点 1.2 局部性原理 1.3 虚拟内存主要特征 1.4 如何实现虚拟内存技术 1.5 虚拟内存的基本概念小结 2 请求分页管理方式 2.1 ...
- java前端长连接框架_Java中Spring Boot+Socket实现与html页面的长连接实例详解
Spring Boot+Socket实现与html页面的长连接,客户端给服务器端发消息,服务器给客户端轮询发送消息,附案例源码 功能介绍 客户端给所有在线用户发送消息客户端给指定在线用户发送消息服务器 ...
- spark on yarn 内存分配详解
spark on yarn 内存分配详解
- TOEIC考试时间分配详解
TOEIC考试时间分配详解 托业考试题全部为单项选择 涂答题卡 答错不扣分 除听力第二部分为3选1外其余皆为4选1 每一类题型前都会有详细的答题指引 考试时间 120分钟(45+75) 原始分换算为标 ...
- 【YOLOv5】正样本分配详解
1.前言 YoloV5中loss由正样本和负样本两部分loss组成,负样本对应着图像的背景,如果负样本远多于正样本,则负样本会淹没正样本的损失,从而降低网络收敛的效率与检测精度.这就是目标检测中常见的 ...
- css浮动后页面乱了怎样解决,详解浮动元素引起的问题和解决办法
一.问题 多个浮动的元素无法撑开父元素的宽度,父元素的高度可能会变成0. 若浮动元素后面跟非浮动元素,非浮动元素会紧随其后浮动起来. 若浮动元素前面还有同级元素没有浮动则会影响页面结构. 二.解决办法 ...
- vue 加载页面时触发时间_详解Vue.js在页面加载时执行某个方法
详解Vue.js在页面加载时执行某个方法 jQuery中可以这样写 vue中,如果要达到相同效果,可以使用vue的生命周期函数,如create或者mounted 附上vue.js的生命周期函数执行流程 ...
- 页面静态化的概念详解
随着网站的内容的增多和用户访问量的增多,无可避免的是网站加载会越来越慢,受限于带宽和服务器同一时间的请求次数的限制,我们往往需要在此时对我们的网站进行代码优化和服务器配置的优化. 一般情况下会从以下方 ...
- html页面在微信分享php,详解html静态页面实现微信分享思路的示例代码分析
微信分享网页的时候,希望分享出来的链接是标题+描述+缩略图,微信开发代码示例里已提供了方法,但只适用于动态页面.由于dedecms是生成了静态文件,其实我想使用ajax获取jssdk参数也能也能实现微 ...
最新文章
- AC日记——信息传递 洛谷 P2661 (tarjan求环)
- Android Studio vs Eclipse:你需要知道的那些事
- NGINX发布支持动态配置的开源Web服务器
- 8、Semantic-UI之其他按钮样式
- n9009 Android5.0内核,三星N9009(Galaxy Note 3 电信版 Android 5.0)刷Recovery教程
- 关于GitHub下载巨慢问题的解决方案
- C++工程师面试题大全
- 内嵌tomcat启动速度慢
- android 热门开源库,GitHub安卓热门开源资源在项目中的使用及项目总结
- Linux 线程如何实现同步与互斥
- Android文件夹占用空间分析,关于Android中图片大小、内存占用与drawable文件夹关系的研究与分析...
- 用xshell7和xftp7连接虚拟机CentOS7.6的步骤
- 魔兽8.0最新服务器人口普查,魔兽世界8.0最新人口普查: DH稳坐第一职业宝座 同盟种族人数惨淡...
- opencv imwrite 之后与imread 图片变小原因与总结
- 了解RecyclerView的分割线
- Unity3D 回合制 网上源码 目前还在研究构思
- 3ds Max 2014以及低版本在高分辨率带DPI缩放设置的应用程序设置
- supervisor 使用详解
- 无辜被黑 我在北大青鸟的真实工作经历(转帖)
- 在C语言中,int型数据的取值范围?
热门文章
- SaaSBase:什么是网易云商·SCRM?
- 景深计算公式的推导[转]
- processflow利用drawio实现多人协作画流程图功能
- 激活UltraEdit 的方法
- BBC鸟类纪录片《布谷鸟 Cuckoo》全1集 720P/1080i高清纪录片资源百度云盘下载
- 计算机毕业设计JAVA基于智能推荐的良品店铺平台mybatis+源码+调试部署+系统+数据库+lw
- 一步一步教你如何解锁被盗的iPhone 6s
- 数据库一,二,三级缓存详解
- 【毫米波雷达】LFMCW车载雷达的应用场景
- HighCharts的安装及使用