ARM в единственном экземпляре атомарность

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

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

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

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

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

все еще переносит тот же смысл?

1 ответ

Решение

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам