2012-02-11 195 views
3

我想知道,如果在使用ll/sc時在執行sc語句之前處理器發生了變化,那麼結果就是什麼。MIPS同步(ll/sc)

E.g.

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

我不知道會發生什麼$ s0和$ T0最後CPU 1命令後。 $ s0 = 2?

回答

2

好吧...我自己找到了解決方案...因爲從第一次在CPU1上執行ll語句並且CPU2正在修改同一個內存區域時,CPU發生了變化,因此第5行中的sc最後一行)會失敗。因此,當SC失敗$ T0 = 0 &作爲存儲器不被修改由於最後一行SC失敗所以$ S0 = 100

來源:http://www.weblearn.hs-bremen.de/risse/RST/docs/MIPS/mips-isa.pdf

讀取負載鏈接(LL)和條件存儲(SC)的提取物。