Content #
外设所需要的内存主要包括外设的工作内存、DMA 区域和用于 IO 映射的内存。在 Linux 系统上,我们可以使用以下命令查看物理内存分布情况:
$ cat /proc/iomem
00000000-00000fff : reserved
00001000-0009fbff : System RAM
0009fc00-0009ffff : reserved
000a0000-000bffff : PCI Bus 0000:00
000c0000-000c8dff : Video ROM
000c9000-000c99ff : Adapter ROM
000f0000-000fffff : reserved
000f0000-000fffff : System ROM
00100000-3f7fefff : System RAM
01000000-0172ac34 : Kernel code
0172ac35-01d1c9bf : Kernel data
01e74000-01fdbfff : Kernel bss
3f7ff000-3f7fffff : reserved
3f800000-3fffffff : RAM buffer
40000000-47ffffff : System RAM
f0000000-fbffffff : PCI Bus 0000:00
f0000000-f1ffffff : 0000:00:02.0
f0000000-f015ffff : efifb
f2000000-f2ffffff : 0000:00:03.0
f2000000-f2ffffff : xen-platform-pci
f3000000-f300ffff : 0000:00:02.0
f3020000-f3020fff : 0000:00:02.0
f3021000-f3021fff : 0000:00:04.0
f3021000-f3021fff : ehci_hcd
fc000000-ffffffff : reserved
fec00000-fec003ff : IOAPIC 0
fee00000-fee00fff : Local APIC
你会发现,物理内存最重要的三个部分是:
- 从 640K(0xa0000)到 1M(0xfffff)区间,是被 ISA 设备的 RAM 和 ROM 占据的;
- 从 1M 开始才是主存(System RAM),同时我们也注意到,主存并不是连续的;
- 物理内存的最后 256M(0xf0000000 到 0xffffffff)保留给了 PCI 设备,用于 IO 内存映射。