分类：电脑/网络-硬件
问题：高速缓冲存储器的定义和原理 
高速缓冲存储器的定义和原理
回答：高速缓冲存储器的定义：　　高速缓冲存储器是存在于主存与之间的一级存储器， 由静态存储芯片(SRAM)组成，容量比较小但速度比主存高得多， 接近于CPU的速度。 Cache的功能是用来存放那些近期需要运行的指令与数据。目的是提高CPU对存储器的访问速度。为此需要解决2个技术问题：一是主存地址与缓存地址的映象及转换； 二是按一定原则对Cache的内容进行替换。 工作原理:1．Cache的引入     请注意下面两种情况：     ①大容量主存一般采用DRAM，相对SRAM速度慢，而SRAM速度快，但价格高。     ②程序和数据具有局限性，即在一个较短的时间内，程序或数据往往集中在很小的存储器地址范围内。         因此，在主存和CPU之间可设置一个速度很快而容量相对较小的存储器，如图3．35所示。在其中存放CPU当前正在使用以及一个较短的时间内将要使用的程序和数据，这样，可大大加快CPU访问存储器的速度，提高机器的运行效率。       2．Cache的基本原理   Cache与主存都分成块(常常将Cache块说成Cache行)，每块由多个字节组成，大小相等。在一个时间段内，Cache的某块中放着主存某块的全部信息，即Cache的某一块是主存某块的副本(或叫映像)，如图3．36所示。     Cache除数据部分外，还应记录放在某块中的信息是主存中哪一块的副本。因此，还应有第二个组成部分，即标记(tag)——记录主存块的块地址信息。     采用Cache后，进行访问存储器操作时，不是先访问主存，而是先访问Cache。所以存在访问Cache时对主存地址的理解问题(指物理地址)。由于Cache数据块和主存块大小相同，因此主存地址的低地址部分(块内地址)可作为Cache数据块的块内地址。     对主存地址的高地址部分(主存块号)的理解与主存块和Cache块之间的映像关系 (mapping)有关。这里考虑一种最简单的情况——直接映像，例如(见图3．37)，将主存空间分成4 096块，块编号应是地址码的高12位，写成十六进制为000H～FFFH。按同样大小，将Cache分成16块，块编号为OH～FH。映像关系约定见表3．7。这就是说块编号十六进制的第三位相同的主存块(共256块)只能和该位数码所指定的Cache块建立映像关系。根据这种约定，某一主存块和Cache建立起映像关系时，该Cache块的标记部分只需记住主存块的高2位十六进制数。例如，第010H号主存块当前和Cache第0块建立起映像关系，则Cache第0块的标记部分只需记住01H。由此可见，当用主存地址访问Cache时，主存的块号可分解成Cache标记和Cache块号两部分。因此，主存地址被理解成图3．38所示的形式。     下面结合该映像关系的例子和图3．39来说明Cache的工作原理。设当前010号主存块在Cache中，即它和Cache的第0块建立起映像关系。现要对两个主存地址单元进行读操作，第一个地址的高3位(十六进制)为0lOH，第二个地址的高3位(十六进制)为020H。     CPU进行读操作时，首先用主存地址的中间部分——Cache块号找到Cache中的一块(对此例，为第0块)，读出此块的标记(对此例，现在为01H)，然后拿它与主存地址的高位部分——标记进行比较。对于第一个主存地址，比较的结果是相等的。这表明主存地址规定的块在Cache中(有副本)，这种情况称为命中。此时用主存地址的低位部分——块内地址从Cache块号所选择的块中读取所需的数据。对于第二个主存地址，比较的结果不相等。 这表明主存地址所规定的块不在Cache中，称为未命中，这时需要访问主存，并且将含有该地址单元的主存块的信息全部装入Cache的第0块，并修改第0块Cache标记，使其值为02H。     通过上面的例子，可以这样来描述(2ache最基本的工作原理：在存储系统中设置了Cache的情况下，CPU进行存储器访问时，首先访问Cache标记，判是否命中，如果命中，就访问Cache(数据部分)，否则访问主存。     将访问的数据在Cache中的次数(即命中的次数)与总的访问次数之比称为命中率。影响命中率的因素主要有三个：Cache的容量、Cache块的划分以及Cache块与主存块之间的映像关系。一般来说，Cache的容量大一些，会提高命中率，但达到一定程度时，命中率的提高并不明显。目前，一般为256 KB或512 KB，命中率可达98％左右。     下面还是通过例子来说明引入Cache块的好处。已知Cache的存取周期为50 ns，主存的存取周期为250 ns。设命中率为98％，即100次访问存储器的操作有98次在Cache中，只有2次需要访问主存，则这100次访问存储器操作的平均存取周期为(50 ns×98+250 ns×2)÷100=54 ns。由此可见，由于引入了Cache，使得CPU访问存储器的平均存取周期由不采用Cache时的250 ns降到了54 ns。也就是说，以较小的硬件代价使Cache／主存储器系统的平均访问时间大大缩短，从而大大提高了整个微机系统的性能。    需要指出，Cache的功能全部由硬件实现，涉及Cache的所有操作对程序员都是透明的。 3．Cache的读／写操作     CPU进行存储器读操作时，根据主存地址可分成命中和未命中两种情况。对于前者，从Cache中可直接读到所需的数据；对于后者，需访问主存，并将访问单元所在的整个块从内存中全部调入Cache，接着要修改Cache标记。若Cache已满，需按一定的替换算法，替换掉一个旧块。      CPU进行存储器写操作时，也可分成两种情况。一是所要写入的存储单元根本不在Cache中，这时写操作直接对主存进行操作(与Cache无关)；二是所要写入的存储单元在Cache中。对于第二种情况需做一些讨论。Cache中的块是主存相应块的副本，程序执行过程中如果遇到对某块的单元进行写操作时，显然应保证相应的Cache块与主存块的一致。 这里有两种处理方式。一是暂时只向Cache写入，并用标志注明，直到这个块被从Cache，中替换出来时，才一次写入主存，称之为回写式；二是每次写入Cache的同时也写入主存，称之为通写式。两种方式各有优缺点。回写式占用总线时间少，写速度快，但不能随时保证Cache与主存保持一致，如果此期间发生DMA操作，则可能出错(DMA操作将在第四章介绍，暂时可将其理解为在输入／输出设备与存储器之间直接进行数据传送，这种操作不需要CPU参与。所以，可能出现CPU和DMA控制器同时访问同一主存块的情况)；通写式可使Cache块和主存块始终保持一致，但占用总线时间长，总线冲突较多。参考