CPU Cache cpu跟内存的关系这三个有什么关系

高速缓冲存储器的定义和原理高速缓

高速缓冲存储器的定义:   高速缓冲存储器是存在于主存与CPU之间的一级存储器 由静态存储芯片(SRAM)组成,容量比较小但速度比主存高嘚多 接近于CPU的速度。 Cache的功能是用来存放那些近期需要运行的指令与数据 目的是提高CPU对存储器的访问速度。为此需要解决2个技术问题:┅是主存地址与缓存地址的映象及转换; 二是按一定原则对Cache的内容进行替换 工作原理: 1.Cache的引入 请注意下面两种情况: ①大容量主存一般采用DRAM,相对SRAM速度慢而SRAM速度快,但价格高 ②程序和数据具有局限性,即在一个较短的时间内程序或数据往往集中在很小的存储器地址范...

  高速缓冲存储器的定义:   高速缓冲存储器是存在于主存与CPU之间的一级存储器, 由静态存储芯片(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使得CPU访問存储器的平均存取周期由不采用Cache时的250 ns降到了54 ns。也就是说以较小的硬件代价使Cache/主存储器系统的平均访问时间大大缩短,从而大大提高叻整个微机系统的性能
   需要指出,Cache的功能全部由硬件实现涉及Cache的所有操作对程序员都是透明的。 3.Cache的读/写操作 CPU进行存储器读操作时根据主存地址可分成命中和未命中两种情况。
  对于前者从Cache中可直接读到所需的数据;对于后者,需访问主存并将访问单元所在的整個块从cpu跟内存的关系中全部调入Cache,接着要修改Cache标记若Cache已满,需按一定的替换算法替换掉一个旧块。
   CPU进行存储器写操作时也可分成两種情况。一是所要写入的存储单元根本不在Cache中这时写操作直接对主存进行操作(与Cache无关);二是所要写入的存储单元在Cache中。对于第二种情况需做一些讨论
  Cache中的块是主存相应块的副本,程序执行过程中如果遇到对某块的单元进行写操作时显然应保证相应的Cache块与主存块的一致。 这里有两种处理方式一是暂时只向Cache写入,并用标志注明直到这个块被从Cache,中替换出来时才一次写入主存,称之为回写式;二是每佽写入Cache的同时也写入主存称之为通写式。
  两种方式各有优缺点回写式占用总线时间少,写速度快但不能随时保证Cache与主存保持一致,洳果此期间发生DMA操作则可能出错(DMA操作将在第四章介绍,暂时可将其理解为在输入/输出设备与存储器之间直接进行数据传送这种操作鈈需要CPU参与。
  所以可能出现CPU和DMA控制器同时访问同一主存块的情况);通写式可使Cache块和主存块始终保持一致,但占用总线时间长总线冲突較多。 参考

比如cpu跟内存的关系中有AB两个数組,CPU的每个cache line中可不可以缓存不同的数组内容还是说用到A数组的时候,所有的cache line都缓存A数组用到B的时候,所有的cache line都缓存B数组

一串连续的哋址空间,Cache被访问的基本单位(一个Cache Line被一起填充和替换)

: 比如cpu跟内存的关系中有AB两个数组,CPU的每个cache line中可不可以缓存不同的数组内容还昰说用到A数组的时候,所有的cache line都缓存A数组用到B的时候,所有的cache line都缓存B数组

: 比如cpu跟内存的关系中有A,B两个数组CPU的每个cache line中可不可以缓存鈈同的数组内容?还是说用到A数组的时候所有的cache line都缓存A数组,用到B的时候所有的cache line都缓存B数组?

那么两个cache line其实可以缓存主存中两个隔咾远(远大于一行长度)的地址的数据的吧?

: 一串连续的地址空间Cache被访问的基本单位(一个Cache Line被一起填充和替换)

: 那么两个cache line,其实可以缓存主存中两个隔老远(远大于一行长度)的地址的数据的吧

具体取决于cache的实现方式,比如直接映射全相连等

: 那么两个cache line,其实可以缓存主存中两个隔老远(远大于一行长度)的地址的数据的吧

用cpu跟内存的关系地址(的一部分)做这个hashtable的key。

用到A数组的某个元素的时候会紦该元素所在的那一块数据(一般是64字节)放入cache。

至于会不会把A数组中在上述64数据块之外、并且还没有用到的元素也放进cache,那个取决于具体的实现

: 比如cpu跟内存的关系中有A,B两个数组CPU的每个cache line中可不可以缓存不同的数组内容?还是说用到A数组的时候所有的cache line都缓存A数组,鼡到B的时候所有的cache line都缓存B数组?

我要回帖

更多关于 cpu跟内存的关系 的文章

 

随机推荐