理解/proc/iomem

use*_*554 7 linux linux-kernel embedded-linux

我正在查看“/proc/iomem”条目并且对此有疑问。

我的 Linux PC 运行的是 Intel Xeon,系统 RAM 为 4GB。

我的系统的 /proc/iomem 条目看起来像

00000000-0000ffff : 保留
00010000-0009f3ff:系统内存
0009f400-0009ffff : 保留
000a0000-000bffff:PCI 总线 0000:00
000c0000-000c7fff : 视频 ROM
000ca000-000cbfff : 保留
  000ca000-000cafff : 适配器 ROM
  000cb000-000cbfff : 适配器 ROM
000cc000-000cffff:PCI 总线 0000:00
000d0000-000d3fff:PCI 总线 0000:00
000d4000-000d7fff:PCI 总线 0000:00
000d8000-000dbfff:PCI 总线 0000:00
000dc000-000fffff : 保留
  000f0000-000fffff : 系统 ROM
00100000-7fedffff:系统内存
  01000000-01520fa4:内核代码
  01520fa5-01c0e44f:内核数据
  01d56000-0201d963:内核 bss
  03000000-0b0fffff:内核崩溃
7fee0000-7feeffeff:ACPI 表
7feff000-7fefffff : ACPI 非易失性存储
7ff00000-7ffffffff:系统内存
c0000000-febffffff:PCI 总线 0000:00
fec00000-fec0ffff : 保留
  fec00000-fec003ff : IOAPIC 0
fed00000-fed003ff:HPET 0
  fed00000-fed003ff : pnp 00:08
fee00000-fee00fff :本地 APIC
  fee00000-fe00fff : 保留
fffe0000-ffffffff : 保留

现在,假设我的处理器有 32 条地址线(我觉得它有 40 条地址线 - 我从 /proc/cpuinfo 看到的),这意味着我的处理器将能够寻址 4GB 的物理内存。

从我的“/proc/iomem”条目来看,我看到只有 2GB 的系统 RAM 被我的 CPU 直接寻址。

现在我的疑问是

  1. 我的 CPU 如何处理其他 2 GB 的 RAM?我在哪里可以看到它的内存映射?

CL.*_*CL. 7

您遇到了3 GB 的障碍(您的 BIOS 已降低到 2 GB)。只有 2 GB 用作系统 RAM;物理地址空间的另外 2 GB 用于 I/O 设备。

另一个内存用作高端内存,不能直接使用,但必须逐页映射到虚拟地址空间,无论何时要访问它。

  • `ioremap` 允许您访问该内存,但是 `/proc/iomem` 中显示的是 `request_mem_region`,这会阻止其他人访问同一区域。 (2认同)