3

我遇到过一个术语——Linux 中的内存漏洞。我相信这是 I/O 重新映射的内存。我的理解正确吗?

4

1 回答 1

9

内存中的空洞可能意味着不同的东西:

1)它可以指物理内存寻址:由于历史和引导的原因,在“标准PC”(x86)架构中,所有系统RAM都不连续。内存映射 I/O 所在的地址空间中存在“漏洞”。例如,从最早的日子开始,就为引导 ROM (BIOS) 和视频内存保留了一个区域。此外,还有一大块地址空间是为动态分配给 PCI(和 PCI-X 或 PCI-Express)外围设备而保留的。这些区域通常由设备驱动程序根据需要映射到内核虚拟地址空间(可以称为“I/O 重新映射”)。

主板内置的内存控制器允许配置 RAM 的物理地址(这通常由标准 PC 架构中的 BIOS 处理)。其他 [非 x86] 架构通常在物理地址空间中存在类似的漏洞。

2.) 该术语也可以指虚拟地址空间中未分配的区域。内核虚拟地址空间和用户进程的虚拟地址空间通常都有“漏洞”。例如,linux 不映射任何对应于虚拟地址 0 的物理内存(即地址空间的第一页永远没有有效内存)——这允许捕获空指针引用。

在某些类型的内存分配中,Linux 内核在正确分配的虚拟内存区域之间维护未映射的区域,以捕获错误的内存引用(即偏离分配空间末端的内存引用)。

于 2014-05-13T12:50:36.753 回答