Как физическое адресное пространство цп сопоставляется с физической памятью dram?

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

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

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

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

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

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

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

Реальный мир немного сложнее. Подумайте о файлах с отображением памяти, отображении пространства ввода-вывода для специальных драйверов, переназначении для DMA, если система не поддерживает DMA во всех диапазонах адресов. И похоже, что вы вообще упустили виртуальную память (место подкачки). #

Klaus 10.09.2018 10:57

Чтобы ответить на ваш вопрос, нужно написать целую книгу. Процесс сопоставления физических адресов с адресами DRAM в современных процессорах недокументирован и сложен. Это недокументировано, чтобы усложнить атаки с помощью Rowhammer. Но его, безусловно, можно реконструировать.

Hadi Brais 12.09.2018 02:51

Связанный: Контроллер адресного пространства X86?

Peter Cordes 12.09.2018 02:56

Это очень общий вопрос, и он также содержит несколько вопросов. Это не сайт для напишите мне, пожалуйста, книгу на эту тему. Проведите некоторое время с Google, самостоятельно проведя небольшое исследование; все это очень хорошо объясняется на многих других сайтах.

Ken White 12.09.2018 03:34
6
4
1 470
1

Ответы 1

Прежде чем перейти к вопросу, стоит взглянуть на Архитектура DRAM.

Now when we say that this 512MB of region will be mapped into the memory, does this mean that the address 0 in the CPU address space will be mapped to address 0 in the Physical RAM and the same goes up to 512MB? If not then how the mapping is done?

В DRAM нет точного понятия «адрес 0», вместо этого существует архитектура каналы, DIMM, разряды, чипсы, банки, ряды и столбцы, а контроллер DRAM генерирует «команды», которые активируют части DRAM. и выбирает данные из ячеек: enter image description here

Итак, ответ на первый вопрос - нет. Как уже упоминали другие люди, точное сопоставление сложно и недокументировано. Если вам интересно, AMD предоставляет документация (Разделы 2.10 и 3.5), и есть попытки сопоставления обратный инжиниринг Intel (Раздел 4).

Also does the memory address ranges allocated in CPU address space will be exactly equal to the size of the RAM installed in the system? If its not the case then how the mapping would take place in such case?

Ответ тоже отрицательный по многим причинам. Вы ответили на один из них: физическое адресное пространство представляет собой нечто большее, чем просто RAM / память, есть также устройства PCIe, ROM (где находится BIOS) и т. д., И, следовательно, есть дыры в памяти. Чтобы проверить, чему соответствует физический адрес в системе, в Linux взгляните на /proc/iomem, поскольку он имеет сопоставления.

Also how will memory mapping of DOS compatibility region be done? Does this region will be unused into the memory if using an OS other than DOS?

Да, я считаю, что это неиспользуемые дыры в памяти.

Also does the memory mapping means that when the CPU generates the address from 0 to 512 MB only will be redirected into the RAM ? Any other address generated by CPU will never be directed into the RAM by MMU ? In such case all the application would have the address between ranges from 0 to 512MB inorder to access the Memory ?

MMU служит совершенно другой цели. Взгляните на преобразование виртуального адреса в физический.

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