ax-page-table-multiarch 技术文档
路径:
components/page_table_multiarch/page_table_multiarch类型:库 crate 分层:组件层 / 通用页表引擎 版本:0.6.1文档依据:当前仓库源码、Cargo.toml、README.md、src/lib.rs、src/bits64.rs、src/bits32.rs与相关上层引用路径
ax-page-table-multiarch 是整个仓库中页表抽象最底层的通用实现。它不关心当前是在 ArceOS 内核页表、StarryOS 用户地址空间,还是 Axvisor 嵌套页表场景;它所做的事情是用泛型把“页表元数据”“页表项格式”“页帧分配/物理直映能力”三件事拆开,然后提供统一的建表、映射、撤销、查询、权限修改和 TLB 刷新框架。
1. 架构设计分析
1.1 设计定位
ax-page-table-multiarch 的设计目标是把跨架构页表公共逻辑提炼成一个独立引擎:
- 对内核而言,它是通用页表实现库
- 对 hypervisor 而言,它是构造 NPT/Stage-2/EPT 风格页表的底层积木
- 对上层地址空间管理器而言,它提供可复用的 cursor/map/query 机制
因此它的边界非常清楚:
- 它实现的是“通用树形页表引擎”
- 它不直接负责地址空间策略
- 它不直接实现 VM、进程或 guest 的高级内存管理语义
1.2 三个核心泛型
该 crate 的核心抽象由三个泛型参数组成:
M: PagingMetaDataPTE: GenericPTEH: PagingHandler
它们分别对应三种职责:
| 泛型 | 作用 |
|---|---|
PagingMetaData | 架构元数据:页表层数、地址位宽、TLB 刷新方式、虚拟地址类型 |
GenericPTE | 页表项编码与 flags 语义 |
PagingHandler | OS/运行时依赖:页帧分配、释放、物理到虚拟地址映射 |
这个拆分是本 crate 的设计核心。它让“树形页表遍历逻辑”不必绑定到任何具体架构,也不必绑定到具体内存分配器。