计算机组成原理
Cache的原理
Cache的工作原理
Cache原意为高速缓存,它是为了解决主存速度跟不上CPU速度的问题而诞生的。在主存内,会存在2^n个可编址的字组成,每个字有唯一的n位地址。而主存与Cache需要进行映射,单纯这样是映射不过去的,因此将主存的内存,切分块,每个块的大小相同,且包含若干个字。具体如下图:
Cache的效率,受两个重要因素影响
- 容量
- 块长
这两个因素在实际描述中,统称为“命中率”,也就是使用“命中率”来衡量Cache的效率,命中率的解释是指:CPU要访问的信息已在Cache内的比率。
Cache的基本结构
Cache存储体
Cache存储体以块为单位与主存交换信息,加速Cache与主存之间的调动,主存大多采用多提结构,且Cache访存的优先级最高。
地址映射变换机构
地址映射变换机构是将CPU送来的主存地址转换为Cache地址。
替换结构以及相关算法
当Cache满了的时候,数据无法继续往cache里面写,怎么办?这时候需要用到替换结构,当数据继续写入的时候,替换结构会通过一定的算法,将一部分的块移入到主存里面。(注:其实在实际编程中,用户是不知道Cache的块是否已经满了,因为将主存块调入Cache的任务完全由机器硬件自动完成的)。
相关的替换结构的算法(替换策略):
- 先进先出(FIFO)
- 近期最少使用(LRU)
- 随机法
Cache的读写操作
Cache的读写操作,如上图所示。读操作其实不太复杂,主要是寻址,写操作比较复杂一点,且写操作还有两种方法可用:
- 写直达法
- 写回法
这两种方法都各有特色,选择合适的就行。
Cache的改进
其实Cache刚出来的时候,只有一级的缓存,但后来,普遍采用多Cache,主要有两个原因:
- 增加Cache的级数
- 将统一的Cache变成分立的Cache
单一缓存和两级缓存
顾名思义,单一缓存就是在CPU与主存之间,只建立一级的缓存,一般来说,这个缓存会直接设计在芯片上,实际的如STM32H7等芯片,带有内部Cache缓存的。但是如果芯片太高级,一级缓存不足以满足要求时,就会在片外再加入一片缓存,这时候讲片内的称为L1(一级缓存),片外的称为L2(二级缓存)。
统一缓存和分立缓存
- 统一缓存:指令和数据都存放在同一缓存内的Cache
- 分立缓存:是指指令和数据分别存放在两个缓存中
因此,一个称为指令Cache,一个称为数据Cache