Синхронизация MIPS (ll/sc)
Я хотел знать, что если при использовании ll / sc произойдет смена процессора до выполнения оператора sc, что будет результатом.
Например
ЦП 1 ==> $ t1 = 1, $ t0 = 2
ЦП 2 ==> $ t1 = 30, $t0 = 40
ПАМЯТЬ ==> $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
Я знаю, что после казни (поправьте меня, если я ошибаюсь):
ЦП 2 ==> $t1 = 1, $t0 = 40
ЦП 1 ==> $t1 = 99
Я не знаю, что будет с $ s0 и $ t0 после последней команды CPU 1. Будет ли $s0 = 2??
1 ответ
Хорошо... Я нашел решение сам... Поскольку в CPU произошли изменения с того момента, когда оператор ll впервые был выполнен на CPU1, и этот CPU2 изменяет ту же область памяти, так что sc в строке 5 (последняя строка) будет потерпеть поражение. Таким образом, когда sc терпит неудачу, $t0 = 0 &, поскольку память не изменяется из-за сбоя sc в последней строке, поэтому $s0 = 100
Источник: http://www.weblearn.hs-bremen.de/risse/RST/docs/MIPS/mips-isa.pdf
Прочитать выдержки Load Linked (LL) и Store Conditional (SC).