|
SimpleKernel 1.17.0
|
虚拟内存管理器(具体类,非抽象基类) More...
#include <virtual_memory.hpp>

Public Member Functions | |
| auto | InitCurrentCore () const -> void |
| 初始化当前核心的页表 | |
| auto | MapMMIO (uint64_t phys_addr, size_t size, uint32_t flags=cpu_io::virtual_memory::GetKernelPagePermissions()) -> Expected< void * > |
| 映射设备内存 (MMIO) | |
| auto | MapPage (void *page_dir, void *virtual_addr, void *physical_addr, uint32_t flags) -> Expected< void > |
| 映射单个页面 | |
| auto | UnmapPage (void *page_dir, void *virtual_addr) -> Expected< void > |
| 取消映射单个页面 | |
| auto | GetMapping (void *page_dir, void *virtual_addr) -> Expected< void * > |
| 获取虚拟地址对应的物理地址映射 | |
| auto | DestroyPageDirectory (void *page_dir, bool free_pages=false) -> void |
| 回收页表,释放所有映射和子页表 | |
| auto | ClonePageDirectory (void *src_page_dir, bool copy_mappings=true) -> Expected< void * > |
| 复制页表 | |
构造/析构函数 | |
| VirtualMemory () | |
| 构造函数 | |
| VirtualMemory (const VirtualMemory &)=delete | |
| VirtualMemory (VirtualMemory &&)=default | |
| auto | operator= (const VirtualMemory &) -> VirtualMemory &=delete |
| auto | operator= (VirtualMemory &&) -> VirtualMemory &=default |
| ~VirtualMemory ()=default | |
Private Member Functions | |
| auto | RecursiveFreePageTable (uint64_t *table, size_t level, bool free_pages) -> void |
| 递归释放页表 | |
| auto | RecursiveClonePageTable (uint64_t *src_table, uint64_t *dst_table, size_t level, bool copy_mappings) -> Expected< void > |
| 递归复制页表 | |
| auto | FindPageTableEntry (void *page_dir, void *virtual_addr, bool allocate=false) -> Expected< uint64_t * > |
| 在页表中查找虚拟地址对应的页表项 | |
Private Attributes | |
| void * | kernel_page_dir_ {nullptr} |
Static Private Attributes | |
| static constexpr size_t | kEntriesPerTable |
虚拟内存管理器(具体类,非抽象基类)
本类是内核虚拟内存子系统的唯一实现,通过 cpu_io::virtual_memory 命名空间中的架构相关辅助函数 实现跨架构(x86_64/riscv64/aarch64)的页表操作。 架构差异由 cpu_io 库在编译期分发,本类本身不使用虚函数 或条件编译。
物理页帧的分配/释放由外部分配器(bmalloc)提供, 本类通过 aligned_alloc/aligned_free 间接调用。
Definition at line 30 of file virtual_memory.hpp.
| VirtualMemory::VirtualMemory | ( | ) |
构造函数
Definition at line 21 of file virtual_memory.cpp.

|
delete |
|
default |
|
default |
| auto VirtualMemory::ClonePageDirectory | ( | void * | src_page_dir, |
| bool | copy_mappings = true |
||
| ) | -> Expected<void*> |
复制页表
| src_page_dir | 源页表目录 |
| copy_mappings | 是否复制映射(true:复制映射,false:仅复制页表结构) |
Definition at line 178 of file virtual_memory.cpp.

| auto VirtualMemory::DestroyPageDirectory | ( | void * | page_dir, |
| bool | free_pages = false |
||
| ) | -> void |
回收页表,释放所有映射和子页表
| page_dir | 要回收的页表目录 |
| free_pages | 是否同时释放映射的物理页 |
Definition at line 160 of file virtual_memory.cpp.

|
private |
在页表中查找虚拟地址对应的页表项
| page_dir | 页目录 |
| virtual_addr | 虚拟地址 |
| allocate | 如果页表项不存在是否分配新的页表 |
Definition at line 298 of file virtual_memory.cpp.

| auto VirtualMemory::GetMapping | ( | void * | page_dir, |
| void * | virtual_addr | ||
| ) | -> Expected<void*> |
获取虚拟地址对应的物理地址映射
| page_dir | 页表目录 |
| virtual_addr | 虚拟地址 |
Definition at line 141 of file virtual_memory.cpp.

| auto VirtualMemory::InitCurrentCore | ( | ) | const -> void |
初始化当前核心的页表
Definition at line 49 of file virtual_memory.cpp.

| auto VirtualMemory::MapMMIO | ( | uint64_t | phys_addr, |
| size_t | size, | ||
| uint32_t | flags = cpu_io::virtual_memory::GetKernelPagePermissions() |
||
| ) | -> Expected<void*> |
映射设备内存 (MMIO)
| phys_addr | 设备物理基地址 |
| size | 映射大小 |
| flags | 页表属性,默认为内核设备内存属性(如果架构支持区分的话) |
Definition at line 56 of file virtual_memory.cpp.


| auto VirtualMemory::MapPage | ( | void * | page_dir, |
| void * | virtual_addr, | ||
| void * | physical_addr, | ||
| uint32_t | flags | ||
| ) | -> Expected<void> |
映射单个页面
| page_dir | 页表目录 |
| virtual_addr | 虚拟地址 |
| physical_addr | 物理地址 |
| flags | 页表属性 |
Definition at line 74 of file virtual_memory.cpp.

|
delete |
|
default |
|
private |
递归复制页表
| src_table | 源页表 |
| dst_table | 目标页表 |
| level | 当前层级 |
| copy_mappings | 是否复制映射 |
Definition at line 244 of file virtual_memory.cpp.

|
private |
递归释放页表
| table | 当前页表 |
| level | 当前层级 |
| free_pages | 是否释放物理页 |
Definition at line 210 of file virtual_memory.cpp.

| auto VirtualMemory::UnmapPage | ( | void * | page_dir, |
| void * | virtual_addr | ||
| ) | -> Expected<void> |
取消映射单个页面
| page_dir | 页表目录 |
| virtual_addr | 虚拟地址 |
Definition at line 117 of file virtual_memory.cpp.

|
staticconstexprprivate |
Definition at line 119 of file virtual_memory.hpp.
|
private |
Definition at line 117 of file virtual_memory.hpp.