4 个版本 (2 个重大变更)
| 0.3.0 | 2021 年 11 月 5 日 |
|---|---|
| 0.2.1 | 2021 年 11 月 3 日 |
| 0.2.0 | 2021 年 11 月 2 日 |
| 0.1.0 | 2021 年 10 月 17 日 |
#7 在 #paging
67KB
1K SLoC
简介
该软件包在 Rust 中实现了一个通用的页面表遍历器,可用于在实现内存管理单元(MMU)的架构上,例如操作系统和虚拟机等,进行虚拟地址空间的 introspect 或管理。请注意,分页不仅仅限于 CPU,现代 GPU 也常见分页。因此,这里提供的实现可能对实现各种分页架构的驱动程序、操作系统、虚拟机等非常有用。
lib.rs:
该软件包在 Rust 中实现了一个通用的页面表遍历器,可用于在实现内存管理单元(MMU)的架构上,例如操作系统和虚拟机等,进行虚拟地址空间的 introspect 或管理。请注意,分页不仅仅限于 CPU,现代 GPU 也常见分页。因此,这里提供的实现可能对实现各种分页架构的驱动程序、操作系统、虚拟机等非常有用。
不同架构的页面表层次结构在 arch 模块中进行描述。特别是,PageFormat 结构用于描述一个页面表层次结构或布局,该布局由一个或多个 PageLevel 结构组成,其中每个级别描述了哪些虚拟地址位用于索引页面表。 PageFormat::walk 和 PageFormat::walk_mut 实现了一个软件页面表遍历器,其基本思想是从根地址开始,使用 PageFormat 结构来选择虚拟地址中的适当位以索引这些页面表,依次遍历页面表。
在遍历页面表时,PageFormat::walk 和 PageFormat::walk_mut 调用由用户提供的实现 PageWalker 和 PageWalkerMut 特性的类型提供的函数来操作各种页面表条目(PTEs)。注意,存在一个不可变版本,它不允许修改页面表,以及一个可变版本。
虽然可以自己实现 PageWalker 和 PageWalkerMut,但这个crate还提供了一个高级抽象的虚拟地址空间 AddressSpace,只需要实现 PageTableMapper 来映射和取消映射页面表。然后,AddressSpace 只提供了检索和修改现有页面PTEs的功能。
此外,当实现 PageTableMapper::alloc_page 和 PageTableMapper::free_page 时,可以完全使用功能。具体来说,AddressSpace 提供了为给定虚拟地址范围分配和释放页面的功能,更改给定虚拟地址范围的保护,并允许将物理地址范围映射和取消映射到给定的虚拟地址范围,以进行内存映射I/O。
依赖项
~175–265KB