虚拟内存-页式存储管理算法
来源:互联网 发布:霸业传奇降级转生数据 编辑:程序博客网 时间:2024/05/16 12:52
在请求分页存储管理系统中,由于使用了虚拟存储管理技术,使得所有的进程页面不是一次性地全部调入内存,而是部分页面装入。
这就有可能出现下面的情况:要访问的页面不在内存,这时系统产生缺页中断。操作系统在处理缺页中断时,要把所需页面从外存调入到内存中。如果这时内存中有空闲块,就可以直接调入该页面;如果这时内存中没有空闲块,就必须先淘汰一个已经在内存中的页面,腾出空间,再把所需的页面装入,即进行页面置换
先进先出法(FIFO)
算法描述:由于认为最早调入内存的页不再被使用的可能性要大于刚调入内存的页,因此,先进先出法总是淘汰在内存中停留时间最长的一页,即先进入内存的页,先被换出。先进先出法把一个进程所有在内存中的页按进入内存的次序排队,淘汰页面总是在队首进行。如果一个页面刚被放入内存,就把它插在队尾。
【例1】
考虑下述页面走向:1,2,3,4,2,1,5,6,2,1,2,3,7,6,3,2,1,2,3,6。当内存块数量分别为3,5时,试问先进先出置换算法(FIFO)的缺页次数是多少?(注意,所有内存块最初都是空的,凡第一次用到的页面都产生一次缺页。)
解:当内存块数量分别为3时,FIFO算法的执行过程如下图所示。
页面
1
2
3
4
2
1
5
6
2
1
2
3
7
6
3
2
1
2
3
6
块1
1
1
1
4
4
4
6
6
6
3
3
3
2
2
2
6
块2
2
2
2
1
1
1
2
2
2
7
7
7
1
1
1
块3
3
3
3
5
5
5
1
1
1
6
6
6
3
3
缺页
打叉的表示发生了缺页,共缺页16次。
提示:当FIFO算法执行到蓝色的4号页面时,这时内存中有三个页面,分别是1,2,3。按照FIFO算法,在内存中停留时间最长的页面被淘汰。三个页面在内存中的停留时间用绿色区域标记出来了,可见,1号页面是停留时间最长的,因此要淘汰1号页面。
当内存块数量分别为5时,共缺页10次。FIFO算法的执行过程如下。
页面
1
2
3
4
2
1
5
6
2
1
2
3
7
6
3
2
1
2
3
6
块1
1
1
1
1
1
6
6
6
6
6
块2
2
2
2
2
2
1
1
1
1
块3
3
3
3
3
3
2
2
2
块4
4
4
4
4
4
3
3
块5
5
5
5
5
5
7
缺页
优缺点:先进先出法(FIFO)简单易于实现,但是性能不好,存在Belady现象(分配的页面数增多,缺页率反而增高)。例如对于以下页面:1,2,3,4,1,2,5,1,2,3,4,5,当内存块为3时,出现9次缺页中断;当内存块为4时,出现10次缺页中断。缺页率随着内存块增加而增加的现象,称为Belady现象。
最佳置换法(OPT)
算法描述:最佳置换算法(OPT)在为调入新页面而必须预先淘汰某个老页面时,所选择的老页面应在将来不被使用,或者是在最远的将来才被访问。采用这种算法,能保证有最小缺页率。
考虑下述页面走向:1,2,3,4,2,1,5,6,2,1,2,3,7,6,3,2,1,2,3,6。当内存块数量分别为3,5时,试问最佳置换法(OPT)的缺页次数是多少?(注意,所有内存块最初都是空的,凡第一次用到的页面都产生一次缺页。)
解:当内存块数量分别为3时,OPT算法的执行过程如下图所示。
页面
1
2
3
4
2
1
5
6
2
1
2
3
7
6
3
2
1
2
3
6
块1
1
1
1
1
1
1
3
3
3
3
6
块2
2
2
2
2
2
2
7
2
2
2
块3
3
4
5
6
6
6
6
1
1
缺页
打叉的表示发生了缺页,共缺页11次。
提示:当OPT算法执行到蓝色的4号页面时,这时内存中有三个页面,分别是1,2,3。按照OPT算法,在最远的将来才被访问的页面先淘汰。这三个页面在未来页面走向序列的位置用绿色区域标记出来了,可见,3号页面是最晚被访问到的,因此要淘汰3号页面。到了最后一个6号页面时,由于没有后续的页面序列了,可以随机选择一个页面淘汰。
当内存块数量分别为5时,共缺页7次。OPT算法的执行过程如下。
页面
1
2
3
4
2
1
5
6
2
1
2
3
7
6
3
2
1
2
3
6
块1
1
1
1
1
1
1
1
块2
2
2
2
2
2
2
块3
3
3
3
3
3
块4
4
4
6
6
块5
5
5
7
缺页
优缺点:OPT算法因为要需要预先知道一个进程在整个运行过程中页面走向的全部情况,因此只是一种理想状态,实际是行不通的。一般用算法来衡量(如通过模拟实验分析或理论分析)其他算法的优劣。
最近最少使用置换法(LRU)
算法描述:最近最少使用置换法(LRU)是选择在最近一段时间里最久没有使用过的页面予以淘汰。借鉴FIFO算法和OPT算法,以“最近的过去”作为“不久将来”的近似。
在每次页面命中后,该页面的优先级会调到最高,之所以会默认采用这个策略,是因为一般的程序内存访问具有较高的局部性,这种策略会很有效。
局部性不仅仅局限于虚拟内存管理上,只要有cache的地方,都会考虑局部性。
LRU确定最后使用时间的顺序:
(1)计数器:每个页表项一个使用时间字段,并给CPU增加一个计数器。每次存储访问时钟+1。每当访问一个页面时,时钟寄存器的内容就被复制到页表对应项的时间字段中。这样我们就始终保留每个页面最后一次访问时间。
(2)栈:栈保留页号,访问一个页时就把它取出放到栈顶。这样栈顶总是存放目前使用最多的也。
考虑下述页面走向:1,2,3,4,2,1,5,6,2,1,2,3,7,6,3,2,1,2,3,6。当内存块数量分别为3,5时,试问最近最少使用置换法(LRU)的缺页次数是多少?(注意,所有内存块最初都是空的,凡第一次用到的页面都产生一次缺页。)
解:当内存块数量分别为3时,LRU算法的执行过程如下图所示。
页面
1
2
3
4
2
1
5
6
2
1
2
3
7
6
3
2
1
2
3
6
块1
1
1
1
4
4
5
5
5
1
1
7
7
2
2
2
块2
2
2
2
2
2
6
6
6
3
3
3
3
3
3
块3
3
3
1
1
1
2
2
2
2
6
6
1
1
缺页
打叉的表示发生了缺页,共缺页15次。
提示:当LRU算法执行到蓝色的4号页面时,这时内存中有三个页面,分别是1,2,3。按照LRU算法,在最近一段时间里最久没有使用过的页面予以淘汰。这三个页面在4号页面之前的页面走向序列中的位置用绿色区域标记出来了,可见,1号页面是最久没有被使用过的,因此要淘汰1号页面。
当内存块数量分别为5时,共缺页8次。LRU算法的执行过程如下。
页面
1
2
3
4
2
1
5
6
2
1
2
3
7
6
3
2
1
2
3
6
块1
1
1
1
1
1
1
1
1
块2
2
2
2
2
2
2
2
块3
3
3
3
6
6
6
块4
4
4
4
3
3
块5
5
5
5
7
缺页
优缺点:LRU算法是经常采用的页面置换算法。缺点是实现上需要大量的硬件支持。
不要把存储管理的页面置换算法与处理机调度算法混淆。FIFO是先进先出页面置换算法,FCFS是先来先服务的作业调动算法,虽然道理相似,却用在不同的地方。
衡量页面置换算法好坏的标准是:好的算法能适当减少缺页率,避免系统“抖动”(Thrashing)即频繁的换页活动。
- 虚拟内存-页式存储管理算法
- 存储管理--虚拟内存
- 存储管理——虚拟内存
- 聊聊操作系统-存储管理之虚拟内存
- 页式存储管理(FIFO算法)
- 操作系统——存储管理:分区、分页、分段、请求式分页和虚拟内存
- 操作系统——存储管理:分区、分页、分段、请求式分页和虚拟内存
- 虚拟内存管理
- 虚拟内存管理
- 虚拟内存管理
- 虚拟内存管理
- 虚拟内存管理
- 虚拟内存管理
- 虚拟内存管理
- Linux虚拟内存管理机制,交换和请求分页存储管理技术
- Linux虚拟内存管理机制,交换和请求分页存储管理技术
- Linux内核虚拟内存之页表管理
- 页式存储管理
- jquery操作select
- 爬虫解析2:pyquery总结
- intellij IDEA 如何设置默认的maven配置
- python 发送HTTP请求 post json 格式
- 函数名与函数指针
- 虚拟内存-页式存储管理算法
- python学习笔记2-列表与元组
- VCGlib入门记录一
- PHP文件读取操作
- eclipse从数据库逆向生成Hibernate实体类
- 注销 重启 关机 定时
- Java代码实现数组中插入数据
- 远程通信的几种选择(RPC,Webservice,RMI,JMS的区别)
- 毕业设计开发过程遇到的问题与解决方案记录