cache是一种内存,叫高速缓存,英文单词的意思就是缓存。
从容量来说:CPU < 寄存器 < cache < DDR
从速度来说: CPU > 寄存器 > cache > DDR
从价格来说: CPU > 寄存器 > cache > DDR
cache的存在,是因为寄存器和DDR之间速度差异太大,DDR的速度远不能满足寄存器的需要(不能满足CPU的需要,所以没有cache会拉低整个系统的整体速度)
当然,cache是越大越好,如果cache足够大,DDR都可以不要了,而且系统还跑得飞快,但是cache贵啊,不可行。
整个系统中cpu的供应链由:寄存器+cache+DDR+硬盘/FLASH四阶组成,这是综合考虑了性能、成本后得到的妥协的结果。
Icache :指令缓存,用来缓存指令。(instruction cache)
Dcache : 数据缓存,用来缓存数据。与MMU有关系。
L2 cache : 二级缓存
cache的意义:指令平时是放在硬盘/flash中的,运行时读取到DDR中,再从DDR中读给寄存器,再由寄存器送给cpu。但是DDR的速度和寄存器(代表的 就是CPU)相差太大,如果CPU运行完一句再去DDR读取下一句,那么CPU的速度完全就被DDR给拖慢了。解决方案就是icache。 icache工作时,会把我们CPU正在运行的指令的旁边几句指令事先给读取到icache中(cpu设计有一个基本原理:代码执行时,下一句执行当前一句代码旁边代码的可能性要大很多)。当下一句CPU要指令时,cache首先检查自己事先准备的缓存指令中有没有这句,如果有就直接拿给CPU,如果没有则需要从DDR中重新去读取拿给CPU,并同时做一系列的动作:清缓存、重新缓存。
icache的一切动作都是自动的,不需要人为干预。我们所需要做的就是打开/关闭icache。
icache关闭会使指令执行速度变慢。