更新时间:2022-09-22 22:59
缓冲存储器(Cache)是一种高速缓冲存储器,是为了解决CPU和主存之间速度不匹配而采用的一项重要技术。Cache是介于CPU和主存之间的小容量存储器,但存取速度比主存快。主存容量配置几百MB的情况下,Cache的典型值是几百KB。Cache能高速地向CPU提供指令和数据,从而加快了程序的执行速度。从功能上看,它是主存的缓冲存储器,由高速的SRAM组成。为追求高速,包括管理在内的全部功能均由硬件实现,因而对程序员是透明的。
当前随着半导体器件集成度的进一步提高,缓冲存储器已放入到CPU中,其工作速度接近CPU的速度,从而能组成两级以上的Cache系统。
缓冲存储器工作原理要求它尽量保存最新数据。当一个新的主存块需要复制到Cache,而允许存放此块的行位置都被其他主存块占满时,就要产生替换。替换问题与Cache的组织方式紧密相关。对直接映射的Cache来说,因一个主存块只有一个特定的行位置可存放,所以问题解决起来很简单,只要把此特定位置上的原主存块换出Cache即可。对全相联和组联Cache来说,就要从允许存放新主存块的若干特定行中选取一行换出。
如何选取就涉及到替换策略,又称替换算法。通过硬件实现的常用算法主要有以下3种。
最不经常使用(LFU)算法
LFU算法认为应将一段时间内被访问次数最少的那行数据换出。为此,每行设置一个计数器。新行建立后从0开始计数,每访问一次,被访问行的计数器增1。当需要替换时,对这些特定行的计数值进行比较,将计数值最小的行换出,同时将这些特定行的计数器都清零。这种算法将计数周期限定在对这些特定行两次替换之间的间隔内,因而不能严格反映近期访问情况。
近期最少使用(LRU)算法
LRU算法将近期内长时间未被访问过的行换出。为此,每行也设置一个计数器,但它们是Cache每命中一次,命中行计数器清零,其他各行计数器增1。当需要替换时,比较各特定行的计数值,将计数值最大的行换出。这种算法保护了刚复制到Cache中的新数据行,符合Cache工作原理,因而使Cache有较高的命中率。
对2路级联的Cache来说,LRU算法的硬件实现可以简化。因为一个主存块只能在一个特定组的两行中做存放选择,二选一完全不需要计数器,只需一个二进制位即可。例如,规定一组中的A行复制进新数据可将此位置“1”,B行复制进新数据可将此位置“0”。当需要置换时,只需检查此二进制的位状态即可:为0换出A行,为1换出B行,实现了保护新行的原则。奔腾CPU内的数据Cache是一个2路级联结构,就采用这种简洁的LRU替换算法。
随机替换
随机替换策略实际上是不要什么算法,从特定的行位置中随机地选取一行换出即可。这种策略在硬件上容易实现,且速度也比前两种策略快。缺点是随意换出的数据很可能马上又要使用,从而降低命中率和Cache工作效率。但这个缺陷随Cache容量的增大而减小。研究表明,随机替换策略的功效仅稍逊于前两种策略。
缓冲存储器在电脑上应用的比较多。每一个硬盘上面都含有一个缓冲存储器,这个存储器主要可以将硬盘内常使用的数据快取起来,以加速系统的读取效能。 通常这个缓冲存储器越大越好,因为缓冲存储器的速度要比数据从硬盘中被找出来的速度快! 目前主流产品可达16MB 左右内存大小。