os/mm/page_table/
mod.rs

1//! 页表模块
2//!
3//! 本模块提供与页表管理相关的功能,包括页表的创建、映射、解除映射、翻译等操作。
4//! HACK: 在一个模块目录/文件的顶层又声明了一个同名子模块,这会造成 “module inception”。
5//! 虽然功能上可行,但会引起 API/模块层次混淆,Clippy 建议消除这种重复。
6#![allow(clippy::module_inception)]
7mod page_table;
8mod page_table_entry;
9
10pub use page_table::*;
11pub use page_table_entry::*;
12
13// 活动页表内部类型别名
14pub type ActivePageTableInner = crate::arch::mm::PageTableInner;
15
16/// 支持的页大小
17#[derive(Debug, Clone, Copy, PartialEq, Eq)]
18pub enum PageSize {
19    Size4K = 0x1000,
20    #[allow(dead_code)] // TODO(暂时注释): 大页支持已暂时禁用
21    Size2M = 0x20_0000,
22    #[allow(dead_code)] // TODO(暂时注释): 大页支持已暂时禁用
23    Size1G = 0x4000_0000,
24    // 暂时禁止更大的页大小
25}
26
27/// 分页操作中可能发生的错误
28#[derive(Debug)]
29pub enum PagingError {
30    /// 虚拟地址未被映射
31    NotMapped,
32    /// 虚拟地址已被映射
33    AlreadyMapped,
34    /// 提供了无效的地址
35    InvalidAddress,
36    /// 由于与现有的巨页(Huge Page)映射冲突,操作失败。
37    #[allow(dead_code)] // TODO(暂时注释): 大页支持已暂时禁用
38    HugePageConflict,
39    /// 提供了无效的标志(Flags)
40    InvalidFlags,
41    /// 帧(Frame)分配失败
42    FrameAllocFailed,
43    /// 此操作不支持此映射类型
44    #[allow(dead_code)]
45    UnsupportedMapType,
46    /// 区域不能收缩到其起始地址以下
47    #[allow(dead_code)]
48    ShrinkBelowStart,
49    /// 巨页拆分功能尚未实现
50    #[allow(dead_code)] // TODO(暂时注释): 大页支持已暂时禁用
51    HugePageSplitNotImplemented,
52    /// 内存耗尽
53    OutOfMemory,
54}
55
56/// 分页操作的结果类型
57pub type PagingResult<T> = Result<T, PagingError>;