#page-table #virtual #address-range #architecture #walker #paging #address-space

page-walker

Rust 语言中用于操作系统、虚拟机等系统的通用页面表遍历库

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

MIT 许可证

67KB
1K SLoC

简介

Crates.io Docs

该软件包在 Rust 中实现了一个通用的页面表遍历器,可用于在实现内存管理单元(MMU)的架构上,例如操作系统和虚拟机等,进行虚拟地址空间的 introspect 或管理。请注意,分页不仅仅限于 CPU,现代 GPU 也常见分页。因此,这里提供的实现可能对实现各种分页架构的驱动程序、操作系统、虚拟机等非常有用。


lib.rs:

该软件包在 Rust 中实现了一个通用的页面表遍历器,可用于在实现内存管理单元(MMU)的架构上,例如操作系统和虚拟机等,进行虚拟地址空间的 introspect 或管理。请注意,分页不仅仅限于 CPU,现代 GPU 也常见分页。因此,这里提供的实现可能对实现各种分页架构的驱动程序、操作系统、虚拟机等非常有用。

不同架构的页面表层次结构在 arch 模块中进行描述。特别是,PageFormat 结构用于描述一个页面表层次结构或布局,该布局由一个或多个 PageLevel 结构组成,其中每个级别描述了哪些虚拟地址位用于索引页面表。 PageFormat::walkPageFormat::walk_mut 实现了一个软件页面表遍历器,其基本思想是从根地址开始,使用 PageFormat 结构来选择虚拟地址中的适当位以索引这些页面表,依次遍历页面表。

在遍历页面表时,PageFormat::walkPageFormat::walk_mut 调用由用户提供的实现 PageWalkerPageWalkerMut 特性的类型提供的函数来操作各种页面表条目(PTEs)。注意,存在一个不可变版本,它不允许修改页面表,以及一个可变版本。

虽然可以自己实现 PageWalkerPageWalkerMut,但这个crate还提供了一个高级抽象的虚拟地址空间 AddressSpace,只需要实现 PageTableMapper 来映射和取消映射页面表。然后,AddressSpace 只提供了检索和修改现有页面PTEs的功能。

此外,当实现 PageTableMapper::alloc_pagePageTableMapper::free_page 时,可以完全使用功能。具体来说,AddressSpace 提供了为给定虚拟地址范围分配和释放页面的功能,更改给定虚拟地址范围的保护,并允许将物理地址范围映射和取消映射到给定的虚拟地址范围,以进行内存映射I/O。

依赖项

~175–265KB