Использует ли ARM физический адрес или виртуальный адрес при входе в векторную таблицу? - PullRequest
0 голосов
/ 01 ноября 2018

Когда подкачка включена и возникает исключение, происходит ли обход таблицы преобразования для доступа к таблице векторов исключений по адресу 0x00000000?

  1. Если подкачка по-прежнему включена, то как процессы пользовательского режима и таблица векторов совместно используют адрес 0x00000000 - TTBR (базовый регистр таблицы перевода) не обновляется при вводе исключения, а TTBR не является регистром, зарегистрированным в банке (мы не речь идет о переключении между безопасным и небезопасным миром).
  2. Если нет, тогда мы должны вводить исключения, используя физическую адресацию, в этом случае подкачка теперь отключена?

1 Ответ

0 голосов
/ 01 ноября 2018

Когда подкачка включена и возникает исключение, происходит ли обход таблицы преобразования для доступа к таблице векторов исключений по адресу 0x00000000?

Почти все процессоры ARM имеют средства для настройки адреса таблицы исключений. Поэтому в большинстве систем таблица векторов исключений не находится по адресу 0x00000000. Однако MMU включается, когда принимаются исключения. TLB (кеш таблицы MMU / страницы) будет содержать физический адрес таблицы векторов.

В некоторых SOC таблица загрузочных векторов может быть в 0x0, но это обычно переконфигурируется загрузочным кодом.

  1. Если подкачка по-прежнему включена, то как процессы пользовательского режима и таблица векторов совместно используют адрес 0x00000000 - TTBR (базовый регистр таблицы трансляции) не обновляется при записи исключения, а TTBR не является регистром, зарегистрированным в банке (мы не здесь речь идет о переключении между безопасным и небезопасным миром).

Если вам нужна таблица векторов по адресу 0x00000000, то это то, что увидит пользовательское пространство, если вы не запретите это. Запрет доступа к 0x0 может быть желательным для предотвращения использования указателя NULL. Во многих ОС пользовательское пространство не запускается с 0x0, а адрес, например, 0x8000.

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

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

Нет подкачки, поскольку кэш, вероятно, также включен. Модуль загрузки / хранения ЦП будет более сложным, если некоторые доступы будут физическими, а другие - виртуальными; тем более что кеши заполнены виртуальным адресом в традиционных процессорах ARM.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...