Вопрос

В настоящее время я просматриваю руководство по архитектуре ARM для ядра ARMv7.В главе A3.5.3 об атомарности обращений к памяти говорится:

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

Как человек, не владеющий английским языком, я признаю, что мне немного сложно понять это предложение.

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

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

все еще несет в себе тот же смысл?

Это было полезно?

Решение

Я вижу эту формулировку в ARMv8 ARM, которая действительно пытается устранить любую возможную двусмысленность во многих местах (даже если это делает раздел упорядочения памяти практически нечитаемым).

С точки зрения общего понимания (в отличие от фактического реализующий спецификацию), небольшая двусмысленность не всегда повредит, поэтому, пока это не удается сделать абсолютно понятно, что означает "ячейка памяти", я думаю, что старое руководство по версии v7 (DDI0406C.b) в этом случае лучше читать:

Операция чтения или записи выполняется в одной копии, если выполняются оба следующих условия:

  • После любого количества операций записи в ячейку памяти значением ячейки памяти является значение, записанное одной из операций записи.Невозможно, чтобы часть значения ячейки памяти была получена в результате одной операции записи, а другая часть значения - в результате другой операции записи

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

    • значение ячейки памяти перед операцией записи
    • значение ячейки памяти после операции записи.

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

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

В версии 7 есть случай, когда (если я правильно интерпретирую) два обычно однокопийных атомарных хранилища, которые находятся в одном и том же месте в одно и то же время, но с разными размерами, нарушают любую гарантию атомарности, поэтому теоретически вы могли наблюдать там какое-то неожиданное сочетание байтов - похоже, это было удалено в версии 8.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top