pub const MAX_APP_NUM: usize = 10;  // 支持最大的用户应用数量
pub const KERNEL_HEAP_SIZE: usize = 0x30_0000;  // 内核的堆大小 3M
pub const PAGE_SIZE_BITS: usize = 0xc;  // 页内偏移的位宽(也就是每页的大小)
pub const PAGE_SIZE: usize = 0x1000;  // 每个页 的字节大小为 4kb
pub const MEMORY_END: usize = 0x80800000;  // 设置我们当前操作系统最大只能用到 0x80800000-0x80000000大小的内存也就是8M

pub const USER_STACK_SIZE: usize = 4096 * 2;  // 每个应用用户态的栈大小为8kb
pub const KERNEL_STACK_SIZE: usize = 4096 * 2; // 每个应用的内核栈

pub const TRAMPOLINE: usize = usize::MAX - PAGE_SIZE + 1;  // __alltraps对齐到了这里, (内核空间和用户空间这里虚拟地址都用这个)虚拟地址最高页 存放跳板, 跳板那一页, 被映射到 strampoline段(trap) 实际的物理地址, 即陷入时 cpu需要跳转的地址
pub const TRAP_CONTEXT: usize = TRAMPOLINE - PAGE_SIZE;  // 用户 trap context开始的位置 在 每个用户程序 它本身地址空间 的次高页

pub use crate::board::*;
