0%

CPU Cache

前言

本文是《超标量处理器设计》一书第2章学习笔记, 书很不错,感谢作者

  最早的CPU是不需要Cache的。例如8088,那时的CPU频率直有几MHz而已,可能CPU的存取时间还不如内存快,但万万没想到CPU同学是一个潜力股,根据摩尔定律CPU的速度越来越快,而存储器的发展明显跟不上节奏,最终导致CPU和存储器的速率相差太大,如果不想一个办法,存储器这个短板恐怕要拖垮整个木桶。

正文

Why need Cache?

  Cache的设计就是为了弥补CPU与存储器传输速率的差距。Cache的存在离不开这样一个理论:如果一个数据现在被访问了,那么它和他周围的数据在以后可能还会被访问。Cache作为CPU的中转站,在速度上CPU > Cache > Main Memory > Disk,让CPU现在Cache中查找需要的数据和指令,如果找不到了在去Memory或者Disk中找,这样就比每次都去Memory中找要好很多,因此Cache的命中率至关重要。

What is Cache?

  现在处理器中设计了多级Cache,紧挨着处理器的那一级Cache要保证“快” ,剩下的Cache要保证“全”(当然都是指尽可能的做到这样)。
  Cache主要有Tag和Data两部分组成,Data用来保存一片连续地址的数据,Tag来存储这片连续数据的公共地址。一个Tag和它对应的所有Data组成一个Cache line,Cache line中的数据部分成为数据块,如果一个数据可以存储在Cache中的多个地方,这些被同一个地址找到的多个Cache line成为Cache Set(如果不理解Cache Set可以先好好理解组相连)。
  Cache有3种组成方式:

  1. 直接映射:主存一个字块只能映射到Cache的一个字块。
  2. 全相连:数据可以放在任意Cache line。
  3. 组相连:一个数据可以放在n个位置,成为n路组相连。

  现代处理器的TLB多采用全相连结构,普通的I-Cache和D-Cache采用组相连结构,下面简单说一下这种方式。一个内存地址可以划分成Tag、Index、Block Offset三部分,Index用来对Cache进行寻址,可以得到对应的Cache Set,Tag对Cache Set进行寻址,来确定其中那个Cache line是要找的那个,如果没找到,说明数据不在Cache中,就会产生一个缺页异常。
  就写到这吧,Cache详细写要耗费很多功夫,下面提供我当初学习的脑图笔记,如果感兴趣可以阅读《超标量处理器》第二章原文或者其他资料,如果你有好的资料或想法希望你也可以分享给我。

脑图

下载请点此 →

END.