页面置换算法是什么?我们看一下百度百科对页面置换算法给出的定义:在地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断。当发生缺页中断时,如果操作系统内存中没有空闲页面,则操作系统必须在内存中选择一个页面将其移出内存,以便为即将调入的页面让出空间。而用来选择淘汰哪一页的规则叫做页面置换算法。好了,说到底,页面置换算法就是因为操作系统的内部不够,在调入新的页面时如何取代哪个页面的问题。常见的页面置换算法有如下图所示几种:

  上述的随机替换我们很容易理解,就是操作系统随机挑选的一个被替换的页面。除此之外,页面置换算法还包括最佳页面置换算法、先进先出页面置换算法、最近未使用页面置换算法以及最少使用页面置换算法。

1. OPT页面置换算法(最佳页面置换算法)

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

2. FIFO页面置换算法(先进先出页面置换算法)

  FIFO淘汰算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面进行淘汰。该算法实现只需把一个进程已调入内存的页面,按访问的时间先后顺序链接成一个队列,并设置一个指针,该指针始终指向“最老“的页面。

  问题:随机一访问串和驻留集的大小,通过模拟程序显示淘汰的页号并统计命中率。示例:

  输入访问串:7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1

  驻留集大小:3

  红色表示:指针指向调入内存的页面中“最老“的页面

  通过模拟程序输出淘汰的页号分别为:7 0 1 2 3 0 4 2 3

  命中率为:5/13

  注意内存的页面中“最老“的页面,会被新的网页直接覆盖,而不是“最老“的页面先出队,然后新的网页从队尾入队。

3. LRU页面置换算法(最近未使用页面置换算法)

  LRU(Least Currently Used):FIFO总是优先淘汰那些进入内存早的页面,它根据最早进入时间来选择删除某个页面;而恰恰相反,LRU优先淘汰那些经常不使用的页面,它根据最近进入时间来保留某个页面。

  LRU算法的提出,是基于这样一个事实:在前面几条指令中使用的页面很可能在后面的几条指令中也会使用。反过来说,已经很久没有使用的页面很可能在未来较长的一段时间内不会被用到。这个就是著名的局部性原理——比内存速度还要快的cache,也是基于同样的原理运行的。因此,我们只需要在每次调换时,找到最近未使用的那个页面调出内存。这就是LRU算法的全部内容。

  问题:随机一访问串和驻留集的大小,通过模拟程序显示淘汰的页号并统计命中率。示例:

  输入访问串:7 0 1 2 0 3 0 4 2 3 0 3 2

  驻留集大小:3

  算法的实现:由于LRU算法淘汰的是上次使用距离t时刻最远的页,故需记录这个距离。

  计数器:可使用计数器,给每一个页帧增设一个计数器。每访问一页,就把对应页帧的计数器清零,其余页帧的计数器加1.因此,计数器值为最大的页即上次访问距当前最远的页。

  红色表示:每个页帧对应的计数器值

  通过模拟程序输出淘汰的页号分别为:7 1 2 3 0 4

  命中率为:4/13

  LRU的另一种通俗理解:

  例如一个三道程序,等待进入的是1,2,3,4,4,2,5,6,3,4,2,1。先分别把1,2,3导入,然后导入4,置换的是1,因为他离导入时间最远。然后又是4,不需要置换,然后是2,也不需要,因为内存中有,到5的时候,因为3最远,所以置换3,依次类推。

  注意:虽然两个算法都是用队列这种数据结构实现的,但具体操作不完全遵从队列的原则。这一点不必纠结。

  命中率是指在队满的情况下,新的元素的加入,不影响队列其它元素。即该元素已存在在队列中。

  OPT、LRU以及FIFO算法的对比图如下所示:

4. LFU页面置换算法(最少使用页面排序算法)

  LFU(Least Frequently Used):内存内使用越频繁的页面,被保留的时间也相对越长。

  问题:哈尔滨工业大学2000年考研操作系统真题操作系统考研辅导教程87页一请求分页存储系统,进程P共有5页,访问串为3,2,1,0,3,2,4,3,2,1,0,4,试采用LRU算法和LFU算法分析,当分配页面数为3时,发生的缺页中断次数。

  解:least frequently used (LFU),要求在页置换时置换引用计数最小的页。

5. 页面替换算法的应用——高速缓冲存储器

  高速缓冲存储器(Cache)其原始意义是指存取速度比一般随机存取记忆体(RAM)来得快的一种RAM,一般而言它不像系统主记忆体那样使用DRAM技术,而使用昂贵但较快速的SRAM技术,也有快取记忆体的名称。

  高速缓冲存储器是存在于主存与CPU之间的一级存储器, 由静态存储芯片(SRAM)组成,容量比较小但速度比主存高得多,接近于CPU的速度。在计算机存储系统的层次结构中,是介于中央处理器和主存储器之间的高速小容量存储器。它和主存储器一起构成一级的存储器。高速缓冲存储器和主存储器之间信息的调度和传送是由硬件自动进行的。

  高速缓冲存储器最重要的技术指标是它的命中率。

  作用:在计算机技术发展过程中,主存储器存取速度一直比中央处理器操作速度慢得多,使中央处理器的高速处理能力不能充分发挥,整个计算机系统的工作效率受到影响。Cache就是用来解决中央处理器和主存储区速度不匹配的问题的。

  高速缓冲存储器的容量一般只有主存储器的几百分之一,但它的存取速度能与中央处理器相匹配。根据程序局部性原理,正在使用的主存储器某一单元邻近的那些单元将被用到的可能性很大。因而,当中央处理器存取主存储器某一单元时,计算机硬件就自动地将包括该单元在内的那一组单元内容调入高速缓冲存储器,中央处理器即将存取的主存储器单元很可能就在刚刚调入到高速缓冲存储器的那一组单元内。于是,中央处理器就可以直接对高速缓冲存储器进行存取。在整个处理过程中,如果中央处理器绝大多数存取主存储器的操作能为存取高速缓冲存储器所代替,计算机系统处理速度就能显著提高。

  为了保证CPU访问时有较高的命中率,Cache中的内容应该按一定的算法替换。Cache的替换算法对命中率的影响。 当新的主存块需要调入Cache并且它的可用空间位置又被占满时,需要替换掉Cache的数据,这就产生了替换策略(算法)问题。根据程序局部性规律可知:程序在运行中,总是频繁地使用那些最近被使用过的指令和数据。这就提供了替换策略的理论依据。 替换算法目标就是使Cache获得最高的命中率。Cache替换算法是影响代理缓存系统性能的一个重要因素,一个好的Cache替换算法可以产生较高的命中率。

[Operate System & Algorithm] 页面置换算法的更多相关文章

  1. 操作系统页面置换算法(opt,lru,fifo,clock)实现

    选择调出页面的算法就称为页面置换算法.好的页面置换算法应有较低的页面更换频率,也就是说,应将以后不会再访问或者以后较长时间内不会再访问的页面先调出. 常见的置换算法有以下四种(以下来自操作系统课本). ...

  2. (待续)C#语言中的动态数组(ArrayList)模拟常用页面置换算法(FIFO、LRU、Optimal)

    目录 00 简介 01 算法概述 02 公用方法与变量解释 03 先进先出置换算法(FIFO) 04 最近最久未使用(LRU)算法 05 最佳置换算法(OPT) 00 简介 页面置换算法主要是记录内存 ...

  3. 操作系统笔记(六)页面置换算法 FIFO法 LRU最近最久未使用法 CLOCK法 二次机会法

    前篇在此: 操作系统笔记(五) 虚拟内存,覆盖和交换技术 操作系统 笔记(三)计算机体系结构,地址空间.连续内存分配(四)非连续内存分配:分段,分页 内容不多,就不做index了. 功能:当缺页中断发 ...

  4. 【操作系统】页面置换算法(最佳置换算法)(C语言实现)

    [操作系统]页面置换算法(最佳置换算法)(C语言实现) (编码水平较菜,写博客也只是为了个人知识的总结和督促自己学习,如果有错误,希望可以指出) 1.页面置换算法: 在地址映射过程中,若在页面中发现所 ...

  5. 操作系统 页面置换算法LRU和FIFO

    LRU(Least Recently Used)最少使用页面置换算法,顾名思义,就是替换掉最少使用的页面. FIFO(first in first out,先进先出)页面置换算法,这是的最早出现的置换 ...

  6. 页面置换算法 - FIFO、LFU、LRU

    缓存算法(页面置换算法)-FIFO. LFU. LRU 在前一篇文章中通过leetcode的一道题目了解了LRU算法的具体设计思路,下面继续来探讨一下另外两种常见的Cache算法:FIFO. LFU ...

  7. 页面置换算法(最佳置换算法、FIFO置换算法、LRU置换算法、LFU置换算法)

    页面置换产生的原因是:分页请求式存储管理(它是实现虚拟存储管理的方法之一,其中一个特性是多次性-->多次将页面换入或换出内存) 效果最好的页面置换算法:最佳置换算法 比较常用的页面置换算法有:F ...

  8. 虚存管理页面置换算法 — FIFO和RUL算法模拟实现

    本篇博文为追忆以前写过的算法系列第一篇(20081021) 温故知新 目的: 为了解决内存容量有限与多作业执行的冲突.运用了虚拟存储技术.能从逻辑上对内存进行扩充,达到扩充内存的效果.分页存储管理是实 ...

  9. 页面置换算法——最近最久未使用算法(c语言实现)

    操作系统实验:用C语言编程实现最近最久未使用置换算法(LRU) 最近最久未使用置换算法(LRU),全称Least Recently Used,是一种页面置换算法. 对于在内存中但又不用的数据块(内存块 ...

随机推荐

  1. EF继承关系映射

    继承映射策略的三种策略 There are following three different approaches to represent an inheritance hierarchy in ...

  2. Python学习记录day6

    title: Python学习记录day6 tags: python author: Chinge Yang date: 2016-12-03 --- Python学习记录day6 @(学习)[pyt ...

  3. hdu1521 排列组合(指数型母函数)

    题意: 有n种物品,并且知道每种物品的数量ki.要求从中选出m件物品的排数.         (全题文末) 知识点: 普通母函数 指数型母函数:(用来求解多重集的排列问题) n个元素,其中a1,a2, ...

  4. 【原】如何改变表单元素的外观(for Webkit and IE10)

    表单元素在网页设计中使用的非常频繁,如文本输入框.单选框.复选框.选择列表.上传文件,它们在浏览器中的展现有自带的外观,为了在视觉上取得更好的产品体验,保持客户端的统一,通常产品经理会提出需要改变它的 ...

  5. 移位操作(>>、<<)

    public static void main(String[] args) { /** 移位就是二进制的数往左或右移动,因为接近计算机底层,所以速度比较快 * 8 4 2 1 * * 7 化为二进制 ...

  6. 第10章 Java类的三大特性之一:多态

    1.Java中的多态 多态是指对象的多种形态,主要包括这两种: 1.1引用多态 a.父类的引用可以指向本类的对象b.父类的引用可以指向子类的对象举个例子:父类Anmail,子类Dog,可以使用父类An ...

  7. 第3章 Linux常用命令(3)_文件搜索命令

    3. 文件搜索命令 3.1 文件搜索:find (1)find命令 命令名称 find 命令所在路径 /bin/find 执行权限 所有用户 语法 find [搜索范围] [-选项] [匹配条件] - ...

  8. C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 外部服务调用、内部服务调用优化,面向服务化的

    现在的信息系统越来越复杂,越来越庞大,不仅需要内部是一个整体,而且还需要提供很多对外的服务调用. 1:别人如何调用最方便?用不同的开发语言调用.例如app.手持设备.服务器.2:服务的返回状态是什么样 ...

  9. JSX语法简介

    React的核心机制之一就是可以在内存中创建虚拟的DOM元素.React利用虚拟DOM来减少对实际DOM的操作从而提升性能. JSX简介 JSX就是Javascript和XML结合的一种格式.Reac ...

  10. HTML5之API

    HTML5就是牛,可以直接播放音视频,还可以作图: 一.HTML5中播放视频和音频: 加载时直接播放音频的方式:new Audio("BY2.mp3").play(); <d ...