如果 RAM 不了解整个系统,RAM 如何包含“内存映射”?

如果 RAM 不了解整个系统,RAM 如何包含“内存映射”?

这个问题更多地涉及硬件而不是软件。基本上,引用这篇关于内存映射的文章,它说:

在计算机科学中,内存映射是一种数据结构(通常驻留在内存本身中),它指示内存的布局方式。

来源:http://en.wikipedia.org/wiki/Memory_map

开头那句话本身就存在极大的歧义。首先,如果 RAM 的用途取决于系统,那么 RAM 又如何知道如何为 CPU 的地址空间布局内存呢?

其次,RAM 可以更改。如果数据驻留在 RAM 中,那么所有 RAM 芯片都硬连线为具有描述内存的结构?这没有意义,因为从 CPU 的范围来看,它是模糊的,从 RAM 的范围来看,就更没有意义了(系统可以随时拥有不同的内存、不同的硬件、不同的地址、不同的架构等)。

第三,文章声称内存映射被传递给操作系统的固件。这只有在 RAM 是硬连线的,或者映射与 CPU 的地址空间同步时才有意义。

基本上,我对此完全一无所知。我完全不明白这有什么意义。如果 RAM 不了解系统的结构,它就无法为系统映射地址。

答案1

在计算机科学中,内存映射是一种数据结构(通常驻留在内存本身中),它指示内存的布局方式。

来源:http://en.wikipedia.org/wiki/Memory_map

开头那句话本身就存在极大的歧义。首先,如果 RAM 的用途取决于系统,那么 RAM 又如何知道如何为 CPU 的地址空间布局内存呢?

通常,内存映射本身会保存在设备上的某种非易失性存储器中,系统启动时会将内存映射加载到处理器/MMU 中。作为使用该设备的人,你可以自己改变内存映射,尽管在运行操作系统的系统中布局不太重要,因为控制内存访问就变成了操作系统的工作。DIY 方法通常只适用于嵌入式系统,在这种系统中,您自己将 RAM/ROM IC 物理连接到现有电路。

转向现代计算机系统……

其次,RAM 可以更改。如果数据驻留在 RAM 中,那么所有 RAM 芯片都硬连线为具有描述内存的结构?这没有意义,因为从 CPU 的范围来看它是模糊的,从 RAM 的范围来看则更没有意义(系统可以随时拥有不同的内存、不同的硬件、不同的地址、不同的架构等)。

第三,文章声称内存映射被传递给操作系统的固件。这只有在 RAM 是硬连线的,或者映射与 CPU 的地址空间同步时才有意义。

正是如此——这就是为什么 RAM 本身提供串行存在检测 (SPD)因此 BIOS/UEFI 可以确定系统中的 RAM 是多少(以及自上次启动计算机以来它是否发生了变化!)。

此外,x86 内存管理单元还具有虚拟内存支持制成用于操作系统。MMU 本身桥接物理硬连线 RAM 布局(这只是连接到主板上所有 DIMM 的大量数据/地址线),因此这与 CPU 本身抽象出来(即使 MMU 和 CPU 位于同一芯片上,它们在逻辑上也是两个不同的“单元”)。

如果 RAM 不了解系统的结构,就无法为系统映射地址。

你说得对,RAM 本身不能(这就是为什么它们有 SPD/XMP 配置文件)——每次启动计算机时,CPU/MMU 都会识别系统中可用的资源。此外,这个过程与操作系统下的任何内容都抽象出来了,因为大多数操作系统都使用虚拟内存现在,完全地将系统内存的概念与物理 RAM 分开(大多数人都熟悉这个概念,因为分页,其中操作系统可以将部分进程的内存放在磁盘上,以便为其他应用程序释放 RAM)。

答案2

文章说

在启动过程中,固件会传递内存映射,以便向操作系统内核指示内存布局。它包含有关总内存大小、任何保留区域的信息,还可能提供特定于架构的其他详细信息。

然后它说

PC BIOS 提供了一组例程,操作系统可以使用这些例程来获取内存布局。一些可用的例程是:BIOS Function: INT 0x15, AX=0xE801正在运行的操作系统使用此 BIOS 中断调用来获取 64MB 以上配置的内存大小

那么,回答你的第一个问题。文章中没有提到 CPU 地址空间,甚至在互联网上也很难找到这个术语!因为 CPU 有一些寄存器(CPU 内存位置),但不像一个需要映射或某种索引来查找东西的大空间!而且你链接到的那篇文章中甚至没有出现 CPU 这个术语。文章说 RAM 从系统的其他地方获取信息,而不是从 RAM。它从 BIOS 获取信息(BIOS 使用 CMOS 内存……这是一种有电池供电的内存……并在 BIOS 设置中手动设置……但可以自动找到一些东西)。可能内存映射具有灵活的方面,可以加载新的东西。但 RAM 启动时没有任何内存映射。

这回答了你的第二个问题。

而你在第三个问题中搞错了,文章并没有说内存映射被传递给了固件 - 不!!它说的是相反的In the boot process, a memory map is passed on from the firmware (固件不是 RAM,没有 RAM 固件)。

BIOS 的基本程序是固件。但它可以存储可更改的数据。

另外需要注意的是,有一种叫做 SPD 的东西,DDR RAM 使用它来根据请求将数据发送到 BIOS(正如这篇相当高级的文章所提到的) http://www.simmtester.com/page/news/showpubnews.asp?num=153 BIOS 中提到了 SPD。我在一个系统上配置了一个 BIOS,它说从 SPD 获取 RAM 详细信息,手动输入它们。(这样就可以对 RAM 进行超频)。当然没有内存映射。只是一些基本信息,例如它应该以什么速度运行以及 SPD 获取的其他内容,这些内容在该文章中提到。BIOS 中的其他内容是手动输入的数据。

并查看或内存映射

在此处输入图片描述

答案3

快速回答:RAM 不“知道”任何事情。RAM 中存储的任何有助于确定 RAM 其他内容语义的结构都是由操作系统构建的。

答案4

这里肯定存在一些混乱,主要是因为文章试图将各种不同但相关的东西集中到一个地方。

有两种主要类型的“内存映射”,它们是完全不同的东西,但使用相同的名称。

  • 内存布局

    你所看到的 BIOS 和硬件,实际上应该被称为内存布局。这是一个设计内存如何布局和使用。在这种情况下,内存的某些部分被分配用于不同的用途。

    这种映射通常不会以任何有形的方式存在于硬件中,它更像是设计师使用数组和索引在硬件/软件中提出并实现的餐巾纸或白板图。

  • 内存分配

    该术语的另一种用法内存映射是关于内存分配。在这种情况下,内存分配图是一个列表,操作系统的内存管理器使用它来跟踪哪些内存部分已分配给程序,哪些内存部分是空闲的。由于不同的程序以不确定的模式分配和释放不同大小的内存块,因此内存会变得碎片化,就像磁盘驱动器在创建和删除各种大小的文件时一样。

    由于内存碎片化,操作系统无法简单地将任意大小的内存块分配给每个程序。不同大小的空闲块被已使用的块包围。为了知道每个空闲块有多大,内存管理器将保存一个内存“映射”,每当它向程序分配或释放内存时,它都会将其标记为已使用或空闲。这个映射就像一个磁盘映射(图 1),你甚至可以使用类似虚拟机地图(图 2)。(可视化中使用的具体布局可能有所不同,例如,大多数磁盘映射会将驱动器显示为二维,而大多数内存工具会将内存显示为一维,但这只是一种设计选择。)

    这个分配图是一个文字映射,实际上是一个存储在内存中的数组。

  • 内存映射

    (当谈到 BIOS 和硬件时,还有术语记忆-映射指的是将硬件设备的一部分映射到内存上,这样你就可以像访问普通内存一样,通过简单地读写内存地址来读写设备。然而,这是该术语的另一种用法,因此增加了混淆。在这种情况下,“映射”并不意味着布局,而更像是一种数学映射,其中一个事物被分配给其他事物的类似物/别名。)


图1:Vopt 的磁盘映射

图 2: 虚拟机地图

相关内容