Существуют ли реализации аппаратной блокировки без тестирования и установки или подкачки?

19

Блокировки, как правило, реализуются с помощью инструкций на уровне проверки и установки и обмена на уровне машины. Есть ли другие реализации, которые не используют их?

Кроме того, можем ли мы сказать, что все аппаратные решения критической секции можно разделить на три, а именно: отключение прерываний, тестирование и установка и своп?

Тамад Ланг
источник

Ответы:

13

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

Самая ранняя из известных мне версий, называемая «решением Деккера», была представлена ​​в Dijkstra, Edsger W .; «Сотрудничество последовательных процессов», в F. Genuys, ed. Языки программирования: Институт перспективных исследований НАТО , стр. 43-112, Academic Press, 1968 . С тех пор было множество решений. Я буду обсуждать только некоторые из наиболее заметных.

Лампорт, Лесли; «Новое решение проблемы параллельного программирования Дейкстры», Comm ACM 17 (8): 453-455, 1974, вводит «Алгоритм пекарни» (потому что он основан на аналогии людей, принимающих числа, чтобы определить порядок, в котором они будут подается в булочной). Одна из особенно заметных особенностей этого алгоритма заключается в том, что он демонстрирует, что для решения проблемы взаимного исключения вообще не требуется аппаратная атомарность. Читает, что перекрывающиеся записи в одно и то же местоположение могут вернуть любое значение, и алгоритм все еще работает. Лэмпорт обсуждает это немного в описании статьи на своей домашней странице .

Решение Петерсона, Peterson, GL; «Мифы о проблеме взаимного исключения», инф. Proc. Lett. , 12 (3): 115-116, 1981 , это тот, который специально разработан, чтобы быть легким для понимания и рассуждений. Наконец, мой любимый Лампорт, Лесли; «Быстрый алгоритм взаимного исключения», ACM Trans. Комп. Sys. 5 (1): 1-11, 1987, В этой статье Лэмпорт пытался оптимизировать решение проблемы взаимного исключения в (общем) случае, когда для критической секции мало споров. Это гарантирует взаимное исключение и тупиковую свободу, но не справедливость. Это (я считаю) первый алгоритм взаимного исключения, использующий только обычные операции чтения и записи, которые могут синхронизировать N процессоров за O (1) время, когда нет конфликтов. (Когда возникает конфликт, он возвращается к тесту O (N).) Он дает неофициальную демонстрацию того, что лучшее, что вы можете сделать в случае отсутствия конкуренции, - это семь обращений к памяти. (Деккер и Петерсон оба делают это с 4, но они могут обрабатывать только 2 процессора, когда вы расширяете их алгоритмы до N, они должны добавить дополнительные O (N) доступы.)

Очевидно, что люди, которые работают над проблемой решения взаимного исключения с использованием только памяти, читают и пишут, разочарованы (нехваткой) понимания другими людьми проблемы и ее решений. Это частично подтверждается названием статьи Петерсона («Мифы о проблеме взаимного исключения») и частично краткой заметкой, опубликованной Лампортом в 1991 году: Лампорт, Лесли; «Проблема взаимного исключения была решена», Comm ACM 34 (1): 110, 1991 , которую Лампорт несколько горько описывает на своей домашней странице .

Итак, чтобы ответить на ваш второй вопрос: Нет. Существует более трех категорий аппаратных решений для решения проблемы критической секции (использование только загрузок и хранилищ - это одна, другие включают инструкции сравнения и замены, связанные с нагрузкой / условно сохраненные). инструкции (использующие протокол когерентности кэша для проверки на атомарность) и инструкции извлечения и добавления.) В другом смысле на самом деле существует только одна категория решений: те, которые предполагают получение группы асинхронных процессов для согласования глобального порядка событий. ,

(Обратите внимание, что этот ответ является (обширным) редактированием более раннего ответа, который я дал на совершенно другой вопрос .)

Блуждающая логика
источник
Конечно, ll / sc можно расширить до более общей транзакционной памяти, которая охватывает весь критический раздел, а не только получение блокировки. Различие между тем, что гарантирует оборудование, также кажется значительным; продвижение вперед иногда гарантируется (т. е. один агент выиграет гонку, чтобы получить блокировку в данный момент времени), но даже слабые концепции, связанные с честностью, как правило, относятся к программному обеспечению (что вполне понятно).
Пол А. Клейтон,