【发布时间】:2021-05-26 14:47:32
【问题描述】:
我最近开始研究自己的操作系统。我正在关注 jsandler18 的 awesome tutorial 并在进行更改时允许它在树莓派 4 上运行。
遗憾的是,jsandler18 在完成虚拟内存页面之前就停止了更新教程。我阅读了其他一些资料,发现了一个小问题:ARM l1 地址转换表将计算机 RAM 划分为 1-MB 块。这里的问题是它最多只能允许 4096 个条目,即 4GB 的虚拟内存。
有什么方法可以使用 ARM MMU 转换超过 4GB 的虚拟内存?
【问题讨论】:
-
PC 或其他平台的操作方式相同。想想 pcie,它使用部分处理器地址空间作为进入其他地址空间的窗口。同样在这里。 mmu 使您更容易在应用程序访问它时为应用程序设置块错误,然后从媒体中拉入此应用程序内存并将其放入其中并完成访问,从而使应用程序永远不会知道。
-
它只是交换空间,是虚拟内存概念的一个子集。
-
具有 32 位地址空间(aarch64 应该更大,是的),特别是在支持 ARM linux 的传统内核和芯片上,其中一些地址空间被外围设备和 mmu 表和其他东西(pcie如果有的话,需要的视频,以太网数据包存储等)。在 pi 上,芯片设计会占用大量 ARM 地址空间,但只剩下一个很小的窗口。如果我没记错的话,最初是 0x20000000 字节的空间,后来是 0x3F000000 字节的空间。其中大部分被映射为缓存和邮箱区域。默认情况下,GPU 会占用一半的内存,或者至少曾经是这样。
-
即使你有一个 32 位 x86 电脑,4gb 内存,你也无法获得 4gb 内存,一个 gig 用于 pcie,一些平台在那里镜像视频内存,但是你有交换以获取剩余的内容并扩展它。即使是带有 4gb 内存的 64 位处理器,最初你也无法获得它,因为 pcie 会从该地址空间中取出一个 gig 洞,如果你正在引导 32 位操作系统,则不会将 pcie 或其他东西移到上面4GB 标记,如果 BIOS 允许,则需要为此设置 BIOS。
-
今天,在过渡到 64 位之后,它更有可能找到一个可以执行此操作的 bios,默认情况下可能会将其移出您可能拥有 ram 的地址空间,然后打开一个地址空间中有 2GB 的 pcie 孔。在任何情况下,您要么使用窗口进入虚拟空间,要么进行交换,早期的 8088/86 天它是进入具有更多内存的卡的窗口,今天你只需交换它。
标签: raspberry-pi operating-system arm kernel virtual-memory