几种页面置换算法

地址映射过程中,若在页面中发现所要访问的页面不再内存中,则产生缺页中断。当发生缺页中断时操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。而用来选择淘汰哪一页的规则叫做页面置换算法。常见的置换算法有:

1)最佳置换算法(OPT)(理想置换算法)

这是一种理想情况下的页面置换算法,但实际上是不可能实现的。该算法的基本思想是:发生缺页时,有些页面在内存中,其中有一页将很快被访问(也包含紧接着的下一条指令的那页),而其他页面则可能要到10、100或者1000条指令后才会被访问,每个页面都可以用在该页面首次被访问前所要执行的指令数进行标记。最佳页面置换算法只是简单地规定:标记最大的页应该被置换。这个算法唯一的一个问题就是它无法实现。当缺页发生时,操作系统无法知道各个页面下一次是在什么时候被访问。虽然这个算法不可能实现,但是最佳页面置换算法可以用于对可实现算法的性能进行衡量比较。

2)先进先出置换算法(FIFO)

最简单的页面置换算法是先入先出(FIFO)法。这种算法的实质是,总是选择在主存中停留时间最长(即最老)的一页置换,即先进入内存的页,先退出内存。理由是:最早调入内存的页,其不再被使用的可能性比刚调入内存的可能性大。建立一个FIFO队列,收容所有在内存中的页。被置换页面总是在队列头上进行。当一个页面被放入内存时,就把它插在队尾上。
这种算法只是在按线性顺序访问地址空间时才是理想的,否则效率不高。因为那些常被访问的页,往往在主存中也停留得最久,结果它们因变“老”而不得不被置换出去。
FIFO的另一个缺点是,它有一种异常现象,即在增加存储块的情况下,反而使缺页中断率增加了。当然,导致这种异常现象的页面走向实际上是很少见的。

3)最近最久未使用(LRU)算法

FIFO算法和OPT算法之间的主要差别是,FIFO算法利用页面进入内存后的时间长短作为置换依据,而OPT算法的依据是将来使用页面的时间。如果以最近的过去作为不久将来的近似,那么就可以把过去最长一段时间里不曾被使用的页面置换掉。它的实质是,当需要置换一页时,选择在最近一段时间里最久没有使用过的页面予以置换。这种算法就称为最久未使用算法(Least Recently Used,LRU)。
LRU算法是与每个页面最后使用的时间有关的。当必须置换一个页面时,LRU算法选择过去一段时间里最久未被使用的页面。
LRU算法是经常采用的页面置换算法,并被认为是相当好的,但是存在如何实现它的问题。LRU算法需要实际硬件的支持。其问题是怎么确定最后使用时间的顺序,对此有两种可行的办法:
    1.计数器。最简单的情况是使每个页表项对应一个使用时间字段,并给CPU增加一个逻辑时钟或计数器。每次存储访问,该时钟都加1。每当访问一个页面时,时钟寄存器的内容就被复制到相应页表项的使用时间字段中。这样我们就可以始终保留着每个页面最后访问的“时间”。在置换页面时,选择该时间值最小的页面。这样做,不仅要查页表,而且当页表改变时(因CPU调度)要维护这个页表中的时间,还要考虑到时钟值溢出的问题。
    2.栈。用一个栈保留页号。每当访问一个页面时,就把它从栈中取出放在栈顶上。这样一来,栈顶总是放有目前使用最多的页,而栈底放着目前最少使用的页。由于要从栈的中间移走一项,所以要用具有头尾指针的双向链连起来。在最坏的情况下,移走一页并把它放在栈顶上需要改动6个指针。每次修改都要有开销,但需要置换哪个页面却可直接得到,用不着查找,因为尾指针指向栈底,其中有被置换页。
因实现LRU算法必须有大量硬件支持,还需要一定的软件开销。所以实际实现的都是一种简单有效的LRU近似算法。
一种LRU近似算法最近未使用算法(Not Recently Used,NUR)。它在存储分块表的每一表项中增加一个引用位,操作系统定期地将它们置为0。当某一页被访问时,由硬件将该位置1。过一段时间后,通过检查这些位可以确定哪些页使用过,哪些页自上次置0后还未使用过。就可把该位是0的页淘汰出去,因为在最近一段时间里它未被访问过。

4)Clock置换算法(LRU算法的近似实现)

5)最少使用(LFU)置换算法

在采用最少使用置换算法时,应为在内存中的每个页面设置一个移位寄存器,用来记录该页面被访问的频率。该置换算法选择在最近时期使用最少的页面作为淘汰页。由于存储器具有较高的访问速度,例如100 ns,在1 ms时间内可能对某页面连续访问成千上万次,因此,通常不能直接利用计数器来记录某页被访问的次数,而是采用移位寄存器方式。每次访问某页时,便将该移位寄存器的最高位置1,再每隔一定时间(例如100 ns)右移一次。这样,在最近一段时间使用最少的页面将是∑Ri最小的页。

LFU置换算法的页面访问图与LRU置换算法的访问图完全相同;或者说,利用这样一套硬件既可实现LRU算法,又可实现LFU算法。应该指出,LFU算法并不能真正反映出页面的使用情况,因为在每一时间间隔内,只是用寄存器的一位来记录页的使用情况,因此,访问一次和访问10 000次是等效的。

参考:http://hary.wang.blog.163.com/blog/static/11695172820104945040438/

6)工作集算法

参考:http://hi.baidu.com/binbin_88115/blog/item/f2787a386d2eb7d8d5622595.html

7)工作集时钟算法

8)老化算法(非常类似LRU的有效算法)

9)NRU(最近未使用)算法

10)第二次机会算法

第二次机会算法的基本思想是与FIFO相同的,但是有所改进,避免把经常使用的页面置换出去。当选择置换页面时,检查它的访问位。如果是0,就淘汰这页;如果访问位是1,就给它第二次机会,并选择下一个FIFO页面。当一个页面得到第二次机会时,它的访问位就清为0,它的到达时间就置为当前时间。如果该页在此期间被访问过,则访问位置1。这样给了第二次机会的页面将不被淘汰,直至所有其他页面被淘汰过(或者也给了第二次机会)。因此,如果一个页面经常使用,它的访问位总保持为1,它就从来不会被淘汰出去。
第二次机会算法可视为一个环形队列。用一个指针指示哪一页是下面要淘汰的。当需要一个存储块时,指针就前进,直至找到访问位是0的页。随着指针的前进,把访问位就清为0。在最坏的情况下,所有的访问位都是1,指针要通过整个队列一周,每个页都给第二次机会。这时就退化成FIFO算法了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/350871.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win7摄像头怎么开_win7网络连接不可用怎么办

win7网络连接不可用怎么办?网络出现故障最常见的就是网络明明连接上,但是依然提示网络连接不可用,小白系统遇到最常见的就是使用win7系统的用户反馈的,下面让小白系统教你解决win7网络连接不可用的问题吧。首先我们判断网络状态是…

cmake--安装

一, 目录结构 ├── cmake-examples.conf├── CMakeLists.txt├── include│ └── installing│ └── Hello.h└── src ├── Hello.cpp └── main.cpp * link:CMakeLists.txt[] - Contains the CMake commands yo…

ubuntu 关机重启

关机,重启 reboot (重启) shutdown -h now (立刻关机) shutdown -h 10 (10min后立刻关机) shutdown -h 20:05 (今天20:05立刻关机)

excel合并两列内容_excel新手问题:怎么把两列数据合并到一起?用这个公式

今天看见有新手在问:怎么把两列数据合并到一起?其实,这种情况在工作中会经常遇到,但很多人可能还在用复制粘贴的方法。只要掌握最简单的一个函数公式,就可以实现快速两列合并。第一步:掌握“&”运算符使…

Pycharm Anaconda 安装dlib

由于采用python3.7安装会出现各种问题,两种解决方法。 1)安装Cmake boost等(不推荐,麻烦且不容易成功)。 2)安装Anaconda,创建一个python3.6的环境。 这里使用第二种。 一、安装Anaconda 。 方法…

java 使用jasper_使用Jasper Reports以Java创建报告

java 使用jasper上周,我试图使用Jasper创建报告。 在这篇文章中,我将记录一些资源和链接,以便对任何寻求类似信息的人都有用。 我将介绍Jasper报告,示例和Dynamic Jasper的生命周期。 Jasper Reports是世界上最受欢迎的开源报告…

计算机科学基础知识(四): 动态库和位置无关代码

一、前言 本文主要描述了动态库以及和动态库有紧密联系的位置无关代码的相关资讯。首先介绍了动态库和位置无关代码的源由,了解这些背景知识有助于理解和学习动态库。随后,我们通过加-fPIC和不加这个编译选项分别编译出两个relocatable object file&…

安装后添加没有class library_《没有秘密的你》:戚薇曝光手机号,粉丝急忙添加后却甜哭了?...

现在大家对于戚薇都是非常熟悉的吧,现在她可以说是娱乐圈内非常受关注的一个明星了,因为自己的颜值和耿直的性格也是直接圈粉无数,当时自己没有很多名气的时候,更是因为自己的女儿增添了很多的人气。想必在今年夏天的时候&#xf…

ubuntu 硬盘使用情况

df (硬盘使用情况) df -h du (当前文件夹多大) du -h

执行器的Spring启动和安全性事件

Spring Boot Actuator提供了审核功能,用于在启用Spring Security的Spring Boot应用程序中发布和侦听与安全相关的事件。 默认事件是身份验证成功,身份验证失败和访问被拒绝,但是可以使用自定义事件进行扩展。 确保在项目中启用了Spring Boot…

docker 查看日志_8个优秀Docker容器监控工具,收藏了

Docker是目前使用最广泛的容器之一,但它并不总是像物理硬件一样可见。而使用docker容器监控工具有助于消除这种透明度的缺失。以下介绍8种优秀Docker容器监控工具。1.SolarWinds Server&Application MonitorSolarWinds Server&Application Monitor是一个应用…

ubuntu 打包压缩

打包 tar -cvf test.tar *.txt tar -cvf test.tar *.txt 解包 tar -xvf test.tar tar -xvf test.tar -C abc/ 解压到当前路径的abc目录下 打包压缩 tar -zcvf test.tar.gz *.txt 解压缩包 tar -zxvf test.tar -C abc/ 解压到当前路径的abc目录下 .tar.bz2格式…

计算机基础知识:什么是位、字节、字、KB、MB

位、字节、字、KB、MB 位:“位(bit)”是电子计算机中最小的数据单位。每一位的状态只能是0或1。 字节:8个二进制位构成1个“字节(Byte)”,它是存储空间的基本计量单位。1个字节可以储存1个英文字母或者半个汉字,换句话说&#xf…

Tr A(矩阵快速幂)

A为一个方阵&#xff0c;则Tr A表示A的迹&#xff08;就是主对角线上各项的和&#xff09;&#xff0c;现要求Tr(A^k)%9973。 Input 数据的第一行是一个T&#xff0c;表示有T组数据。 每组数据的第一行有n(2 < n < 10)和k(2 < k < 10^9)两个数据。接下来有n行&am…

matlab中的方波信号图片_基于Matlab的雷达信号处理仿真

这是一个较为基础的图文教程(含仿真代码)&#xff1a;利用MATLAB设计经典的雷达数字信号处理。该系统具备对雷达目标回波的处理能力&#xff0c;能够从噪声中将目标检测出来&#xff0c;并提取目标的距离、速度、角度信息。教程分五节完成&#xff0c;主要包括&#xff1a;第一…

ubuntu find

find ./ -name “*.txt” find ./ -size 1M (当前目录下大小为1M) sudo find ./ -size 1M &#xff08;大小为1M&#xff0c;sudo为获取权限&#xff09; sudo find ./ -size 1M &#xff08;大于为1M&#xff09; sudo find ./ -size -1M &#xff08;小于1M&#xff09…

git clone 一些简单笔记

自使用了git后&#xff0c;就彻底喜欢上了&#xff0c;深深体会到了自由的感觉&#xff0c;记录一些简单的笔记和使用心得&#xff0c;仅供留迹&#xff0c;以备后查。。。 git clone 命令参数&#xff1a; usage: git clone [options] [--] <repo> [<dir>]-v, --v…

github上java_GitHub上Java的Bloom Bloom实现

github上java布隆过滤器是集数据结构的一种 。 对于那些不了解的对象&#xff0c;“设置数据结构”仅包含一个主要方法。 它仅用于确定特定元素是否包含在一组元素中。 大多数数据结构&#xff08;例如Hash Map &#xff0c; Linked List或Array &#xff09;都可以相当容易地创…

Error:The supplied javaHome seems to be invalid. I cannot find the java executable

设置一下gradle的JVM路径就好 转载于:https://www.cnblogs.com/shimu/p/10708888.html