Как физическое адресное пространство ЦП отображается на физическую DRAM? - PullRequest
0 голосов
/ 10 сентября 2018

В карте памяти системы (также называемой картой памяти ЦП) диапазоны адресов распределяются для диапазонов памяти RAM, MMIO для устройств PCI и т. Д.

Давайте рассмотрим пример, где диапазоны адресов для ОЗУ начинаются с адреса 0 до 512 МБ, что включает в себя пространство памяти, совместимое с DOS, начинается с 0 и увеличивается до 1 МБ.

Теперь, когда мы говорим, что эти 512 МБ области будут отображаться в памяти, означает ли это, что адрес 0 в адресном пространстве ЦП будет отображаться на адрес 0 в физической ОЗУ, и то же самое увеличивается до 512 МБ? Если нет, то как выполняется сопоставление?

Кроме того, диапазоны адресов памяти, выделенные в адресном пространстве ЦП, будут точно равны размеру ОЗУ, установленному в системе? Если это не так, то как будет происходить отображение в таком случае?

Кроме того, как будет выполняться отображение памяти в области совместимости с DOS? Будет ли этот регион не использоваться в памяти, если используется ОС, отличная от DOS?

Также означает, что отображение памяти означает, что когда процессор генерирует адрес от 0 до 512 МБ, только будет перенаправлен в ОЗУ? Любой другой адрес, сгенерированный ЦП, никогда не будет направлен в ОЗУ MMU? В таком случае все приложения будут иметь адрес в диапазоне от 0 до 512 МБ для того, чтобы получить доступ к памяти?

Я рассматриваю здесь систему x86.

1 Ответ

0 голосов
/ 04 октября 2018

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

Во-первых, я думаю, что было бы полезно перефразировать вопрос. Я понимаю, что вы хотите знать, но то, как они изначально сформулированы, вводит в заблуждение, поскольку в одном вопросе несколько вопросов. Я думаю, что вы хотите знать, это:

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

b) Как адреса в других устройствах памяти (например, на диске) отображаются в основную память

Рассматриваемая система управления памятью а) реализована на специальном оборудовании; Вопрос б) относится к виртуальной памяти и пейджингу, какая система управления памятью реализована с помощью комбинации аппаратного и системного программного обеспечения. Карты памяти относятся к вопросу b), и, несмотря на сильное влияние операционной системы, современные микропроцессоры предлагают аппаратные элементы для помощи в этом отображении, поэтому они не являются исключительными для ОС (но в основном!).

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

Я бы также использовал термин «Основная память» вместо DRAM. То, что основной памятью в большинстве современных процессоров является DRAM (а не другой тип памяти), не имеет отношения к базовой концепции преобразования физических адресов в логические.

Первый ответ на вопрос а:

Быстрый ответ: каждый виртуальный адрес преобразуется в физический адрес в основной памяти через встроенный аппаратный модуль управления памятью.

Еще немного объяснений:

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

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

Теперь на вопрос б:

Как адреса загружаются и сопоставляются из других запоминающих устройств в системе с основной памятью, использует другую систему управления памятью. Прежде чем идти дальше, обратите внимание, что процесс, загруженный в основную память, содержит адреса элементов данных и инструкции. Логический адрес - это местоположение относительно начала программы; инструкции в программе имеют только логические адреса. Когда процессор преобразует из логического в физический, он делает это автоматически, используя базовый адрес (это касается вопроса в третьем абзаце). Это аппаратная функция, предназначенная для совместной работы с ОС, и она будет зависеть от того, какую стратегию управления памятью использует ОС. Аппаратное и программное обеспечение работают совместно для управления виртуальной памятью.

Для дальнейшего расширения концепции виртуальной памяти в этом случае важно понимать пейджинг, и наиболее конкретно требовать пейджинг. Я думаю, что это относится к другому аспекту вашего вопроса, где вы упоминаете отображение памяти. Грубо говоря, программу можно разделить на небольшие куски, которые загружаются в память. Эти куски известны как страницы, и они назначаются частям памяти, известным как фреймы. ОС поддерживает таблицу страниц для каждого процесса, которая связывает расположение фрейма для каждой страницы. Каждый логический адрес в программе имеет номер страницы и относительный адрес на странице (перевод с логического на физическое все еще выполняется аппаратным обеспечением процессора). В DПри необходимости подкачки страниц каждая страница выводится только при необходимости: нам не нужно загружать весь процесс в основную память, а только те части, которые нам нужны для текущего состояния вычислений. В результате процесс может быть больше, чем вся основная память. Если бы у нас не было подкачки по требованию, то мы не смогли бы запрограммировать что-либо большее, чем размер памяти. Если мы хотим сделать это, то нам нужно разделить программу на части (подпрограммы, данные и т. Д.), Которые соответствуют основной памяти, которую мы загружаем по одному (я не уверен, но мне интересно, было ли это так, как это было с перфокартами ?). По требованию подкачки ОС и оборудование позаботятся об этом. В результате мы воспринимаем гораздо большую память, чем реальная память. Эта большая воспринимаемая память называется виртуальной памятью. Итак, возвращаясь к вопросу, ответ таков: аппаратное обеспечение и операционная система заботятся о загрузке памяти частями необходимого процесса, и они делают это с помощью виртуальной памяти (подкачки).

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

ЧАСТЬ 2

(добавлено в исходное сообщение после ввода комментария)

В ответ на комментарий, а также для уточнения. Как было сказано ранее, перевод реализован аппаратно и во многих случаях в сочетании с ОС. Чтобы узнать больше о том, как конкретно выполняется перевод, вам нужно обратиться к руководству по конкретному микропроцессору, который вы используете. Пейджинг и виртуальная память напрямую влияют на то, как происходит трансляция адресов. В Intel64, например, вы можете установить несегментированную невыгружаемую память, полезную для некоторых специфических приложений. В этом случае виртуальный адрес совпадает с физическим. Но как только вы переходите от этого представления, вы получаете немного других возможностей, когда преобразование физического адреса в процессор IS выполняется. В главе 3 тома 3А приведено краткое описание управления памятью и ее перевода:

ОБЗОР СИСТЕМНОЙ АРХИТЕКТУРЫ

2.1.5 Управление памятью

Архитектура системы поддерживает прямую физическую адресацию памяти или виртуальной памяти (посредством подкачки). Когда используется физическая адресация, линейный адрес рассматривается как физический адрес. Когда используется подкачка страниц: весь код, данные, стек и системные сегменты (включая GDT и IDT) могут быть выгружены с использованием только тех страниц, к которым недавно обращались, которые хранятся в физической памяти. Расположение страниц (иногда называемых фреймами страниц) в физической памяти содержится в структурах подкачки. Эти структуры находятся в физической памяти (см. Рис. 2-1 для случая 32-битной подкачки). Базовый физический адрес иерархии пейджинговой структуры содержится в управляющем регистре CR3. Записи в структурах пейджинга определяют физический адрес базы фрейма страницы, права доступа и информацию управления памятью. Чтобы использовать этот механизм подкачки, линейный адрес разбит на части. Части обеспечивают отдельные смещения в структурах подкачки и рамке страницы. Система может иметь одну иерархию структур подкачки или несколько. Например, каждая задача может иметь свою собственную иерархию.

2.1.5.1 Управление памятью в режиме IA-32e

В режиме IA-32e страницы физической памяти управляются набором системных структур данных. В режиме совместимости и 64-битном режиме используются четыре уровня структур данных системы. К ним относятся:

• Уровень карты страниц 4 (PML4) - запись в таблице PML4 содержит физический адрес базы таблицы указателей каталога страниц, права доступа и информацию об управлении памятью. Базовый физический адрес PML4 хранится в CR3.

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

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

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

Подробности о том, КАК это будет зависеть от настроек / режимов. Но в качестве примера посмотрите главу 3, например, где объясняется, как это происходит в защищенном режиме:

3.4 ЛОГИЧЕСКИЕ И ЛИНЕЙНЫЕ АДРЕСА На уровне архитектуры системы в защищенном режиме процессор использует два этапа преобразования адресов для получения физического адреса: преобразование логических адресов и разбиение на страницы линейного адресного пространства… и т. Д. И т. Д.

(просмотр содержания различных руководств покажет, где искать)

Руководства для Intel64 можно найти здесь:

https://software.intel.com/en-us/articles/intel-sdm

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

enter image description here

enter image description here

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

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

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

(Последнее редактирование: перечитайте комментарий: я вижу, что мое объяснение подкачки, связанное с доступом к памяти файлов, привело к дальнейшему рассмотрению вопроса и, возможно, добавило путаницу. Надеюсь, вторая часть поможет прояснить, почему подкачка страниц)

...