Как используются базовые регистры, регистры пределов и регистры перемещения? - PullRequest
4 голосов
/ 06 марта 2012

Мое понимание процесса преобразования адресов в MMU (блок управления памятью)

-> логический адрес: генерируется cpu.programmer, связанного с этим адресом.

-> виртуальный адрес: находиться на жестком диске в виде страниц.

-> физический адрес: находиться в оперативной памяти. Это фактический адрес.

1: процессор генерирует логический адрес и отправляет его в MMU.

2: MMU преобразует логический адрес в виртуальный адрес, затем переводит его в физический адрес и отправляет физический адрес в ОЗУ.

3: когда ОЗУ заполнено, страница, которая не используется быстро, возвращается на жесткий диск для выделения памяти другим страницам (процессам).

мои вопросы: 1) куда добавляется значение регистра перемещения? 2) кто решает значение регистра переезда? 3) что делать с Базовым регистром и Лимитным регистром, как им пользоваться? 4) где отключается логический адрес?

Если какое-либо тело может ответить на это, я был бы благодарен. Требуется, дайте мне знать, это недоразумение в этой теме. -спасибо

Ответы [ 2 ]

4 голосов
/ 06 марта 2012

Я могу рассказать вам, как это работает на x86.

Все программы в не 64-битных режимах работают с адресами, объединенными из двух элементов: segment selector (для краткости «селектор» часто опускается в тексте, что может сбивать с толку) и offset. Эта пара selector:offset называется logical address.

Селекторная часть не всегда явно указывается или обрабатывается в коде, поскольку ЦП имеет ассоциации по умолчанию «сегментных регистров», содержащих селекторы с конкретными инструкциями или конкретными кодировками команд. Также необычно манипулировать селекторами в 32-битном режиме, но очень часто необходимо в 16-битном коде.

virtual address формируется из логического адреса «напрямую» (в режиме real или 8086 virtual) или «косвенно» (в режиме protected).

"Direct" virtual address = selector * 16 + offset.

"Indirect" virtual address = SegmentDescriptorTable [selector]. База + offset.

SegmentDescriptorTable - это либо Global Descriptor Table (AKA GDT), либо таблица локальных дескрипторов (AKA LDT). Он устанавливается ОС и описывает расположение и размер различных сегментов памяти. selector используется для выбора сегмента в таблице. Запись Base таблицы указывает начало сегмента (виртуальный адрес). Запись Limit указывает размер сегмента (обычно детали более сложные).

Когда программа пытается получить доступ к памяти со смещением, результатом которого является доступ за концом сегмента (ЦП сравнивает offset и Limit), ЦП генерирует exception и ОС обрабатывает его, обычно завершая программа.

Между прочим, в режиме real/v86, хотя виртуальный адрес формируется непосредственно из selector:offset, для смещений по-прежнему применяется 16-разрядный Limit, поэтому для доступа к большему количеству необходимо использовать другой селектор. 64 КБ памяти.

Запись Base в дескрипторе сегмента может использоваться, чтобы либо изолировать сегмент от остальной памяти (здесь помогает Limit), либо поместить или переместить весь сегмент на произвольный виртуальный адрес без необходимости изменения все (или многое) в программе, к которой он принадлежит (если мы перемещаем сегмент, данные должны быть перемещены в памяти, очевидно). По сути, он может быть использован для целей перемещения. В режиме real/v86 для целей перемещения selector изменяется.

virtual address может быть дополнительно переведен в physical address, если процессор работает в protected mode и настроил page tables. Если таблиц страниц нет, физический адрес совпадает с виртуальным адресом. Перевод выполняется в блоках физической памяти и диапазонах адресов, которые называются pages (часто 4 КБ).

На процессорах x86 нет выделенного регистра перемещения. Перемещение может быть достигнуто путем настройки:

  1. селекторы сегментов в регистрах процессора или кода программы
  2. сегменты базовых адресов в GDT / LDT
  3. смещения в коде программы
  4. физические адреса в таблицах страниц

Что касается virtual address : reside in the hard disk , as a pages, я не уверен, что именно вы хотите сказать по этому поводу, но только потому, что существует виртуальная трансляция адресов, это не означает, что есть также виртуальная память на диске. Есть и другие способы использования перевода, кроме виртуальной памяти на диске. А адреса находятся в ЦП и везде, куда ваш (и ОС) код записывает их, не обязательно на диск.

1 голос
/ 17 апреля 2016

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

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

Поток инструкций ЦП всегда работает на логическомадреса (значения могут относиться к физическим адресам).

Когда ЦПУ необходимо получить доступ к логическому адресу, MMU пытается преобразовать его в физические адреса.Он делает это путем поиска адреса в таблице страниц.

В этот момент может произойти несколько вещей:

  1. Возможно, не существует записи в таблице страниц для адреса => Доступнарушение.
  2. Запись в таблице страниц помечена как недействительная => Нарушение доступа.
  3. Запись в таблице страниц указывает, что физическая память не сопоставлена ​​с ней => Ошибка страницы.(Я опускаю режим проверки доступа).Это последний шаг, последний шаг, когда виртуальная память вступает в игру.В этот момент обработчик ошибок страницы операционной системы должен найти, где соответствующая страница была сохранена на диске, загрузить ее, обновить таблицу страниц и перезапустить инструкцию.

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

Я никогда не слышал о «перемещении»зарегистрироваться "раньше.Но, выполняя поиск в GOOGLE, я вижу, что некоторые академические материалы используют его как запутывающую педагогическую концепцию (т. Е. Не имеющую отношения к реальности).

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

Регистры обычно не загружаются напрямую.Их значения обычно записываются в аппаратный блок контекста процесса (PCB).Когда загружается контекст процесса, база и лимит таблицы страниц загружаются автоматически.

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

...