# page-table-generic **Repository Path**: zr233/page-table-generic ## Basic Information - **Project Name**: page-table-generic - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-11-11 - **Last Updated**: 2025-02-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 通用页表操作库 ## 使用示例 ### 实现接口 ```rust use page_table_generic::*; // 实现页表操作接口 #[derive(Clone, Copy)] struct PteImpl; impl PTEArch for PteImpl { fn page_size() -> usize { // 4k 4096 } fn new_pte(config: PTEGeneric) -> usize { todo!() } fn read_pte(pte: usize) -> PTEGeneric { todo!() } fn level() -> usize { // 4级页表 4 } } // 实现内存操作接口 struct AccessImpl; impl Access for AccessImpl { fn va_offset(&self) -> usize { 0 } unsafe fn alloc(&mut self, layout: Layout) -> Option> { todo!() } unsafe fn dealloc(&mut self, mut ptr: NonNull, layout: Layout) { todo!() } } // 使用 let mut access = AccessImpl; let mut pg = PageTableRef::::create_empty(&mut access).unwrap(); unsafe { pg.map_region( MapConfig::new( 0xffffff0000000000usize as _, 0x0000, AccessSetting::Read | AccessSetting::Write, CacheSetting::Device, ) .set_user_access(AccessSetting::Read), 0x2000, false, &mut access, ) .unwrap(); } for i in pg.iter_all(&access) { println!("l: {:x}, va: {:#p} c: {:?}", i.level, i.vaddr, i.pte); } pg.release(&mut access); ```