一、多处理机Cache一致性
如果允许共享数据进入Cache,就可能出现多个处理器的Cache中都有同一存储块的副本的情况,当其中某个处理器对其Cache中的数据进行修改后,就会使得其Cache中的数据与其他Cache中的数据不一致。这就是多处理机Cache的一致性问题。
如果一个存储器满足以下三点,则称该存储器是一致的。
(1)处理器P在对存储单元X进行一次写之后又对X进行读,在这读和写之间没有其他处理器对X进行写,则P读到的值总是刚写进去的值
(2)处理器P对存储单元X进行写之后,另一处理器Q对X进行读,在这读和写之间没有其他对X的写,则Q读到的值应为P写进去的值
(3)对同一存储单元的写是串行化的。即任意两个处理器对同一存储单元的两次写,从各个处理器的角度看顺序都是相同的
二、实现一致性的基本方案
1、目录式协议与监听式协议
目录式协议——物理存储器中数据块的共享状态被保存在一个称为目录的地方
监听式协议——当物理存储器中的数据块被调入Cache时,其共享状态信息与该数据块一起放在该Cache中
在使用多个微处理器且每个Cache都与单一共享存储器相连组成的多处理机中,一般都采用监听协议,因为这种协议可直接利用已有的物理连接(连接用到存储器的总线)
2、写作废协议与写更新协议
写作废协议——在处理器进行写入操作之前,把所有其他Cache中的副本全部作废
写更新协议——当一个处理器对某数据项进行写入时,它把该新数据广播给其他所有Cache
3、写作废和写更新协议在性能上的差别
(1)在对同一数据进行多次写操作而中间无读操作的情况下,写更新协议需进行多次写广播操作,而写作废协议只需一次作废操作
(2)在对同一Cache块的多个字进行写操作的情况下,写更新协议对于每一个写操作都要进行一次广播,而写作废协议仅在对该块的第一次写时进行作废操作即可。写作废是针对Cache块进行操作的,而写更新则是针对字或字节进行的
(3)考虑从一个处理器A进行写操作后到另一个处理器B能读到该写入数据之间的延迟时间。在写更新协议中,这个延迟时间比较小,因为它在进行写操作时,立即更新了所有其他Cache中的副本,包括CacheB中的副本。而在写作废协议中,由于在处理器A进行写操作时已经作废了CacheB中的副本,所以当处理器B进行读操作时需要等待,直到新的副本被调入Cache
三、监听协议的实现
1、实现监听协议的关键有三个方面
(1)处理器之间通过一个可以实现广播的互连机制相连,通常采用的是总线
(2)当一个处理器的Cache响应本地CPU的访问时,如果它涉及全局操作,其Cache控制器就要在获得总线的控制权之后,在总线上发出相应的消息
(3)所有处理器都一直在监听总线,它们检测总线上的地址在它们的Cache中是否有副本
2、写作废协议(写回法)——响应来自CPU的请求
Invalid:无效的,访问的块尚未进入Cache
Shared:共享的。即在多个处理器中都有副本,而且副本相同在存储器中相应的块相同
Exclusive:独占的。表示该块已经被修改过,并且还没写入存储器。这时该块中的内容是最新的,而且是整个系统中唯一的最新副本
3、写作废协议(写回法)——响应来自总线的请求
所有在总线上监听到的状态以及状态的改变都是针对当前在Cache中的块