27-04-2024
Атомарные операции — операции, выполняющиеся как единое целое либо не выполняющиеся вовсе. Атомарность операций имеет особое значение в многопроцессорных компьютерах (и многозадачных операционных системах), так как доступ к неразделяемым ресурсам должен быть обязательно атомарным.
Атомарная операция открыта влиянию только одного потока.
Атомарность бывает аппаратной (когда непрерывность обеспечивается аппаратурой) и программной, когда используются специальные средства межпрограммного взаимодействия: мьютекс, семафор). По своей сути программные средства обеспечения атомарности представляют собой два этапа: блокировка ресурса и выполнение самой операции. Блокировка представляет собой атомарную операцию, которая либо успешна, либо возвращает сообщение о занятости.
Содержание |
Зачастую атомарная операция представляет собой ассемблерную инструкцию, однако не обязательно. Также, что более существенно, не каждая ассемблерная инструкция атомарна.
Операции выполнение которых всегда можно считать атомарными:
Операции, которые не являются атомарными:
Кроме того, многие команды вида Чтение-Модификация-Запись могут быть сделаны искусственно атомарными с помощью префикса LOCK (опкод 0xF0):
Префикс LOCK вызывает блокировку доступа к памяти на время выполнения инструкции. Блокировка может распространяться на область памяти шире чем длина операнда, например на длину кэш-линии.
Особенностью RISC архитектур является отказ от использования инструкций вида Чтение-Модификация-Запись. В RISC процессорах с архитектурой DEC Alpha, PowerPC, MIPS и ARM (ARMv6 и старше) поддерживается механизм неблокирующего эксклюзивного доступа к памяти. Метод основывается на паре инструкций эксклюзивного чтения-записи LL/SC:
Первая инструкция загружает переменную из памяти в регистр и помечает адрес памяти для эксклюзивного доступа. Далее производятся необходимые изменения в регистре. Запись из регистра в память производится только если значение в памяти не менялось с момента последней инструкции загрузки (LL). Если операция не выполнена, следует повторить всю последовательность операций от момента чтения переменной из памяти до попытки сохранения в память.
Компиляторы языков высокого уровня никогда при генерации кода не используют атомарные инструкции, поскольку, во-первых, атомарные операции во много раз дороже обычных, во-вторых, у компилятора нет информации, когда доступ должен осуществляться атомарными инструкциями (так как даже модификатор volatile переменной не означает реальной необходимости применения атомарных операций). По этой причине, когда это является жизненно необходимым, программист использует один из следующих подходов:
Это заготовка статьи о компьютерах. Вы можете помочь проекту, исправив и дополнив её. Это примечание по возможности следует заменить более точным. |
Атомарные операции к мониторам, атомарные операции процессора.
Категория:Музыкальные произведения 1810 года, Сутиски (Глуховский район), Чернявский, Дмитрий Александрович.