我想知道,如果在使用ll/sc时,在sc语句执行之前处理器发生了变化,结果会是什么。
例如。
CPU 1 ==> $t1 = 1,$t0 =2
CPU 2 ==> $t1 = 30,$t0 = 40
MEMORY ==> $s0 = 99
如果我们执行这些语句:
ll $t1, 0($s0) # CPU 1
ll $t1, 0($s0) # CPU 2
addi $t1, $t1, 1 # CPU 2
sc $t1, 0($s0) # CPU 2 ($t1 = 1, $s0 = 100)
sc $t0, 0($s0) # CPU 1我知道在执行之后(如果我错了,请纠正我):
CPU 2 ==> $t1 = 1,$t0 = 40
CPU 1 ==> $t1 = 99
我不知道在最后的cpu1命令之后$s0和$t0会发生什么。$s0 =2吗??
发布于 2012-02-12 23:40:46
好的……我自己找到了解决方案……由于CPU与第一次在CPU1上执行ll语句时相比发生了变化,并且CPU2正在修改相同的内存区域,因此第5行(最后一行)中的sc将失败。因此,当sc失败时,$t0 =0&由于最后一行sc失败,内存未被修改,因此$s0 = 100
来源:http://www.weblearn.hs-bremen.de/risse/RST/docs/MIPS/mips-isa.pdf
读取加载链接(LL)和存储条件(SC)提取。
https://stackoverflow.com/questions/9241832
复制相似问题