4 Cache的改进
刚开始,典型系统只有一个缓存,近年普遍采用多个Cache。一是增加Cache级数。二是将统一的Cache变成分立的Cache。
(1)单一缓存和两级缓存
单一是CPU和缓存之间只有一个缓存。通常把这个缓存直接与CPU制作在同一个芯片中,又称为片内缓存(片载缓存)。将Cache制作在芯片内,CPU直接访问Cache不必占用系统总线,片内缓存与CPU之间数据通路短,提高了存取速度,外部总线更多支持I/O设备传输,提高了系统的效率。
由于片内缓存在芯片内,容量不大,CPU有时需要用系统总线访问主存,次数多了速度就下降。所以在主存和片内缓存之间再加一级缓存,称为片外缓存,由静态RAM组成,不使用系统总线与CPU链接,使用一个独立的数据路径,减轻系统总线的负担。随着芯片集成度提高,也有一些处理器将二级缓存结合到处理器芯片上。
(2)统一缓存和分立缓存
统一缓存是指指令数据都存放在同一缓存内的Cache,分立缓存是指指令和数据分别存放在两个缓存中,一个称为指令Cache,另一个称为数据Cache。
两种缓存选用,一是与主存结构有关,如果计算机的主存是统一的(指令和数据存储在同一主存内),则缓存Cache采用统一缓存;如果是主存采用指令、数据分开存储方案,则采用分立缓存。
二是与机器对指令执行的控制方式有关。采用超前控制或流水控制方式时,一般采用分立缓存。
超前控制,是指在当前指令执行过程中尚未结束时就将下一条尚未执行的指令取出,称为超前取指或指令预取。所谓流水线控制实质上是多条指令同时执行,又可视为指令流水。这时机器的指令译码电路和功能部件也需多个。这两种方式强调指令预取和指令并行执行,因此,必须将指令Cache和数据Cache分开,否则可能导致执行过程的对统一缓存争用。比如执行部件的取数请求和指令部件的取指请求,只能先进行取数请求,影响指令流水实现,所以要分开。