Синхронизация 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).

Другие вопросы по тегам