Linux 内核如何在 x86 系统中将虚拟内存从 8 MB 寻址到 1 GB

Linux 内核如何在 x86 系统中将虚拟内存从 8 MB 寻址到 1 GB

我正在研究如何在 Linux 内核中启用分页,但我不明白内核如何寻址 8 MB 到 1 GB 的虚拟内存。我的意思是,在启动阶段,内核将一个非常小的页表编码到映像中。该页表(由 swapper_pg_dir 指向)允许您仅写入页表的前两个条目。每个条目指向 4 MB 的页面。因此内核总共只能寻址 8 MB 的虚拟内存。然后内核必须存储第二级页表才能驱动其所有 1 GB 虚拟内存。为了解决这个问题,它必须依赖于一些内存分配器,它允许检索放置第二级页表条目的缓冲区:这是 bootmem 分配器。

所以我的问题是:内核如何寻址从 8 MB 到 1 GB 的虚拟内存?

答案1

我不确定问题到底是什么 - 它是使用分页单元完成的 - 也许请参见这里:https://stackoverflow.com/questions/18431261/how-does-x86-paging-work

低于 896MB 的页面目录仍然存储在 中swapper_pg_dir,只是在第一个 8MB 初始化后重新初始化。 896MB 以上和 4096MB 以下的情​​况会变得更加复杂,4096MB 以上会变得更加复杂。

相关内容