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

最佳置换法(OPT):选择将来不再使用或在最远的将来才被访问的页调换出去(不便于实现)

  这是一种理想情况下的页面置换算法,但实际上是不可能实现的。该算法的基本思想是:发生缺页时,有些页面在内存中,其中有一页将很快被访问(也包含紧接着的下一条指令的那页),而其他页面则可能要到10、100或者1000条指令后才会被访问,每个页面都可以用在该页面首次被访问前所要执行的指令数进行标记。最佳页面置换算法只是简单地规定:标记最大的页应该被置换。这个算法唯一的一个问题就是它无法实现。当缺页发生时,操作系统无法知道各个页面下一次是在什么时候被访问。虽然这个算法不可能实现,但是最佳页面置换算法可以用于对可实现算法的性能进行衡量比较。
2)先进先出置换算法(FIFO)
  最简单的页面置换算法是先入先出(FIFO)法。这种算法的实质是,总是选择在主存中停留时间最长(即最老)的一页置换,即先进入内存的页,先退出内存。理由是:最早调入内存的页,其不再被使用的可能性比刚调入内存的可能性大。建立一个FIFO队列,收容所有在内存中的页。被置换页面总是在队列头上进行。当一个页面被放入内存时,就把它插在队尾上。
这种算法只是在按线性顺序访问地址空间时才是理想的,否则效率不高。因为那些常被访问的页,往往在主存中也停留得最久,结果它们因变“老”而不得不被置换出去。
FIFO的另一个缺点是,它有一种异常现象,即在增加存储块的情况下,反而使缺页中断率增加了。当然,导致这种异常现象的页面走向实际上是很少见的。
3)最近最少使用(LRU)算法(时间)
  FIFO算法和OPT算法之间的主要差别是,FIFO算法利用页面进入内存后的时间长短作为置换依据,而OPT算法的依据是将来使用页面的时间。如果以最近的过去作为不久将来的近似,那么就可以把过去最长一段时间里不曾被使用的页面置换掉。它的实质是,当需要置换一页时,选择在最近一段时间里最久没有使用过的页面予以置换。这种算法就称为最久未使用算法(LeastRecentlyUsed,LRU)。LRU算法是与每个页面最后使用的时间有关的。当必须置换一个页面时,LRU算法选择过去一段时间里最久未被使用的页面。

实现:(2种方法)

1)维护一个链表,最近刚刚使用的页面移到链表表头节点,那么任意时刻,链表表尾节点就都是最少使用的、

2)维护一个栈,将最近访问的页面放到栈顶,同时考察是否有相同的页面在栈内,有的话抽出,因此栈顶是最近使用的,栈底都是最少使用的。

4)最不常用(LFU)置换算法 (频率,计数器)

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

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

5)时钟页面置换算法(时间)       是对LRU的近似,对FIFO的改进

需要使用到访问位。把各个页面组织成环形链表(类似于时钟面)。把指针指向最老的页面。

当发生一个缺页中断的时候。若它的访问位为0,则淘汰,指针下移,页面插入;若访问位为1,则把该位置0,指针下移,继续寻找,直到找到被淘汰的页面。

Clock算法和LRU算法缺页中断次数是相近的!Clock使用一个比特位来表示最近一段时间的访问情况。

当所有的访问位都为1的时候,Clock算法就退化为FIFO算法!!!

6)二次机会算法(时间)

利用页表项中的访问位和脏位。是对Clock算法的改进,用于减少将页面写回磁盘的IO次数。

既被访问,又被写的位具有两次机会!其他的情况下只有一次机会!

used  dirty          --------       used     dirty

0        0                                   置换

0        1                                 0          0

1        0                                 0         0

1        1                                 0         1            此时两次机会


页面置换算法

操作系统:几种页面置换算法相关推荐

  1. 操作系统:基于页面置换算法的缓存原理详解(下)

    概述: 在上一篇<操作系统:基于页面置换算法的缓存原理详解(上)>中,我们主要阐述了FIFO.LRU和Clock页面置换算法.接着上一篇说到的,本文也有三个核心算法要讲解.分别是LFU(L ...

  2. 操作系统实验:页面置换算法的模拟实现及命中率对比(学习笔记)

    操作系统实验:页面置换算法的模拟实现及命中率对比(学习笔记) 题目要求 输入要求 输出要求 编程平台 实验成果 开始模拟 错误输入 退出程序 代码实现 抽象数据类型定义 指令地址流生成 指令地址流到页 ...

  3. 操作系统实验(五):c实现几种页面置换算法

    1.[实验目的] 加深对页面置换算法的理解. 掌握几种页面置换算法的实现方法. 通过实验比较各种置换算法的优劣. 2.[实验内容] 1.参考用C语言实现的先进先出算法FIFO的代码,实现最佳置换算法O ...

  4. 操作系统:基于页面置换算法的缓存原理详解(上)

    概述: 作为一个学计算机的一定听过缓存(注意这里是缓存,不是缓冲).比如我们在登录网页时,网页就可以缓存一些用户信息:比如我们在写界面代码的时候,可能就会遇到界面的绘制是基于一些缓存算法的.所以,了解 ...

  5. 三种页面置换算法(详解)

    地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断.当发生缺页中断时,如果操作系统内存中没有空闲页面,则操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间.而 ...

  6. 【操作系统】考研の页面置换算法例子(看不懂你来打我~!)

    文章目录 1 缺页率 2 页面置换算法 1 缺页率 缺页率=缺页次数/缺页次数+访问成功次数 2 页面置换算法 根据页面走向,使用先进先出页面淘汰算法时,页面置换情况见下表. 物理块数为3时: 走向 ...

  7. 【南邮操作系统实验】页面置换算法(FIFO、LRU、OPT)图形化界面(JavaFx)

    页面置换算法图形化界面 前言 运行效果 源码 FIFO LRU OPT FXML界面 控制器 启动类 前言 其实以前操作系统实验的时候我写过了三份了:(命令行) 页面置换算法 (FIFO.LRU.OP ...

  8. 【操作系统】虚拟存储器--页面置换算法

    页面置换算法是用来选择换出页面的算法. 页面置换算法的优劣直接影响到系统的效率,若选择不合适,可能会出现抖动(Thrashing)现象. 抖动:刚被淘汰出内存的页面,过后不久又要访问它,需要再次将其调 ...

  9. 操作系统实验2—页面置换算法模拟程序设计

    一.实验目的 对页面置换做进一步的理解. 了解页面置换的任务. 通过编程掌握页面置换算法及缺页率计算. 了解Belady现象和抖动现象. 二.实验内容 输入给出一组页面访问顺序(如页面走向是1.2.5 ...

最新文章

  1. C语言实现面向对象示例
  2. exp导出excel oracle_如何从Oracle快速导出数据到Excel
  3. (转载)分享常用的GoLang包工具
  4. SAP License:SAP安装前添加虚拟网卡步骤
  5. SC命令---安装、开启、配置、关闭windows服务 bat批处理(转载)
  6. LinkedBlockingQueue1.8源码
  7. sqlserver的for xml path和mysql的group_concat的区别
  8. json数据格式转换成csv数据格式,并保存
  9. ADS(Advanced Design system)仿真测试元器件在不同功率下的输入阻抗
  10. 为什么转置一个512x512的矩阵,会比513x513的矩阵慢很多?
  11. 测试用例的设计方法--比较全的
  12. 2022.5.28-YMO青少年奥林匹克数学竞赛复赛(一等奖)
  13. 复选框CheckBox
  14. 1024程序员节|代码改变世界,科技创造未来~ 机械工业出版社送福利,好书相赠~
  15. landsat TM数据辐射定标和flaash大气校正
  16. chariot iperf使用_jperf使用说明
  17. 【VIS】Video Instance Segmentation
  18. DNS地址解析的设置
  19. 新媒体运营黎想: UGC社区运营技巧!
  20. 装过MAC OS的SSD硬盘再装Windows不能启动的解决办法

热门文章

  1. apache的动态编译和静态编译
  2. 配置PIM auto-rp
  3. matlab二维特殊函数面积图area()函数
  4. 解读电感和电容在交流电路中的作用
  5. Windows下使用静态库
  6. java lambda 局部变量_java Lambda表达式访问局部变量详细介绍
  7. esp8266 阿里云 arduino_ESP8266接入阿里云——基于官方SDK接入阿里云串口获取云下发数据...
  8. Linux下LCD自动关闭解决方法,一般就自动十分钟黑屏的原因
  9. RabbitMQ实例教程:Windows下安装RabbitMQ
  10. 【工具】git笔记(一)