菜单

kaoqi
kaoqi
发布于 2026-08-14 / 4 阅读
0
0

物理地址空间

在CPU的角度看,似乎物理地址空间永远都是从0一致到最大都可以访问的。比如在UEFI固件阶段枚举总线上设备的时候,总是可以将0x80000000-0xFFFFFFFF映射为某种MMIO的区域。很明显,对于只有区区16G或区区4G的单根内存条来说,这种物理地址如果填满的话,分分钟就超过了内存条本身的性能极限。

因此可以说,供CPU使用的物理地址,它一点都不物理,也是一个由层级映射关系来组织的“虚拟化”的结构,并不是与真实内存条颗粒中的颗粒的位置直接对应的。

具体来说,物理地址空间是一个基于DMU的概念。DMU输入一个物理地址,输出对应具体DIMM接口中一组Row(行)、Column(列)、Rank(第几排书架)、Bank(哪一个书柜)、Bank Group(第几层)的值。事实上,通过这样的6元组,就可以与一个物理地址直接对应起来了,这正是DMU干的主要工作。这种对具体内存条地址的组织,物理地址控制器DMU就可以静态映射的方式将外设寄存器地址映过去。

直觉论断

DMU的初始化过程,目前还属于固件的范畴不为所知。但应该存在一个在物理地址空间建立之前的,由固件通过程序逐步完成的某种程序,来配置好硬件底层间的映射关系。

UEFI固件标准的中间件

站在这个角度来看,我们很难直接绕过UEFI固件去解析底层硬件到底发生了什么。很多时候底层的事情总是被蒙上了一层纱。对纯粹的软件来说,只能通过UEFI提供的一些标准的东西,来局限性的访问底层的硬件资源。


评论