Атомарные операции

Атомарные операции

Атомарные операции

Атомарные операции — операции, выполняющиеся как единое целое либо не выполняющиеся вовсе. Атомарность операций имеет особое значение в многопроцессорных компьютерах (и многозадачных операционных системах), так как доступ к неразделяемым ресурсам должен быть обязательно атомарным.

Атомарная операция открыта влиянию только одного потока.

Атомарность бывает аппаратной (когда непрерывность обеспечивается аппаратурой) и программной, когда используются специальные средства межпрограммного взаимодействия мьютекс, семафор). По своей сути программные средства обеспечения атомарности представляют собой два этапа: блокировка ресурса и выполнение самой операции. Блокировка представляет собой атомарную операцию, которая либо успешна, либо возвращает сообщение о занятости.

Содержание

Описание

Зачастую атомарная операция представляет собой ассемблерную инструкцию, однако не обязательно. Также, что более существенно, не каждая ассемблерная инструкция атомарна.

Ассемблерные инструкции и атомарность

Операции выполнение которых всегда можно считать атомарными:

  • Все инструкции вида Операция Регистр,Регистр можно считать атомарными так как регистры за пределами вычислительного процессорного ядра не видны
  • Загрузка данных из памяти по выравненному адресу в регистр общего назначения
  • Сохранение данных из регистра общего назначения в память по выравненному адресу
  • Специальные операции для атомарной работы (их обычно и называют атомарными операциями, предмет данной статьи)

Операции, которые не являются атомарными:

  • Чтение/запись данные по невыровненному адресу. Выполняя подобную инструкцию инструкцию процессор вынужден выполнить обращение к двум ячейкам памяти. В момент когда процессор производит обращение к одной ячейке другая может быть модифицирована другим процессором.
  • Все Операции Чтение-Модификация-Запись (англ.). Несмотря на то что ассемблерная операция одна, ее выполнение сводится к чтению из памяти, изменению значения в АЛУ и записи в память. После чтения значение в памяти может измениться.
  • Строковые команды x86
  • Команды pusha/popa x86
  • Операции с специальными управляющими регистрами. Могут занимать многие процессорные такты и иногда порождает десятки а иногда и сотни обращений к памяти. Такие операции встречаются только в системном программном обеспечении.

Атомарные инструкции x86

  • CMPXCHG/CMPXCHG8B/CMPXCHG16B — основная атомарная команда x86 сравнение и обмен. Выполняет атомарно сравнение переменной с указанным значением и пересылку в зависимости от данного сравнения. Является основой реализации всех безблокировочных алгоритмов. Часто используется в реализации спинлоков и RWLockов, а также практически всех высокоуровневых синхронизирующих элементов таких как Семафоры, Мутексы, События и пр в качестве внутренней реализации
  • XCHG — Операция обмена между памятью и регистром выполняется атомарно на x86-процессорах. Часто используется в реализации спинлоков

Кроме того, многие команды вида Чтение-Модификация-Запись могут быть сделаны искусственно атомарными с помощью префикса LOCK (опкод 0xF0):

  • Команды сложения и вычитания ADD/ADC/SUB/SBB где операнд-приемник память
  • Команды инкремента/декремента INC/DEC
  • Логические команды AND/OR/XOR
  • Однооперандные команды NEG/NOT
  • Битовые операции BTS/BTR/BTC
  • Операция сложение и обмен XADD


Атомарные инструкции и компилятор

Компиляторы языка высокого уровня никогда в генерации кода не использует атомарные инструкции, поскольку, во-первых, атомарные операции во много раз дороже обычный, во-вторых у компилятора нет информации когда доступ должен осуществляется атомарными инструкциями (так как даже модификатор volatile переменной не означает реальной необходимости применения атомарных операций). По этой причине когда это является жизненно необходимым, программист использует один из следующих подходов:

  1. Ассемблерная вставка соответствующей атомарной инструкции
  2. Использование __builtin_ — расширения компилятора
  3. Воспользоваться «высокоуровневой» оберткой какой-либо библиотеки


См. также



Wikimedia Foundation. 2010.

Игры ⚽ Поможем сделать НИР

Полезное


Смотреть что такое "Атомарные операции" в других словарях:

  • Атомарная операция — Атомарные операции  операции, выполняющиеся как единое целое либо не выполняющиеся вовсе. Атомарность операций имеет особое значение в многопроцессорных компьютерах (и многозадачных операционных системах), так как доступ к неразделяемым… …   Википедия

  • IEEE 1394 — Interface Тип Последовательная связь История Разработчик Apple Computer (сейчас Apple, Inc.) Разработано 1995 Производитель Разнооб …   Википедия

  • Программная транзакционная память — Для улучшения этой статьи желательно?: Проверить качество перевода с иностранного языка. В компьютерных технологиях, программная транзакционная память ( …   Википедия

  • Управление доступом на основе ролей — (англ. Role Based Access Control, RBAC) развитие политики избирательного управления доступом, при этом права доступа субъектов системы на объекты группируются с учетом специфики их применения, образуя роли.[1][2] Формирование ролей призвано… …   Википедия

  • Контроль доступа на основе ролей — Содержание 1 Введение 2 История 3 Базовая модель RBAC 4 Возможности и применение …   Википедия

  • Ролевое разграничение доступа — Содержание 1 Введение 2 История 3 Базовая модель RBAC 4 Возможности и применение …   Википедия

  • Ролевое управление доступом — Содержание 1 Введение 2 История 3 Базовая модель RBAC 4 Возможности и применение …   Википедия

  • Транзакционная NTFS — (TxF) технология в Windows Vista и последующих операционных системах, позволяющая производить файловые операции на разделе с файловой системой NTFS при помощи транзакций, обеспечивая поддержку семантики атомарности, согласованности,… …   Википедия

  • Неблокирующая синхронизация — Неблокирующая синхронизация  подход в параллельном программировании на симметрично многопроцессорных системах, проповедующий отказ от традиционных примитив блокировки, таких, как семафоры, мьютексы и события. Разделение доступа между… …   Википедия

  • Транзакция — Не следует путать с трансакция. Транзакция (англ. transaction)  в информатике, группа последовательных операций, которая представляет собой логическую единицу работы с данными. Транзакция может быть выполнена либо целиком и успешно,… …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»