В этой статье описываются некоторые атрибуты нормальной памяти AArch64. Описание системной памяти и обычной памяти см. в этой статье. Атрибуты памяти устройства смотрите в этой статье

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

Обычная память обычно делится на страницы и доступна через аппаратную схему процессора, реализованную для обхода таблиц страниц. Этот доступ контролируется и регулируется атрибутами, связанными с записями таблицы страниц.

Дескрипторы таблиц

Формат различных записей таблицы страниц описан в этой статье. Для быстрого ознакомления он воспроизводится здесь.

Записи дескриптора таблицы в таблице страниц имеют биты[1:0] == 0b11, а уровень не может быть равен 3.

Формат дескриптора таблицы

Атрибуты дескриптора таблицы

Обратите внимание, что дескрипторы таблиц Stage2 не содержат полей атрибутов. В следующей таблице описаны атрибуты, связанные с записью таблицы Stage 1.

NSTable

Этот бит указывает, находится ли идентификатор таблицы в дескрипторе в защищенном пространстве PA (NSTable == 0) или в незащищенной (NSTable == 1) памяти для доступа из защищенного состояния.

Если NSTable == 1, любое значение бита NS в дескрипторе страницы или блока при любом последующем поиске игнорируется, а блок или страница, на которые делается ссылка, находятся в незащищенной памяти. Кроме того, значение NSTable в любой следующей таблице игнорируется, и записи в таких таблицах относятся к незащищенной памяти. Кроме того, запись, полученная в безопасном состоянии, обрабатывается как nG == 1 (неглобальная).

Примечание. Эффект бита NSTable применяется ко всем последующим поискам в обходе таблицы перевода.

APTтаблица

Биты APTable устанавливают права доступа на одном уровне трансляции к упомянутым записям на последующих уровнях поиска на той же стадии трансляции.

Для режимов трансляции с одним уровнем исключений (безопасный EL3 и небезопасный EL2) бит 0 APTable равен RES0, что делает действительным только бит 1. Если установлено (APTable[1:0] = 0b1x), доступ на запись не разрешается ни на одном уровне исключений, независимо от разрешений при поиске на последующем уровне.

В TR с многоэтапными переводами APTable контролирует только элементы управления переводом Stage1. В дескрипторах этапа 2 для битов APTable установлено значение RES0 (аппаратное обеспечение игнорирует это значение).

Полное описание битов APTable для нескольких режимов трансляции уровней исключений:

UXNTable/XNTable

Расшифровывается как непривилегированный eXecute Never / eXecute Never.

Если на этапе 1 поддерживаются несколько диапазонов VA, это поле называется UXNTable и определяет, могут ли инструкции, извлеченные из области, на которую ссылаются последующие уровни поиска, выполняться на уровне EL0.

Если на этапе 1 поддерживается только один VA, это поле является XNTable и осуществляет контроль над поведением eXecute Never для того же этапа трансляции:

  • Если бит UXNTable и установлен в 1, то бит UXN рассматривается как установленный на всех последующих уровнях поиска, независимо от фактического значения, установленного в дескрипторах.
  • Если бит XNTable и установлен в 1, то бит XN рассматривается как установленный на всех последующих уровнях поиска, независимо от фактического значения, установленного в дескрипторах.
  • Если установлено значение 0, этот бит не действует.

PXNTтаблица

Расшифровывается как Privileged eXecute Never.

Этот бит действителен только для трансляции stage1, которая может поддерживать два диапазона VA, и обработанного RES0 для трансляций stage1, которые поддерживают только один диапазон VA.

Когда бит PXNTable установлен в 1, бит PXN обрабатывается как установленный в 1 для всех последующих уровней поиска, независимо от фактического значения, установленного в дескрипторах, и инструкции, извлеченные из соответствующего региона, не могут быть выполнены в исключении EL1 и выше. уровни.

Дескрипторы блоков/страниц

Формат различных записей таблицы страниц описан в этой статье. Для быстрого ознакомления он воспроизводится здесь.

Записи дескриптора блока в таблице страниц имеют биты [1:0] == 0b01.

Записи дескриптора страницы в таблице страниц имеют биты[1:0] == 0b11, а уровень должен быть равен 3.

Формат дескриптора страницы

Формат дескриптора блока

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

Атрибуты дескриптора страницы/блока

UXN

  • Бит 54 определяется как UXN только для записей таблиц stage1 любого режима трансляции, для которого Stage1 поддерживает два диапазона VA.
  • В этом поле применяется только выполнение кода EL0.
  • Если 0, выполнение кода разрешено для EL0.

XN

  • Бит 54 определяется как XN для режима трансляции, для которого Stage1 может поддерживать только один диапазон VA.
  • Это поле применяется к любому уровню исключений, к которому применяется перевод.
  • Если 0, выполнение кода разрешено, иначе выполнение не разрешено.

PXN

  • Бит 53 определяется как PXN только для записей таблиц Stage1 любого режима трансляции, для которого Stage1 поддерживает два диапазона VA. Для TR, поддерживающих один диапазон VA, этот бит равен RES0 и аппаратно игнорируется.
  • В этом поле применяются только уровни исключений выше, чем выполнение кода EL0.
  • Если 0, выполнение кода разрешено.

Смежный

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

ДБМ

Этот бит указывает, что содержимое страницы или раздела памяти изменено (состояние Dirty). Этот бит может опционально управляться аппаратным обеспечением, если разрешено аппаратное управление флагом доступа. Поле HD регистра TCR_ELx (TCR_ELx.HD) может быть установлено для включения аппаратного управления этим битом.

Это дополнительная функция, поддерживаемая аппаратной реализацией. Если эта функция не поддерживается, TCR_Elx.HD имеет значение RES0 (аппаратное обеспечение игнорирует это значение).

nG

Бит 11 определяется как nG только для записей таблиц Stage1 любого режима трансляции, для которого Stage1 поддерживает два диапазона VA. Для TR, поддерживающих один диапазон VA, этот бит равен RES0 и аппаратно игнорируется.

AF

  • Этот бит управляется программным обеспечением в ARMv8.0 и может опционально управляться аппаратно, если реализовано расширение ARMv8.1-TTHM.
  • Указывает, когда доступ к странице или блоку осуществляется впервые после того, как AF был установлен на 0.
  • Каждый раз, когда запись дескриптора с AF == 0 пытается быть прочитана в TLB, генерируется ошибка доступа. Программное обеспечение должно установить AF=1 для этого дескриптора.

SH[1:0]

  • Применимо только к обычной кэшируемой памяти (решено AttrInx[2:0]).
  • Stage1 и Stage2 имеют следующие значения (0b01 зарезервирован):
  • 0b00 — Не для совместного использования.
  • 0b10 — Внешний общий доступ.
  • 0b11 — Внутренний разделяемый.

AP[2:1] — Права доступа к данным

  • Для переводов stage1 (TRs, охватывающих более одного EL):
  • 0b00: Нет доступа с EL0, доступ для чтения/записи со всех более высоких уровней.
  • 0b01: Чтение/запись с EL0, доступ для чтения/записи со всех более высоких уровней.
  • 0b10: нет доступа с EL0, доступ только для чтения со всех более высоких уровней.
  • 0b11: Доступ только для чтения с EL0, Доступ только для чтения со всех более высоких уровней.
  • Для переводов Stage1 (TR с одиночными Els) AP[1] — это RES1:
  • 0b0: чтение/запись.
  • 0b1: Только чтение.
  • Для переводов stage2 поле S2AP влияет на права доступа и будет сочетаться с AP[2:1].

NS — небезопасный контроль доступа

  • 0b1: Доступ предоставляется для безопасного и небезопасного состояния выполнения.
  • 0b0: Доступ предоставлен только для безопасного состояния выполнения.

MemAttr[3:0] — индекс атрибута памяти в регистре MAIR_ELx

  • Можно различать память устройства и обычную память.
  • Для обычной памяти содержит кэширование (обратная/сквозная запись), возможность совместного использования (внутренняя/внешняя), выделение (чтение/запись) подсказки политики… и др.

Предотвращение выполнения из доступной для записи памяти

В качестве расширенной меры безопасности AArch64 поддерживает предотвращение выполнения из доступной для записи памяти на всех уровнях исключений и режимах трансляции в поле регистра SCTLR_ELx.WXN.

  • Для TR, который применяется к EL0 и более высокому EL, когда соответствующий SCTLR_Elx.WXN == 1:
  • Все регионы, доступные для записи из EL0 на этапе 1 преобразования адресов, обрабатываются как XN == 1.
  • Все регионы, доступные для записи из EL1 на этапе 1 преобразования адресов, обрабатываются как PXN == 1.
  • Для TR, который применяется только к одному уровню исключений, когда соответствующий SCTLR_Elx.WXN == 1, все регионы, доступные для записи с этапа 1 преобразования адресов, обрабатываются как UXN == 1.

— Конец статьи

Пожалуйста, оставьте свои комментарии, мнения … и др. в разделе комментариев.