存储管理——置换策略
来源:互联网 发布:k近邻算法 编辑:程序博客网 时间:2024/05/17 03:05
无论是否对内存进行扩容,如果面对这样的情况:需访问的数据或程序不在内存时,怎么将塞的满满当当的内存做出适当的调整,使新的程序装入内存,即内存的置换策略。下面将学习的几个置换策略重新描述一下。
1. FIFO算法
将先进入内存的程序块,对于以后来说,可能是最先淘汰的。基于这个想法,采用先进先出的策略来做替换。
这个方法并没有考虑局部性原理,只考虑了程序的顺序执行。因而相对于后面的几个策略显得不是那么有优势。
将各页表项,看作是循环放置的,有一个指针指向当前被置换的页表项。
具体过程:
1. 当装入新程序时,将指针所指向的页表项装入新的程序块;
2. 指针向下一项移动。
2. URL算法
这个策略的想法是:如果当前页表项很久没有被使用,那么根据局部性原理,以后也不太可能会被使用。
这个策略可以减少抖动的出现,在实际运用中表现的效率也最好。
具体过程:
采用一种能判别时长的方式标记页表项(比如:使用栈或时间标签),新程序等待装入到时长最长的页表中
无论是使用栈还是时间标签,将栈低元素移除和每次更新时间标签,都是开销很大的操作。
3. OPT算法
将下次访问距当前时间最长的页表项置换出去,这显然这样可以极大的降低抖动。
如果细想一想,可以发现这是无法实现的。因为要预测未来,这及其的困难。
那这个无法投入到实际使用的置换策略,有何用呢?因为它是当前最优的置换策略,可以判断其他策略的优劣。
4. 时钟算法
面对URL极其接近OPT的性能,但是面对如此高昂的代价,不得不经历一次又一次的革新,于是时钟系列诞生啦。
Version One:
添加使用位,其用法:
当刚装入页表时,使用位标记为1;或者在缺页中断时访问时,也标志为1
当使用位是0,则可将其置换;
在发生缺页中断时,将为1的使用位取反,变为0,直到找到标记为0的页表。
具体过程:
- 从当前指针开始,寻找使用位是0的页表项;
- 如果页表项的使用位是1,则置0;并向后寻找;
- 如果发现页表项为0,则做置换操作,并将使用位置1,并将指针后移一位。
Version Two:
在One的基础上再添加一位修改位。
每一个页表项就有如下四种情况:
- 最近未被访问,未被修改(u = 0; m = 0)
- 最近被访问,未被修改(u = 1; m = 0)
- 最近未被访问,被修改(u = 0; m = 1)
最近被访问,被修改(u = 1; m = 1)
具体过程:
- 从指针当前位置开始,寻找页表项,对使用位不做修改,将第一个(u = 0; m = 0)的页表项置换;
- 第一步失败,则重新扫描,查找(u = 0; m = 1)的页表项。选择第一个这样的页表项进行置换操作。在此过程中,将遇到的使用位由1置0;
- 第二步失败,指针对到初始位置,并将使用位均置为0,重复第一步,有必要时,重复第二步
该方法不仅继承了Version One的优点,而且还可以通过修改位,判断是否将内存中刚调出的信息重新写入辅存。在某种程度上增加了效率。
最后引用《操作系统精髓与设计原理》的一张图结束:
至此关于操作系统一些简单的学习先告一段落,其中极多的细节尚未涉及,一定要好好学习!!!
- 存储管理——置换策略
- 分页式存储管理页面置换算法——LRU、FIFO、改进型的CLOCK算法
- 分区存储管理——空闲分区的分配策略
- 存储管理的页面置换算法
- 存储管理的页面置换算法
- 存储管理的页面置换算法
- 存储管理的页面置换算法
- 存储管理的页面置换算法
- 存储管理基本策略
- 虚拟页式存储管理——页面置换算法及其影响的缺页中断率
- 操作系统实验——内存管理之页面置换算法
- 操作系统存储管理一些策略
- 实验七 存储管理---------常用页面置换算法模拟实验
- beego利用casbin进行权限管理——第二节 策略存储
- OSG — 内存管理策略
- 虚拟内存的置换策略
- redis 置换策略
- 操作系统—存储管理
- 关于Ubuntu下的PDF阅读器
- 关于网络受限的几种解决办法
- bzoj 3876: [Ahoi2014]支线剧情 (无源汇最小费用可行流)[省选计划系列]
- 表单自动验证 js
- Vue 之数组
- 存储管理——置换策略
- 标签切换
- Sqoop学习笔记 --- 过滤空值以及特殊格式
- 【Unity】开发日志5——线性渲染 Line Renderer
- 【HTML5】SVG——rect
- BIRT 简要介绍
- java实现动态代理代码实例(死循环溢出的问题的解决)
- spring通配符归纳
- linux初学<习题三>修改student的密码,别且把密码更新成“T3stlngtlme”!