2012-02-11 27 views
3

ll/scを使用しているときに、sc文が実行される前にプロセッサに変更があった場合、何が結果になるか知りたいと思っていました。MIPSの同期化(ll/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

私は$ S0と最後のCPU 1コマンドの後$ T0に何が起こるか分かりません。 $ s0 = 2ですか?

答えて

2

申し訳ありません...自分で解決策を見つけました... CPUが最初にCPU1で実行されたときからCPUに変更があり、CPU2が同じメモリ領域を変更しているので、5行目のsc最後の行)が失敗します。 http://www.weblearn.hs-bremen.de/risse/RST/docs/MIPS/mips-isa.pdf

読むロードリンク(LL)とストア条件付き(SC)抽出物:SCはメモリとして$ T0 = 0 &を失敗したときに$ S0 = 100

ソースそこそこ最後の行によるSCの障害に変更されていません。