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