为什么给定的虚拟地址(只是一个例子):
虚拟地址ffffffffa08f9533
对应于物理地址:0x24a5adff8
我只有0x200000000(8gb)的物理内存量(假设第一个地址为零 - 可能是错误的假设)所以返回的物理地址超出了我的实际物理内存。我究竟做错了什么?
我使用的功能是:
virt_to_phys
& phys_to_virt
由于
答案 0 :(得分:0)
PC有一些与真实RAM无关的地址空间。几天前,我安装了带4GB内存的显卡。但是PC中还有其他设备有自己的内存,CPU仍然可以访问:RAID控制器,网卡,支持DMA的I / O卡。
在64位之前的时间内,这些存储区必须映射到RAM的物理地址空间中的某处。这意味着您可以在PC中安装超过3.5GB的RAM,但无法使用它。
使用64位CPU,所有这些内存区域现在可以映射到真实/普通RAM之外的某个位置。
在Linux上,您可以在/proc/iomem