zoukankan      html  css  js  c++  java
  • [Operate System & Algorithm] 页面置换算法

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

     

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

    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替换算法可以产生较高的命中率。

  • 相关阅读:
    Mysql:用户操作命令
    Cookie和Set-Cookie
    Matcher中appendReplacement()方法与replaceAll()方法的联系
    记录一次mysql执行异常(磁盘空间)
    ehcache简单配置
    md5
    mysql后台运行简单的备份脚本
    shell脚本研习
    SpringBoot根据条件,去注入需要的Bean
    springboot后台跨域设置
  • 原文地址:https://www.cnblogs.com/maybe2030/p/4781930.html
Copyright © 2011-2022 走看看