V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
wniming
V2EX  ›  Linux

Linux 的 /proc/iomem 里面为什么有一部分不是物理地址?

  •  
  •   wniming · 2023-03-09 11:28:50 +08:00 · 2131 次点击
    这是一个创建于 659 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我之前一直以为 cat /proc/iomem 得到的都是物理地址,直到看到了同事给我发的这张图:

    物理内存只有 8GB ,但内核代码和数据被加载到了 0x8800000000 这么大的地址上,这肯定不是物理地址,我不明白这个地址是处理器的虚拟地址还是内核高地址还是其他什么地址,而且也不理解 iomem 输出一个这样的地址有什么意义
    8 条回复    2023-03-09 16:17:47 +08:00
    x1596357
        1
    x1596357  
       2023-03-09 11:40:44 +08:00
    了解下操作系统的虚拟地址
    wniming
        2
    wniming  
    OP
       2023-03-09 11:44:36 +08:00
    @x1596357 能说详细一点吗?另外虚拟地址我非常了解
    wniming
        3
    wniming  
    OP
       2023-03-09 11:57:04 +08:00
    @x1596357 我现在如果想要知道内核代码和数据的物理地址要怎么看?
    heiher
        4
    heiher  
       2023-03-09 11:57:39 +08:00 via Android
    你说有没有可能存在一种地址空间即不叫物理,也不叫虚拟,并且物理内存(RAM)在该空间的映射不是从 0 开始的呢。
    x1596357
        5
    x1596357  
       2023-03-09 12:15:22 +08:00   ❤️ 1
    @wniming 其他的硬件比如访问总线也是需要地址空间的,所以在 64 位的地址空间,在实际 CPU 是 48 bits 中分配给他们。不然就没办法访问他们。看看 https://stackoverflow.com/questions/13668490/getting-address-of-symbol-from-kernels-symbol-table 是不是你想要的。具体我也不清楚。
    BingoXuan
        6
    BingoXuan  
       2023-03-09 12:20:49 +08:00   ❤️ 1
    是物理地址,只是不同总线影射的物理地址都不一样。要看 cpu 手册,不同 cpu 设计时候分配给不同总线的物理地址不一样。你以为的物理地址不过是内存总线影射的物理地址。
    pipapa
        7
    pipapa  
       2023-03-09 15:47:43 +08:00
    把你的设备树 dump 下来看下,各个设备是怎么映射的就知道了。
    TATQAQTAT
        8
    TATQAQTAT  
       2023-03-09 16:17:47 +08:00
    处理器的寻址空间很大,这个寻址空间就是我们所称的物理地址,其中不仅给随机存储器( RAM ,平常所称的内存)分配了一段地址用来访问,还有 ROM ,还有 PCI 设备映射到寻址空间的地址,还有其他一些外设的寄存器。
    我认为可能是日常语境下把这个寻址空间叫做内存空间,但这个内存是用来指可以被直接寻址的空间,并不单指 RAM (随机访问存储器)造成的混淆
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1352 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 17:36 · PVG 01:36 · LAX 09:36 · JFK 12:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.