我试图了解ARM64中的Zircon (Fuchsia OS内核)分配页面,所以我找到了mmu.cpp https://fuchsia.googlesource.com/fuchsia/+/4277d3203daa0fc5e4dd1625cf96891dd9882f44/zircon/kernel/arch/arm64/mmu.cc#328
但它就是这样:
if (likely(!test_page_alloc_func_)) {
status = pmm_alloc_page(0, &page, paddrp);
}pmm_alloc_page在这里的位置:https://fuchsia.googlesource.com/fuchsia/+/4277d3203daa0fc5e4dd1625cf96891dd9882f44/zircon/kernel/vm/pmm.cc#61
在这里定义的pmm节点:node.h表示:
// per numa node collection of pmm arenas and worker threads
class PmmNode {我无法在google上找到PMM区域,也无法在Fuchsia文档中找到PMM区域。有人能向我澄清这些概念吗?
我想了解如何在Zircon内核的ARM64中处理MMU
发布于 2021-01-18 07:57:03
PMM描述连续物理记忆的区域。您需要以某种方式知道哪些物理页面可以使用,例如,可能会为BIOS内存保留一些范围。
此信息由引导程序传递给Zircon 通过ZBI (Zircon Boot映像)。从这里,您可以看到竞技场如何在初始化中使用mem_arena_init。
PMM只用于处理物理内存。有一个可用的物理页面的自由职业者,您可以在pmm_alloc和pmm_free函数中使用它。还有一个API可以获得物理内存的连续范围,与特定的边界对齐(对于驱动程序很有用)。
https://stackoverflow.com/questions/64842940
复制相似问题