5.2. 硬件层数据一致性
1)存储器的存储结构
存储的层次结构可以分为两大类:一是CPU内部的,有寄存器、一级高速缓存、二级高速缓存;二是位于CPU共享的部分,包含:三级高速缓存、主存、硬盘、远程存储。数据的读取和存储都要经过高速缓存(Cache),CPU(CPU Core)与高速缓存间有一条特殊的快速通道。主存(Main Memory)与高速缓存都连接在系统总线(Bus)上,系统总线同时还用于其他组件的通信。
在高速缓存出现后不久,系统变得更加复杂,高速缓存与主存间的速度差异被拉大,直到加入了另一级缓存,新加入的缓存比第一级缓存更大的同时更慢。由于加大一级缓存的做法从经济上考虑是行不通的,所以有了二级缓存,甚至现在的某些系统已经拥有了三级缓存。
不同的存储结构,CPU对他们的访问速度也是不一样的,越往上的访问速度越快,但是所需要的成本越高,其访问速度如图所示,越接近CPU的缓存越小也越快。
2)存在的问题
如果有多个CPU,每个CPU都对一数据进行读取和写入,那么该数据的值将会发生冲突。
3)解决的方法:
【方法1 总线锁】
上代CPU使用的,原理是直接锁住系统总线,只能有一个CPU访问CPU外的信息,在上锁期间,其他的CPU是无法访问主存上信息的。所以也就导致了问题:效率低下。
【方法2 数据一致性协议】
数据一致性协议有很种,不过一般常说的是MESI缓存一致性协议。CPU每个cache line标记四种状态(额外两位):Modified 被修改状态、 Exlusive独享状态、 Share共享状态、 Invalid无效状态。
存在的问题:有些数据是无法被缓存的;跨越多个缓存行的数据;这些数据必须要使用总线锁实现了。
现代CPU的数据一致性实现是通过缓存锁和总线锁共同实现的。