CPU物理地址空间如何映射到物理DRAM?

问题描述 投票:0回答:1

在系统内存映射(也称为 cpu 内存映射)中,地址范围分配给 RAM 内存范围、PCI 设备的 MMIO 等。

让我们举个例子,RAM 的地址范围从地址 0 开始到最大 512MB,其中包括 DOS 兼容内存空间从 0 开始到最大 1MB。

现在当我们说这512MB的区域将被映射到内存中时,这是否意味着CPU地址空间中的地址0将被映射到物理RAM中的地址0并且同样增加到512MB?如果不是那么映射是如何完成的?

CPU地址空间中分配的内存地址范围是否与系统中安装的RAM的大小完全相同?如果不是这种情况那么在这种情况下映射将如何进行?

DOS兼容区域的内存映射是如何完成的?如果使用 DOS 以外的操作系统,该区域是否会在内存中未被使用?

内存映射是否意味着当CPU生成0到512MB的地址时只会被重定向到RAM中? CPU 生成的任何其他地址永远不会被 MMU 定向到 RAM 中?在这种情况下,所有应用程序的地址范围都在 0 到 512MB 之间,以便访问内存?

我正在考虑使用 x86 系统。

memory x86 cpu-architecture memory-address mmu
1个回答
2
投票

在讨论这个问题之前,有必要先了解一下 DRAM 架构

现在当我们说这512MB的区域将被映射到内存中时,这是否意味着CPU地址空间中的地址0将被映射到物理RAM中的地址0并且同样增加到512MB?如果不是那么映射是如何完成的?

DRAM 中并不存在“地址 0”的概念,而是有一个由 channelsDIMMrankschipsbanksrowscolumns 组成的架构,DRAM 控制器生成激活 DRAM 部分并从单元中选择数据的“命令”:enter image description here

所以第一个问题的答案是否定的。正如其他人提到的,确切的映射很复杂并且没有记录。如果您有兴趣,AMD 确实提供了文档(第 2.10 和 3.5 节),并且尝试了逆向工程 Intel 的映射(第 4 节)。

CPU地址空间中分配的内存地址范围是否与系统中安装的RAM的大小完全相同?如果不是这种情况那么在这种情况下映射将如何进行?

出于多种原因,答案也是否定的。你回答了其中之一:物理地址空间不仅仅代表RAM/内存,还有PCIe设备、ROM(BIOS所在的位置)等,因此存在内存漏洞。要检查物理地址在系统中对应什么,请在 Linux 中查看

/proc/iomem
,因为它具有映射。

DOS兼容区域的内存映射是如何完成的?如果使用 DOS 以外的操作系统,该区域是否会在内存中未被使用?

是的,我相信这些是未使用的内存漏洞。

内存映射是否意味着当CPU生成0到512MB的地址时只会被重定向到RAM中? CPU 生成的任何其他地址永远不会被 MMU 定向到 RAM 中?在这种情况下,所有应用程序的地址范围都在 0 到 512MB 之间,以便访问内存?

MMU 具有完全不同的用途。看一下虚拟地址到物理地址的转换。

© www.soinside.com 2019 - 2024. All rights reserved.