CPU缓存与主存的数据存取方式是什么?
在Cache与主存系统的读操作原理中,当CPU试图读取主存中的某一个字时,它会发出该字的内存地址。这个地址会同时到达Cache控制器和主存。Cache控制逻辑会立即根据地址中的标记部分来判断该字当前是否存在于Cache中。如果判断为命中,该字会立即被递交给CPU;如果判断为未命中,则必须启动主存读取周期,将该字从主存读出送给CPU,同时把包含这个字的整个数据块从主存读出并送到Cache中。
在Cache与主存系统的读操作原理中,当CPU试图读取主存中的某一个字时,它会发出该字的内存地址。这个地址会同时到达Cache控制器和主存。Cache控制逻辑会立即根据地址中的标记部分来判断该字当前是否存在于Cache中。如果判断为命中,该字会立即被递交给CPU;如果判断为未命中,则必须启动主存读取周期,将该字从主存读出送给CPU,同时把包含这个字的整个数据块从主存读出并送到Cache中。
解释得很清楚,不过可以补充一点:Cache未命中后写入主存的那个“整个数据块”,通常遵循局部性原理,因为既然读到了这个字,附近的字大概率接下来也会用到,所以预取一块数据比单字读取效率更高。
讲得挺清楚,不过这里其实隐含了一个很关键的细节:当发生“未命中”时,CPU并不是傻等着从慢速主存读出这一个字,而是通常会有流水线或者多级的处理机制。如果完全串行等待,那现代CPU早就跑不动了。另外,提到“把包含这个字的整个数据块”调入Cache,这就是典型的“空间局部性”原理,虽然这次只读了一个字,但预判它后面可能还要读块里的其他数据,所以一次性搬运,这个设计哲学才是Cache存在的根本意义。