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

1 Cache与存储结构

(1) 定义

      狭义的Cache指的是位于CPU和主存间的快速RAM, 通常它不像系统主存那样使用动态随机存取存储器(Dynamic Random Access Memory,DRAM)技术,而使用昂贵但较快速的静态随机存取存储器(Static Random-Access Memory,SRAM)技术。广义上的Cache指的是位于速度相差较大的两种硬件之间, 用于协调两者数据传输速度差异的结构。除了CPU与主存之间有Cache,内存与硬盘之间也有Cache,乃至在硬盘与网络之间也有某种意义上的Cache—称为Internet临时文件夹或网络内容缓存等。

(2)作用

      CPU中Cache能极大提高存取数据和指令的时间,让整个存储器(Cache和内存)既有Cache的高速度,又能有内存的大容量;操作系统中的内存Page中使用的Cache能使得频繁读取的内存磁盘文件较少的被置换出内存,从而提高访问速度;数据库中数据查询也用到Cache来提高效率。

(3)DRAM与SRAM

      动态随机存取存储器(Dynamic Random Access Memory,DRAM)是一种半导体存储器,主要的作用原理是利用电容内存储电荷的多寡来代表一个二进制比特(bit)是1还是0。由于在现实中电容会有漏电的现象,导致电位差不足而使记忆消失,因此除非电容经常周期性地充电,否则无法确保记忆长存。由于这种需要定时刷新的特性,因此被称为”动态”存储器。

      静态随机存取存储器(Static Random-Access Memory, SRAM)是随机存取存储器的一种。所谓的”静态”,是指这种存储器只要保持通电,里面储存的数据就可以恒常保持,纵使不刷新也不会丢失记忆;相对之下,动态随机存取内存(DRAM)里面所储存的数据就需要周期性地更新。然而,当电力供应停止时,SRAM储存的数据还是会消失(被称为volatile memory),这与在断电后还能储存资料的ROM或闪存是不同的。


《深入理解计算机系统》一书的P.431给出了如图所示的存储器层次结构:

 

2 常见置换算法

      Cache的容量有限,因此当Cache的容量用完后,而又有新的内容需要添加进来时, 就需要挑选并舍弃原有的部分内容,从而腾出空间来放新内容。此时就需要一些页面置换算法,比较常见的是下面几种。

(1)最优页面置换

      每个页面用该页面首次被访问前需要执行的指令数作为标记,每次缺页中断发生时,替换掉标记最大的页面(即:所有内存页面中最迟将被使用的)。作为评价标准,它是理想算法不可实现:每次缺页中断发生时,操作系统不知道各个页面将在什么时候被访问。

(2)FIFO(First In First Out)

      先进先出置换算法。这个就是类似于队列,先装入的页面先被置换掉。易于实现但是有可能淘汰频繁使用的页面,效果不好。

(3)LRU(Least Recently Used)

      最近最少使用页面置换算法,是为虚拟页式存储管理服务的,近似于最优置换算法。该算法在发生缺页中断时,替换掉最近一段时间内最久没有使用过的页面。基于局部性原理:前面使用频繁的页面很可能在后面也被频繁使用,反过来说就是已经很久没有使用的页面很可能在未来较长的一段时间内不会被用到。LRU算法的缺点在于实现方法的不足:效率高的硬件算法通常在大多数机器上无法运行,而软件算法则开销太大。

      以下两种则是对LRU的近似实现:

(4)NRU(Not Recently Used)

      最近未被使用页面置换算法,性能不是最优,又称为近似的LRU算法。每个页面有两个位:R位(标识最近是否被访问)和M位(标识最近是否被修改),初始时均为0。一旦因为访问发生缺页中断,则设置R位为1;一旦因为修改发生缺页中断,则设置M位为1。此外R随着时钟周期被定期地清零,以区别最近是否被访问,不把M清零是为了决定是否写回磁盘。当发生缺页中断时,将页面分为四类:

第0类:R=0,M=0;

第1类:R=0,M=1;

第2类:R=1,M=0;

第3类:R=1,M=1;

操作系统从类编号最小的页面中选择一个并置换掉。

(5)NFU(Not Frequently Used)

      最不常用页面置换算法,即:置换一段时间内被访问次数最少的页面。但是NFU对记录访问次数的计数器不清零,可能导致一个页面很久没被访问但是不被置换,因为计数器数值大。我在某些地方看到一个叫做LFU(Least Frequently Used)的算法,不知道跟NFU是什么关系。

      NFU与LRU的区别在于:LRU是看页面最后一次被使用到发生置换经历的时间长短,而NFU是看一定时间段内页面被使用的频率。有种说法是LRU算法适合:较大的文件比如游戏客户端(最近加载的地图文件),而NFU算法适合:较小的文件和零碎的文件,比如系统文件、应用程序文件等,我觉得合理。


《现代操作系统》一书的P.136给出了页面置换算法的小结:




  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值