产生cache coherence 问题的原因

出现不一致的原因有3个:共享可写的数据,进程迁移,I/O传输

1.共享可写数据引起的不一致性(sharing of writable data)

如图所示

共享可写数据引起的不一致性

描述
我们把核(core)简称P,把核的私有缓存简称C;
图一,表示更新前的状态,P1,P2的私有cache C1 和 C2 中都有共享数据x,与shared memory 一致。

图二,执行write through 的写回策略,当P1将C1中的数据x—>x',同时将shared memory中的数据修改为x';此时C2中的数据与shared  memory 和C1 中的数据不一致。

图三,执行 write back 的写策略,只有当C1中 x' 块被替换的时候才写回到下一级存储中,导致C1 与 (C2 和 shared memory)中数据不一致。

2.进程迁移引起的不一致

如下图所示

进程迁移引起的不一致

同(1)解释;
图一,数据x 只存在于 C1 和 shared memory中,C2中没有x;当进程从 P1迁移到P2时,P2可能会修改数据
x-->x';
如图二,执行write through 策略时,P2 会将数据写到 C2 和 shared memory 中,而 C1 中数据尚未更新,造成不一致问题;
如图三,执行 write back 策略时,P1 若 再进程执行时,更改了数据x-->x';当进程从 P1迁移到P2时,P2只能从 shared memory 中读取数据,而此时shared memory的数据并不是最新的,因为有可能C1还尚未写回。

3. I/O操作(绕过cache的I/O操作)

如图
所示

I/O操作(绕过cache的I/O操作

图一所示,依然是原始状态;

图二中,当 执行 write through 策略时, 从 IO中 输入到内存中,内存中的数据得到了更新,然而,
cache中的数据还是旧的数据;当 处理器 访问这些数据时,直接从C1,C2中得到,导致了 数据的不一致。

图三中,当 执行 write back 策略时,当 P1 修改了 x 的值,而尚未写回到下一级存储时,有IO输出的操作,IO直接从内存中读取到数据,这样也是错误的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值