【问题标题】:Understanding /proc/iomem了解 /proc/iomem
【发布时间】:2013-12-26 11:58:28
【问题描述】:

我正在查看“/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-000dbff:PCI 总线 0000:00 000dc000-000fffff : 保留 000f0000-000fffff : 系统 ROM 00100000-7fedffff : 系统内存 01000000-01520fa4 : 内核代码 01520fa5-01c0e44f:内核数据 01d56000-0201d963 : 内核 bss 03000000-0b0fffff:内核崩溃 7fee0000-7fefefff : ACPI 表 7feff000-7fefffff : ACPI 非易失性存储 7ff00000-7fffffff : 系统内存 c0000000-febfffff : PCI 总线 0000:00 fec00000-fec0ffff : 保留 fec00000-fec003ff:IOAPIC 0 fed00000-fed003ff:HPET 0 fed00000-fed003ff:即插即用 00:08 fee00000-fee00fff : 本地 APIC fee00000-fee00fff : 保留 fffe0000-ffffffff : 保留

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

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

现在我的疑问是

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

【问题讨论】:

  • 为什么要使用 32 位内核?
  • 这与 /proc/iomem 的输出有什么关系?
  • 64 位输出看起来会有所不同……

标签: linux linux-kernel embedded-linux


【解决方案1】:

您遇到了3 GB barrier(您的 BIOS 已将其移至 2 GB)。 只有 2 GB 用作系统 RAM;其他 2 GB 的物理地址空间用于 I/O 设备。

另一块内存作为high memory使用,不能直接使用,每次访问都必须逐页映射到虚拟地址空间。

【讨论】:

  • 谢谢 CL。我也感谢您的快速回复。
  • 根据您的回复,我还有其他一些疑问。 1. 你怎么说它正在运行到 3GB 的障碍?它是否基于与“系统 RAM”对应的 iomem 地址范围? 2. 在我的 CPU 应该用于 I/O 设备的 2GB 地址空间中,如果我在驱动程序代码中执行“ioremap”,我应该能够看到 /proc/iomem rt 中的条目?我将通过编写一个简单的内核模块来检查(2),但也只是想要你的想法。提前致谢。
  • ioremap 允许您访问该内存,但/proc/iomem 中显示的是request_mem_region,这会阻止其他人访问同一区域。
猜你喜欢
  • 2017-01-06
  • 1970-01-01
  • 2020-05-17
  • 1970-01-01
  • 2010-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多