深入理解【缺页中断】及FIFO、LRU、OPT这三种置换算法
分类
软性
硬性
- 寻找到一个空闲的页。或者把另外一个使用中的页写到磁盘上(如果其在最后一次写入后发生了变化的话),并注销在MMU内的记录
- 将数据读入被选定的页
- 向MMU注册该页
无效
中断
缺页中断的次数
缺页中断的顺序
1. 缺页中断
在请求分页系统中,可以通过查询页表中的状态位来确定所要访问的页面是否存在于内存中。每当所要访问的页面不在内存时,会产生一次缺页中断,此时操作系统会根据页表中的外存地址在外存中找到所缺的一页,将其调入内存。
缺页本身是一种中断,与一般的中断一样,需要经过4个处理步骤:
1. 保护CPU现场
2. 分析中断原因
3. 转入缺页中断处理程序进行处理
4. 恢复CPU现场,继续执行
但是缺页中断时由于所要访问的页面不存在与内存时,有硬件所产生的一种特殊的中断,因此,与一般的中断存在区别:
1. 在指令执行期间产生和处理缺页中断信号
2. 一条指令在执行期间,可能产生多次缺页中断
3. 缺页中断返回时,执行产生中断的那一条指令,而一般的中断返回时,执行下一条指令
2. 页面置换算法
进程运行过程中,如果发生缺页中断,而此时内存中有没有空闲的物理块是,为了能够把所缺的页面装入内存,系统必须从内存中选择一页调出到磁盘的对换区。但此时应该把那个页面换出,则需要根据一定的页面置换算法(Page Replacement Algorithm)来确定。
2.1 最佳置换(Optimal, OPT)
2.1.1 基本思想
置换以后不再被访问,或者在将来最迟才回被访问的页面,缺页中断率最低。但是该算法需要依据以后各业的使用情况,而当一个进程还未运行完成是,很难估计哪一个页面是以后不再使用或在最长时间以后才会用到的页面。所以该算法是不能实现的。但该算法仍然有意义,作为很亮其他算法优劣的一个标准。
2.1.2 算例
采用固定分配局部置换的策略,嘉定系统为某进程在内存中分配了3个物理块,页面访问顺序为2、3、2、1、5、2、4、5、3、2、5、2。假定系统未采用预调页策略,即未事先调入任何页面。进程运行时,一次将2、3、1三个页面调入内存,发生3次缺页中断。当第一次访问页面5时,产生第4次缺页中断,根据OPT算法,淘汰页面1,因为它在以后不会在使用了;第5次缺页中断时,淘汰页面2,因为它在5、3、2三个页面中,是在将来最迟才会被页面访问的页面。以此类推:
注意:第4次中断时将最后不会访问的1剔除,将最后才访问的3放入最下面的内存块中,以后的调度过程中,最后不会访问或最后才被访问的页面总是放在最下面的内存块中。内存块从上到下依次存放最先访问的页面。
中断次数为6,缺页中断率为6/12*100% = 50%。
P: | 2 | 3 | 2 | 1 | 5 | 2 | 4 | 5 | 3 | 2 | 5 | 2 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
M=3 | 2 | 2 | 2 | 2 | 2 | 5 | 5 | 3 | 5 | 5 | 2 | 2 |
3 | 3 | 3 | 5 | 3 | 3 | 5 | 4 | 2 | 5 | 5 | ||
1 | 3 | 2 | 4 | 4 | 3 | 4 | 4 | 4 | ||||
F=5 | Y | Y | Y | Y | Y | Y |
2.2 先进先出置换算法(First In First Out, FIFO)
2.2.1 基本思想
置换最先调入内存的页面,即置换在内存中驻留时间最久的页面。按照进入内存的先后次序排列成队列,从队尾进入,从队首删除。但是该算法会淘汰经常访问的页面,不适应进程实际运行的规律,目前已经很少使用。
2.2.2 算例
仍然以OPT算例为例子。
中断次数为6,缺页中断率为9/12*100% = 75%。
P: | 2 | 3 | 2 | 1 | 5 | 2 | 4 | 5 | 3 | 2 | 5 | 2 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
M=3 | 2 | 3 | 3 | 1 | 5 | 2 | 4 | 4 | 3 | 3 | 5 | 2 |
2 | 2 | 3 | 1 | 5 | 2 | 2 | 4 | 4 | 3 | 5 | ||
2 | 3 | 1 | 5 | 5 | 2 | 2 | 4 | 3 | ||||
F=9 | Y | Y | Y | Y | Y | Y | Y | Y |
2.2.3 Belady异常
一般来说,分配给进程的物理块越多,运行时的缺页次数应该越少,使用FIFO时,可能存在相反情况,分配4个物理块的缺页竟然比3个物理块的缺页次数还多!
例如:进程访问顺序为0、2、1、3、0、2、4、0、2、1、3、4。
M=3时,缺页中断9次。缺页中断率9/12*100% = 75%。
P: | 0 | 2 | 1 | 3 | 0 | 2 | 4 | 0 | 2 | 1 | 3 | 4 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
M=3 | 0 | 2 | 1 | 3 | 0 | 2 | 4 | 4 | 4 | 1 | 3 | 3 |
0 | 2 | 1 | 3 | 0 | 2 | 2 | 2 | 4 | 1 | 1 | ||
0 | 2 | 1 | 3 | 0 | 0 | 0 | 2 | 4 | 4 | |||
F=9 | Y | Y | Y | Y | Y | Y | Y | Y | Y |
M=4时,缺页中断10次。缺页中断率10/12*100% = 83.3%。
P: | 0 | 2 | 1 | 3 | 0 | 2 | 4 | 0 | 2 | 1 | 3 | 4 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
M=4 | 0 | 2 | 1 | 3 | 3 | 3 | 4 | 0 | 2 | 1 | 3 | 4 |
0 | 2 | 1 | 1 | 1 | 3 | 4 | 0 | 2 | 1 | 3 | ||
0 | 2 | 2 | 2 | 1 | 3 | 4 | 0 | 2 | 1 | |||
0 | 0 | 0 | 2 | 1 | 3 | 4 | 0 | 2 | ||||
F=10 | Y | Y | Y | Y | Y | Y | Y | Y | Y | Y |
2.3 最近最久未使用置换算法(Least Recently Used, LRU)
2.3.1 基本思想
置换最近一段时间以来最长时间未访问过的页面。根据程序局部性原理,刚被访问的页面,可能马上又要被访问;而较长时间内没有被访问的页面,可能最近不会被访问。
LRU算法普偏地适用于各种类型的程序,但是系统要时时刻刻对各页的访问历史情况加以记录和更新,开销太大,因此LRU算法必须要有硬件的支持。
2.3.2 算例
仍然以OPT算例为例子。
中断次数为6,缺页中断率为7/12*100% = 58.3%。
P: | 2 | 3 | 2 | 1 | 5 | 2 | 4 | 5 | 3 | 2 | 5 | 2 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
M=3 | 2 | 3 | 2 | 1 | 5 | 2 | 4 | 5 | 3 | 2 | 5 | 2 |
2 | 3 | 2 | 1 | 5 | 2 | 4 | 5 | 3 | 2 | 5 | ||
3 | 2 | 1 | 5 | 2 | 4 | 5 | 3 | 3 | ||||
F=7 | Y | Y | Y | Y | Y | Y | Y |
堆栈实现LRU:
系统使用特殊的堆栈来存放内存中每一个页面的页号。每当访问一页时就调整一次,即把被访问页面的页号从栈中移出再压入栈顶。因此,栈顶始终是最新被访问页面的页号,栈底始终是最近最久未被访问的页号。当发生缺页中断时,总是淘汰栈底页号所对应的页面。
参考
- 温静,计算机操作系统原理,武汉大学出版社.
目录
深入理解【缺页中断】及FIFO、LRU、OPT这三种置换算法的更多相关文章
- FIFO、LRU、OPT这三种置换算法的缺页次数
考虑下述页面走向: 1,2,3,4,2,1,5,6,2,1,2,3,7,6,3,2,1,2,3,6 当内存块数量分别为3时,试问FIFO.LRU.OPT这三种置换算法的缺页次数各是多少? 答:缺页定义 ...
- 网络中,FIFO、LRU、OPT这三种置换算法的缺页次数
FIFO.LRU.OPT这三种置换算法的缺页次数 转载 由于要考计算机四级网络,这里遇到了问题,就搜了一些资料来解疑. 考虑下述页面走向: 1,2,3,4,2,1,5,6,2,1,2,3,7,6,3 ...
- OS存储管理——FIFO,LRU,OPT命中率
课程设计课题 存储管理程序设计 摘 要 虚拟存储器作为现代操作系统中存储管理的一项重要技术,实现了内存扩充功能.而分页请求分页系统正好可以完美的支持虚拟存储器功能,它具有请求调页功能和页面置换功能.在 ...
- 缓存算法(FIFO 、LRU、LFU三种算法的区别)
FIFO算法 FIFO 算法是一种比较容易实现的算法.它的思想是先进先出(FIFO,队列),这是最简单.最公平的一种思想,即如果一个数据是最先进入的,那么可以认为在将来它被访问的可能性很小.空间满的时 ...
- FIFO 、LRU、LFU三种算法
提到缓存,有两点是必须要考虑的:(1)缓存数据和目标数据的一致性问题.(2)缓存的过期策略(机制). 其中,缓存的过期策略涉及淘汰算法.常用的淘汰算法有下面几种:(1)FIFO:First I ...
- 理解VMware虚拟机下网络连接的三种模式(如何配置虚拟机上网)
很多朋友都用vmware来测试不同的系统,我结合自己的经验谈一下对网络设置的理解,不对的地方请指正. bridge:这种方式最简单,直接将虚拟网卡桥接到一个物理网卡上面,和linux下一个网卡 绑定两 ...
- 146 LRU Cache 最近最少使用页面置换算法
设计和实现一个 LRU(最近最少使用)缓存 数据结构,使它应该支持以下操作: get 和 put .get(key) - 如果密钥存在于缓存中,则获取密钥的值(总是正数),否则返回 -1.put(k ...
- 【转载】理解GL_TRIANGLE_STRIP等绘制三角形序列的三种方式
GL_TRIANGLE_STRIP绘制三角形方式很多时候令人疑惑,在这里对其运作机理进行解释. 一般情况下有三种绘制一系列三角形的方式,分别是GL_TRIANGLES.GL_TRIANGLE_STRI ...
- 页置换算法FIFO、LRU、OPT
页置换算法FIFO.LRU.OPT 为什么需要页置换 在地址映射过程中,若在页面中发现所要访问的页面不再内存中,则产生缺页中断.当发生缺页中断时操作系统必须在内存选择一个页面将其移出内存,以便为即将调 ...
随机推荐
- 微软笔记工具OneNote
闲来无事,就在网上找找记笔记的软件工具.发现了微软的OneNote. 门槛还是比较高的:需要微软账户,安装也比较慢.不过用起来体验不错.除了干净的界面,功能也不错,还能同步到云端,这样你随时随地都可以 ...
- context configure and clock schedule
每个窗口都有自己的context,这里演示怎么配置context以及如何实现定时器...... #-*- coding:gbk -*- import pyglet platform=pyglet.wi ...
- java连接mysql的过程
今天突然心血来潮,想要用java连接mysql,记得以前是在vs2010的环境下用C#连接sql sever,其实他们的方法都差不多. 现在就可以简单的介绍下java如何连接mysql 第一步,设计m ...
- wget一个网站很慢的原因
今天wget一个网站时,发现很慢: # wget www.baidu.com ---- ::-- http://www.baidu.com/ Resolving www.baidu.com... 14 ...
- python-requests-proxies判断学习
# coding:utf8 import requests def prox(): url = 'http://115.159.33.177/images/ip.php' ip_list = [ 'h ...
- springmvc 中@Controller和@RestController的区别
@Controller和@RestController的区别? 官方文档:@RestController is a stereotype annotation that combines @Respo ...
- linux中vi的基本操作
在vi如何查找文字 vi redis.config 在命令模式下 按 / 然后最下方会出现/ 打出你所需要查找的字.n 是代表查找下一个 如何撤销上一步的操作 1,退出编辑操作 按esc键 2,按u ...
- Hbase记录-HBase基本操作(一)
HBase创建表 可以使用命令创建一个表,在这里必须指定表名和列族名.在HBase shell中创建表的语法如下所示. create ‘<table name>’,’<column ...
- hp电脑重装win7 64位 后 所有软件都装不上问题【转】
hp 电脑重装后 所有软件都装不上问题 装了近100来次机,第一次遇到这样的. bug描述: 新笔记本刚装了纯净版的64位旗舰版win7,想装软件,就弹出已停止工作.比如装火狐浏览器,弹出火狐浏览器网 ...
- python学习笔记8-邮件模块
我们在开发程序的时候,有时候需要开发一些自动化的任务,执行完之后,将结果自动的发送一份邮件,python发送邮件使用smtplib模块,是一个标准包,直接import导入使用即可,代码如下: impo ...