缓存(cache)浅析

一、什么是缓存?

        缓存是介于中央处理器和主存储器之间的高速小容量存储器,不属于主存的一部分。 (速度快、容量小、由硬件实现)

        缓存用来存储一些常用或即将用到的数据或指令,当CPU需要这些数据或指令的时候直接从缓存中读取,这样比CPU到内存甚至硬盘中读取要快得多,能够大幅度提升CPU的处理速度(节省时间/提高效率)。

二、为什么要有缓存?

        由于CPU的存取速度很快,而内存的速度很慢,为了不让CPU每次都在运行相对缓慢的内存中操作,缓存就作为一个中间者出现了。有些常用的数据或是地址,就直接存在缓存中,这样,下一次调用的时候就不需要再去内存中去找了,CPU首先会在Cache中读,如果Cache命中,也叫Cache hit,CPU就可以极快的得到该地址处的值。如果cache miss 也就是没有命中,它就会通过总线在内存中去读,并把连续的一块单元加载到Cache中,下次好使用。

        缓存的大小也是很小的,不能存放大量的数据,并且缓存中存放的数据会因为CPU的访问而被替代,比如某个数据开始被cpu频繁访问,但后来不再频繁,那这个数据的空间会被其他访问频繁的数据所占据。缓存又可以分为一级和二级缓存,一级的速度大于二级的速度。

        因此CPU在访问数据时,先到缓存中看有没有,没有的话再到内存中读取。

形象比喻:做手术时,医生(CPU)从护士手里取手术刀等器件,护士(Cache)可以在手上放几把常用的,这样医生需要的时候如果护士手上就有,速度就快很多。如果护士手上没有医生所需要的器件,那就需要医生自己去工具箱(内存)里找所需的器件,这样的话就浪费了时间。

三、二级缓存

        内存分为RAM(随机存取存储器)和ROM(只读存储器),一个是随即读取内存,一个是只读内存(BIOS是写进ROM的),RAM中的数据可读可写,但断电就消失,而ROM的数据只允许一次写入永久只能读,断电了还是存在的。

        最初的缓存生产成本很高,价格昂贵,所以为了存储更多的数据,又不希望成本过高,就出现了二级缓存的概念,他们采用的并不是一级缓存的SRAM(静态RAM),而是采用了性能比SRAM稍差一些,但是比内存更快的DRAM(动态RAM)

RAM分为两类:

  • SRAM(静态随机存储器):它是一种具有静止存取功能的内存,其内部机构比DRAM复杂,可以做到不刷新电路即能保存它内部存储的数据。静态:不需要刷新
  • DRAM(动态随机存储器):是最为常见的系统内存。我们使用的电脑和手机的运行内存都是DRAM。DRAM使用电容存储,DRAM 只能将数据保持很短的时间。为了保持数据,所以必须隔一段时间刷新一次。动态:定时刷新数据


四、Cache/主存系统的读操作原理 

       CPU与cache之间的数据交换是以”字”为单位,而cache与主存之间的数据交换是以”块”为单位,一个块由若干字组成,是定长的。

        CPU进行存储器读操作时,根据主存地址可分成命中和未命中两种情况。对于前者,从Cache中可直接读到所需的数据;对于后者,需访问主存,并将访问单元所在的整个块从内存中全部调入Cache,接着要修改Cache标记。若Cache已满,需按一定的替换算法(随机淘汰还有或者LRU淘汰),替换掉一个旧块(Cache Line 单元)。

        当CPU试图读取主存一个字时,发出此字内存地址同时到达cache和主存,此时cache控制逻辑依据地址的标记部分进行判断此字当前是否在cache中。若是(命中),此字立即递交给CPU,若否(未命中),则要用主存读取周期把这个字从主存读出送到CPU,与此同时把含有这个字的整个数据块从主存读出送到cache中。由于程序的存储器访问具有局部性,当为满足一次访问需求而取来一个数据块时,下面的多次访问很可能是读取此块中的其它字。

       Cache读操作原理

说明:

  • 当CPU向内存读取或写入数据时,这个数据也被存储进高速缓冲存储器(缓存)。 
  • 当CPU再次需要这些数据时,就从高速缓冲存储器(缓存)读取数据,而不是访问较慢的内存。 
  • 如果需要的数据在cache(缓存)中没有,再去内存中查找。 

        计算机中所有程序的运行都是在内存中进行的,只要计算机在运行中,CPU就会把运算的数据调到内存中进行运算,当运算结束后,CPU再把结果传送出去,内存的运行也决定了计算机的稳定运行。

 

补充:

  • 硬盘中的数据会先写入内存才能被CPU使用。
  • 内存+缓存 -> 内存储空间 
  • 硬盘 -> 外存储空间
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章