ARM 处理器如何使用超过 4GB 的内存?

How can ARM processors use more than 4GB of ram?

我最近开始研究自己的操作系统。我正在关注 jsandler18 的 awesome tutorial 并进行更改以允许它在 raspberry pi 4.

上达到 运行

可悲的是,jsandler18 在完成虚拟内存页面之前就停止更新教程了。我阅读了其他一些资料,发现了一个小问题:ARM l1 地址转换 table 将计算机 RAM 分成 1 MB 的块。这里的问题是它最多只允许 4096 个条目,或 4GB 的虚拟内存。

有什么方法可以使用 ARM MMU 转换超过 4GB 的虚拟内存吗?

所引用的教程似乎是在 ARMV7 中执行的,可以将其视为 32 位 ARM。这大致相当于 X86 中 32 位 PAE 模式下的 运行ning。因此使用这个例子不可能使用超过 4GB 的虚拟内存。

ARMV8(或 AARCH64)支持 64 位虚拟地址,并允许映射超过 4GB 的虚拟内存。

切换到ARMV8是通过切换异常级别来完成的,通常表示为EL0、EL1、EL2和EL3。您可能 运行 遇到的一个挑战是,一旦您进入 AARCH32 模式,您就无法转到较低的异常级别并切换到 AARCH64。例如,支持 EL1 64 位 -> EL0 32 位,但不支持 EL1 32 位 -> EL0 64 位。如果将执行交给您的 OS 的固件处于 AARCH32 模式,这可能会带来挑战。