Уважаемое сообщество, занимающееся переполнением стека!
Я читаю «Концепции операционной системы» (2012 г.) Зильбершаца, Галвина и Ганя, там говорится: «Если две инструкции test_and_set() выполняются одновременно (каждая на разных процессорах), они выполняться последовательно в произвольном порядке». на странице 210 я не могу понять, почему два таких заведения будут выполняться последовательно даже на мультипроцессоре. Что, если каждая инструкция выполняется на другом процессоре? Насколько мне известно, эти два института должны быть казнены одновременно.
Мое понимание атомарности инструкций и многопроцессорности остается на довольно поверхностном уровне, поэтому я могу принять проблему как должное. Может ли кто-нибудь помочь мне здесь?
Как инструкция test_and_set() могла работать на мультипроцессоре?
Ответы (2)
Весь смысл test-and-set в том, что один процессор выполнит его первым, а затем другой процессор, и они не будут делать это одновременно.
Для этого между обоими процессорами будет установлена некоторая связь. По сути, один процессор загружает строку кэша, включая расположение в памяти, и сообщает другому процессору, что он не может иметь эту строку кэша, пока не будут завершены и проверка, и установка.
Результат зависит от машинной инструкции. Позвольте мне использовать VAX в качестве примера, так как это простой для понимания процессор:
http://www.ece.lsu.edu/ee4720/doc/vax.pdf
В VAX есть инструкция BBSS (переход по установленному и установленному биту) и инструкция BBSSI (переход по установленному и установленному биту).
Если у вас есть 2 процессора, выполняющие BBSS на одном и том же чистом бите, вы можете получить:
P1 Tests Bit (Clear)
P2 Tests Bit (Clear)
P1 Sets Bit and does not branch
P2 Sets Bit and dot not branch
Если вы выполняете BBSSI для того же бита, процессор блокирует память. Вы получаете
p1 locks the memory
p1 Tests Bit (Clear)
P2 Tests Bit and is Blocked
P1 Sets Bit and does not branch
p1 unlocks the memory
P2 Tests Bit (SET)
P2 Branches
Инструкции по большей части не выполняются за один шаг, и процессоры могут работать независимо друг от друга.