Как инструкция test_and_set() могла работать на мультипроцессоре?

Уважаемое сообщество, занимающееся переполнением стека!

Я читаю «Концепции операционной системы» (2012 г.) Зильбершаца, Галвина и Ганя, там говорится: «Если две инструкции test_and_set() выполняются одновременно (каждая на разных процессорах), они выполняться последовательно в произвольном порядке». на странице 210 я не могу понять, почему два таких заведения будут выполняться последовательно даже на мультипроцессоре. Что, если каждая инструкция выполняется на другом процессоре? Насколько мне известно, эти два института должны быть казнены одновременно.

Мое понимание атомарности инструкций и многопроцессорности остается на довольно поверхностном уровне, поэтому я могу принять проблему как должное. Может ли кто-нибудь помочь мне здесь?


person Mengfan Ma    schedule 09.12.2017    source источник


Ответы (2)


Весь смысл test-and-set в том, что один процессор выполнит его первым, а затем другой процессор, и они не будут делать это одновременно.

Для этого между обоими процессорами будет установлена ​​некоторая связь. По сути, один процессор загружает строку кэша, включая расположение в памяти, и сообщает другому процессору, что он не может иметь эту строку кэша, пока не будут завершены и проверка, и установка.

person gnasher729    schedule 09.12.2017

Результат зависит от машинной инструкции. Позвольте мне использовать 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

Инструкции по большей части не выполняются за один шаг, и процессоры могут работать независимо друг от друга.

person user3344003    schedule 09.12.2017
comment
Благодарю вас! Действительно отличный ответ и материал! Я прочитал объяснение BBSSI по ссылке. Я немного запутался с тем, что если бит содержится в памяти, чтение состояния бита и установка бита в новое состояние является взаимосвязанной операцией, означает ли это, что бит должен быть проверен и установлен может содержаться в памяти или в регистре процессора? Если он содержится в одном регистре, то нам не нужно блокировать бит, но как программист использует BBSSI, если бит находится в регистре? - person Mengfan Ma; 10.12.2017
comment
VAX имеет ортогональный набор инструкций, что означает, что он допускает любой режим адресации для любого операнда (кроме перемещения адреса памяти с помощью регистров). Таким образом, вы можете использовать инструкцию BBSSI с регистровым операндом. В этом случае выполнение не блокируется и действует как инструкция BBSS. Это действительно не имело бы большого смысла. - person user3344003; 10.12.2017