这篇文章是对现代操作系统(第三版)第三章存储管理中页面置换算法的一个读书笔记,希望对各位有用。
一. 最优页面置换算法
该算法是最好的页面置换算法,但在现实中不可能实现,根据其算法描述即可知道原因。
最优页面置换算法的基本思想:
当发生缺页中断时,对于在内存中的页面,有的页面会立即被访问,有个页面第一次访问可能在1000条指令后被访问,有个页面可能在100万条指令后被访问。可以用某个页面第一次被访问时所需的指令数作为页面标记值。当需要置换出一个页面时,选择标记值最大的页面置换出。
显然该算法是最好的页面置换算法,但是这在现实中不可能实现,因为操作系统不可能知道下次页面访问在什么时候。
二. 最近未使用(Not Recently Used,NRU)页面置换算法
该算法基本思想如下:
a. 我们为每个页面设置了两个状态位:页面被访问为R位和页面被修改为M位。
b. 当页面被访问时,硬件将R设置为1;页面被写入(修改)时,M为被设置为1。R与M的复位由操作系统来完成。
c. 当进程被调度时,它的所有页面的R与M位被操作系统初始化为0,同时R位将定期被时钟中断清零。
d. 根据R位与M位的取值,我们将页面分为了4类:
-------第0类:没有被访问,没有被修改(R=0,M=0)
-------第1类:没有被访问,已被修改(R=0,M=1)
-------第1类:已被访问,没有被修改(R=1,M=0)
-------第3类:已被访问,已被修改(R=1,M=1)
e. 最近未使用页面置换算法则是在页面编号最小的页面中随机选择一个页面被换出。
三. 先进先出(FIFO)页面置换算法
该算法的基本思想如下:
操作系统维护一个所有在当前内存中页面的链表。其中最迟进入内存的页面在链表尾,最早进入内存的页面在链表头。当发生缺页中断时,将表头的页面淘汰,然后将新的页面加载链表尾。
四. Second chance 页面置换算法
该算法是对FIFO算法的一种优化,因为FIFO淘汰出的页面虽然是最老的页面,但可能是使用频率很高的页面。
该算法的基本思想如下:
我们在选择页面淘汰时,需要检查该页面的R位。如果最老的页面R位为0,则选择其淘汰;如果R位为1,则将该页面添加到表尾,同时修改其装入时间为当前时间;而后继续检索下一个页面,知道发现R为0的页面。
五. 时钟算法
时钟算法是对FIFO算法的一种优化。
该算法将链表转化一个环的形式,并使指针指向最老的页面。当缺页中断发生时,算法首先检索指针指向的页面。如果该页面的R位为0,则淘汰这个页面,同时在该位置将新的页面装入。如果该页面的R位为1,则将该R复位为0,当时指针下移到下一个页面。而后重复直道找到一个页面被替换出。
六. 最近最少使用(Least Recently Used,LRU)页面置换算法
该算法的基本思想是替换出未使用时间最长的页面。
有两种特殊的硬件用以实现这两种算法:
硬件一: 硬件维护一个64位的计数器C,每当指令完成后自动加1,每个页表项需要域来保存该计数器的值。每当访问内存结束后,C的值被更新到页表项中。一旦发生缺页中断,则选择值最小的页面被替换出。
硬件二:在一个由n个叶框的机器中,该硬件维护一个n×n大小的矩阵,该矩阵初始全零。每当访问叶框K,则将矩阵K行的值置为1,K列的值置为0. 如果发生缺页中断,则首先计算所有行的二进制数值的大小,选择值最小的页淘汰。
七. 最不常用NFU(Not Frequently Used)算法
该算法将每个页面与一个软件计数器关联,计算器初值为0。每当时钟中断触发,操作系统扫描所有的页面,如果R位为1,则将该页面计算器加1。一旦发生缺页中断,就选择计算器值最小的页面替换。
八. 老化算法
老化算法对最不重用NFU算法做了一些修改:
每当检测到R时,先将当前计算器右移一位,而后将R的值加到计数器的最左端。
九. 工作集算法
工作集值当前进程所使用的页面的集合。而后被定义为过去实际运行时间t内进程访问的页面集合。实际运行时间是指进程从开始运行到当前所使用的CPU时间总数。
工作集页面置换算法的基本思想如下:
基本思路是找出一个不在工作集中的页面替换出去。
该算法中,每个页面都有一个R位以及上次使用该页面的一个近似时间。当发生缺页中断时,扫描页表,对于每个表项,需要检查它的R位,如果R位为1,则将当前时间写进上面提到的“上次使用该页表时间”然后扫描下一个表项。如果R为0,则表示当前页表未被访问,其可作为候选可被替换页表。计算该页表生存时间T(用当前时间减去上次使用时间),如果T>t,则该页表被替换,否则继续扫描。
上述算法会得到如下结果:
-----找到一个生存时间T>t的页面被替换

-----所有候选可替换页表的生存时间T≤t,则淘汰T最大的页表。
-----如果所有的页表R都为1,则随机选择一个页面淘汰。
十. 工作集时钟页面置换算法
该算法基于时钟算法,将工作集以环的形式存放。
该算法的基本思路如下:
当发生缺页中断时,首先检索指针指向的页面。如果其R位为1,则将R复位,然后指针指向下一个页面。
如果R为0,则计算生存时间T。如果T>t,且页面是干净的,则该页面不在工作集中,将其替换。如果页面被修改过(M位为1),则不能理解申请替换,因为该页面在磁盘上没有副本。应该继续检索,因为有可能会发现一个旧的且干净的页面可以被替换。

常用的页面置换算法小结。相关推荐

  1. OS- -内存之页面置换算法

    OS- -内存之页面置换算法 文章目录 OS- -内存之页面置换算法 一.内存之页面置换算法 1.最优页面置换算法 2.最近未使用页面置换算法 3.先进先出页面置换算法 4.第二次机会页面置换算法 5 ...

  2. 内存管理之页面置换算法

    前面我们提到了关于内存管理的一些知识,交换技术和虚拟内存是两种常用的处理内存过载的办法.对于虚拟内存,进行换入换出的基本单位是页面.当进程访问的页面没有被映射到内存时,操作系统必须在内存中选择一个页面 ...

  3. 【操作系统】页面置换算法

    页面置换算法 在进程运行过程中,若需要访问的物理块不在内存中,就需要通过一定的方式来将页面载入内存,而此时内存很可能已无空闲空间,因此就需要一定的算法来选择内存中要被置换的页面,这种算法就被称为页面置 ...

  4. 存储管理的页面置换算法

    存储管理的页面置换算法 存储管理的页面置换算法在考试中常常会考到,操作系统教材中主要介绍了3种常用的页面置换算法,分别是:先进先出法(FIFO).最佳置换法(OPT)和最近最少使用置换法(LRU).大 ...

  5. 13 操作系统第三章 内存管理 虚拟内存 请求分页管理方式 页面置换算法 页面分配策略

    文章目录 1 虚拟内存 1.1 传统存储管理方式的特征.缺点 1.2 局部性原理 1.3 虚拟内存主要特征 1.4 如何实现虚拟内存技术 1.5 虚拟内存的基本概念小结 2 请求分页管理方式 2.1 ...

  6. 操作系统-页面置换算法

    实验六:页面置换算法 一. 实验目的( 页面置换 ) 在地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断.当发生缺页中断时,如果操作系统内存中没有空闲页面,则操作系统必须在内存选 ...

  7. 虚拟内存,分页与分段的区别、页面置换算法,颠簸,局部性原理

    什么是虚拟内存? 虚拟内存允许执行进程不必完全在内存中.虚拟内存的基本思想是:每个进程拥有独立的地址空间,这个空间被分为大小相等的多个块,称为页(Page),每个页都是一段连续的地址.这些页被映射到物 ...

  8. 基础算法与数据结构——页面置换算法

    一.引言 第一次接触页面置换算法是在大学里学习<操作系统>时候,起初觉得只是几个简单的算法而已,并没有太多的关注,随着阅历的增长,才发现页面置换算法的思想出现在缓存.分布式.中间件.网络等 ...

  9. Cache与页面置换算法FIFO、LRU等

    1 Cache与存储结构 (1) 定义 狭义的Cache指的是位于CPU和主存间的快速RAM, 通常它不像系统主存那样使用动态随机存取存储器(Dynamic Random Access Memory, ...

最新文章

  1. C语言Prims求最小生成树MST的算法(附完整源码)
  2. django本地安装mysql_django使用mysql(本地环境下)_MySQL
  3. Docker添加或者更改容器的端口映射
  4. java ee junit_JavaEE——Junit
  5. docker-maven-plugin 发布镜像到 window环境的docker服务器
  6. e-006 matlab,基于MATLAB进行潮流计算
  7. python条形图的动画显示水能时钟_[宜配屋]听图阁
  8. 如何让背景图片固定在中间,滚动内容图片不动?
  9. java基础反射知识总结_非常好的Java基础反射总结
  10. ubuntu 搭建 smtp 邮件服务器
  11. OA系统四级模块编写测试用例(角色模块)
  12. ·「笔记」安装composer -- 安装phpspreadsheet
  13. 科技圈以 A 取名的时尚潮流
  14. 通过docker创建Nginx容器并运行Vue项目(可用https进行访问)
  15. windows中git输错密码后不能重新输入的问题
  16. MATLAB--数字图像处理 车牌识别之分离字符
  17. python正则表达式的学习
  18. 跑步戴哪款无线耳机好?适合跑步用的运动耳机分享
  19. 编程的同时还能盯股票基金?VSCode这款神器插件绝了!
  20. 微信公众平台开发(六) 翻译功能开发

热门文章

  1. 项目管理之授权,拿什么信任你,我的兄弟!
  2. 利用Java实现键盘上输入体重和身高计算BMI是否超标
  3. 使用go-cqhttp结合python作自己的机器人(下)
  4. 什么是SmartArt ? 如何在ONLYOFFICE使用它
  5. Axles UVALive 7197
  6. windows修改用户文件夹名称
  7. java jdk安装在_java JDK安装
  8. Python爬取城市天气数据,并作数据可视化
  9. C/C++ 实现strchr函数
  10. 神经网络过拟合的判断与解决