| 158 | } |
| 159 | |
| 160 | auto VirtualMemory::DestroyPageDirectory(void* page_dir, bool free_pages) |
| 161 | -> void { |
| 162 | if (page_dir == nullptr) { |
| 163 | return; |
| 164 | } |
| 165 | |
| 166 | // 递归释放所有层级的页表 |
| 167 | RecursiveFreePageTable(reinterpret_cast<uint64_t*>(page_dir), |
| 168 | cpu_io::virtual_memory::kPageTableLevels - 1, |
| 169 | free_pages); |
| 170 | |
| 171 | // 释放根页表目录本身 |
| 172 | aligned_free(page_dir); |
| 173 | |
| 174 | klog::Debug("Destroyed page directory at address: {:#x}", |
| 175 | static_cast<uint64_t>(reinterpret_cast<uintptr_t>(page_dir))); |
| 176 | } |
| 177 | |
| 178 | auto VirtualMemory::ClonePageDirectory(void* src_page_dir, bool copy_mappings) |
| 179 | -> Expected<void*> { |