pub struct AddrSpace { /* private fields */ }
Expand description
The virtual memory address space.
Implementations§
source§impl AddrSpace
impl AddrSpace
sourcepub const fn page_table(&self) -> &PageTable
pub const fn page_table(&self) -> &PageTable
Returns the reference to the inner page table.
sourcepub const fn page_table_root(&self) -> PhysAddr
pub const fn page_table_root(&self) -> PhysAddr
Returns the root physical address of the inner page table.
sourcepub fn contains_range(&self, start: VirtAddr, size: usize) -> bool
pub fn contains_range(&self, start: VirtAddr, size: usize) -> bool
Checks if the address space contains the given address range.
sourcepub fn copy_mappings_from(&mut self, other: &AddrSpace) -> AxResult
pub fn copy_mappings_from(&mut self, other: &AddrSpace) -> AxResult
Copies page table mappings from another address space.
It copies the page table entries only rather than the memory regions, usually used to copy a portion of the kernel space mapping to the user space.
Returns an error if the two address spaces overlap.
sourcepub fn find_free_area(
&self,
hint: VirtAddr,
size: usize,
limit: VirtAddrRange
) -> Option<VirtAddr>
pub fn find_free_area( &self, hint: VirtAddr, size: usize, limit: VirtAddrRange ) -> Option<VirtAddr>
Finds a free area that can accommodate the given size.
The search starts from the given hint address, and the area should be within the given limit range.
Returns the start address of the free area. Returns None if no such area is found.
sourcepub fn map_linear(
&mut self,
start_vaddr: VirtAddr,
start_paddr: PhysAddr,
size: usize,
flags: MappingFlags
) -> AxResult
pub fn map_linear( &mut self, start_vaddr: VirtAddr, start_paddr: PhysAddr, size: usize, flags: MappingFlags ) -> AxResult
Add a new linear mapping.
See Backend
for more details about the mapping backends.
The flags
parameter indicates the mapping permissions and attributes.
Returns an error if the address range is out of the address space or not aligned.
sourcepub fn map_alloc(
&mut self,
start: VirtAddr,
size: usize,
flags: MappingFlags,
populate: bool
) -> AxResult
pub fn map_alloc( &mut self, start: VirtAddr, size: usize, flags: MappingFlags, populate: bool ) -> AxResult
Add a new allocation mapping.
See Backend
for more details about the mapping backends.
The flags
parameter indicates the mapping permissions and attributes.
Returns an error if the address range is out of the address space or not aligned.
sourcepub fn unmap(&mut self, start: VirtAddr, size: usize) -> AxResult
pub fn unmap(&mut self, start: VirtAddr, size: usize) -> AxResult
Removes mappings within the specified virtual address range.
Returns an error if the address range is out of the address space or not aligned.
sourcepub fn read(&self, start: VirtAddr, buf: &mut [u8]) -> AxResult
pub fn read(&self, start: VirtAddr, buf: &mut [u8]) -> AxResult
To read data from the address space.
§Arguments
start
- The start virtual address to read.buf
- The buffer to store the data.
sourcepub fn write(&self, start: VirtAddr, buf: &[u8]) -> AxResult
pub fn write(&self, start: VirtAddr, buf: &[u8]) -> AxResult
To write data to the address space.
§Arguments
start_vaddr
- The start virtual address to write.buf
- The buffer to write to the address space.
sourcepub fn protect(
&mut self,
start: VirtAddr,
size: usize,
flags: MappingFlags
) -> AxResult
pub fn protect( &mut self, start: VirtAddr, size: usize, flags: MappingFlags ) -> AxResult
Updates mapping within the specified virtual address range.
Returns an error if the address range is out of the address space or not aligned.
sourcepub fn handle_page_fault(
&mut self,
vaddr: VirtAddr,
access_flags: MappingFlags
) -> bool
pub fn handle_page_fault( &mut self, vaddr: VirtAddr, access_flags: MappingFlags ) -> bool
Handles a page fault at the given address.
access_flags
indicates the access type that caused the page fault.
Returns true
if the page fault is handled successfully (not a real
fault).