概述
问题的提出
由上一篇计算机组成原理之主存储器中的存储器分层结构图可知,CPU(寄存器)和主存(DRAM)之间存在速度的差异,由于主存的速度很慢,在CPU访存时,就会出现CPU的“空等”现象,造成CPU资源的极大浪费。
为了解决这个问题,我们在CPU和主存之间加入了一级高速缓冲存储器Cache(SRAM),称为缓存。Cache的速度要高于主存,但容量比较小(价位比较高的原因)
要避免CPU的“空等”现象,这意味着CPU运行所需要的的大部分数据和指令都要在缓存中取到,不然还要频繁的访问主存,Cache就白加了,但是缓存的容量远小于主存,如何保证CPU使用的数据和指令都在缓存中得到?这就运用了计算机中一个很重要的原理:程序访问的局部性原理。
程序访问的局部性原理:
- 时间上的局部性:当前正在使用的指令和数据,在不久的将来还会被使用到
- 空间上的局部性:当前正在使用一个指令或数据,那么在不久的将来,相邻的指令或数据就会被使用到
根据程序的局部性原理,在缓存中存储的应该是当前使用的指令和数据以及它们相邻的指令和数据。因此缓存和主存之间数据交换的单位就是块,块中存放有当前使用的指令和数据以及相邻的指令和数据,块的大小(即一次性取出多少相邻的指令和数据)可以由实验获得。
Cache的工作原理
主存和缓存的编址
主存和Cache被分为大小一样的块,主存有M块,Cache有C块,M>>C,此时,主存内的地址可被分为两个部分,高位为块号,低位为块内偏移地址,体现了块的大小,如果块内地址有5位,则块的大小为2^5=32个字节;同样&#x