pub struct MappingArea {
vpn_range: PageNumRange<Vpn>,
area_type: AreaType,
map_type: MapType,
permission: UniversalPTEFlag,
frames: BTreeMap<Vpn, TrackedFrames>,
file: Option<MmapFile>,
}Expand description
内存空间中的一个内存映射区域
Fields§
§vpn_range: PageNumRange<Vpn>此映射区域的虚拟页号范围
现已移除大页映射,不用在意 ~~ 注意!~~
~~ 创建后不要更改它,~~ ~~ 不要用它来映射或解除映射页~~
area_type: AreaType此映射区域的类型
map_type: MapType映射策略类型
permission: UniversalPTEFlag此映射区域的权限(使用 UniversalPTEFlag 以提高性能)
frames: BTreeMap<Vpn, TrackedFrames>用于帧映射区域的跟踪帧
file: Option<MmapFile>文件映射信息(如果是文件映射)
Implementations§
Source§impl MappingArea
impl MappingArea
pub fn vpn_range(&self) -> PageNumRange<Vpn>
pub fn permission(&self) -> UniversalPTEFlag
pub fn set_permission(&mut self, perm: UniversalPTEFlag)
pub fn map_type(&self) -> MapType
pub fn area_type(&self) -> AreaType
pub fn new( vpn_range: PageNumRange<Vpn>, area_type: AreaType, map_type: MapType, permission: UniversalPTEFlag, file: Option<MmapFile>, ) -> Self
Sourcepub fn map_one(
&mut self,
page_table: &mut PageTableInner,
vpn: Vpn,
) -> Result<(), PagingError>
pub fn map_one( &mut self, page_table: &mut PageTableInner, vpn: Vpn, ) -> Result<(), PagingError>
映射单个虚拟页到物理页
Sourcepub fn map(
&mut self,
page_table: &mut PageTableInner,
) -> Result<(), PagingError>
pub fn map( &mut self, page_table: &mut PageTableInner, ) -> Result<(), PagingError>
映射此映射区域中的所有页
Sourcepub fn unmap_one(
&mut self,
page_table: &mut PageTableInner,
vpn: Vpn,
) -> Result<(), PagingError>
pub fn unmap_one( &mut self, page_table: &mut PageTableInner, vpn: Vpn, ) -> Result<(), PagingError>
解除映射单个虚拟页
Sourcepub fn unmap(
&mut self,
page_table: &mut PageTableInner,
) -> Result<(), PagingError>
pub fn unmap( &mut self, page_table: &mut PageTableInner, ) -> Result<(), PagingError>
解除映射此映射区域中的所有页
Sourcepub fn copy_data(
&self,
page_table: &mut PageTableInner,
data: &[u8],
offset: usize,
)
pub fn copy_data( &self, page_table: &mut PageTableInner, data: &[u8], offset: usize, )
复制数据到已映射的区域
Sourcepub fn clone_metadata(&self) -> Self
pub fn clone_metadata(&self) -> Self
克隆元数据,但不克隆帧 用于写时复制(COW)的 fork
Sourcepub fn clone_with_data(
&self,
page_table: &mut PageTableInner,
) -> Result<Self, PagingError>
pub fn clone_with_data( &self, page_table: &mut PageTableInner, ) -> Result<Self, PagingError>
克隆映射区域及其数据 仅支持帧映射区域
Sourcepub fn split_at(
self,
page_table: &mut PageTableInner,
split_vpn: Vpn,
) -> Result<(Self, Self), PagingError>
pub fn split_at( self, page_table: &mut PageTableInner, split_vpn: Vpn, ) -> Result<(Self, Self), PagingError>
Sourcepub fn partial_change_permission(
self,
page_table: &mut PageTableInner,
start_vpn: Vpn,
end_vpn: Vpn,
new_perm: UniversalPTEFlag,
) -> Result<Vec<Self>, PagingError>
pub fn partial_change_permission( self, page_table: &mut PageTableInner, start_vpn: Vpn, end_vpn: Vpn, new_perm: UniversalPTEFlag, ) -> Result<Vec<Self>, PagingError>
Sourcepub fn partial_unmap(
self,
page_table: &mut PageTableInner,
start_vpn: Vpn,
end_vpn: Vpn,
) -> Result<Option<(Self, Option<Self>)>, PagingError>
pub fn partial_unmap( self, page_table: &mut PageTableInner, start_vpn: Vpn, end_vpn: Vpn, ) -> Result<Option<(Self, Option<Self>)>, PagingError>
Sourcepub fn load_from_file(&mut self) -> Result<(), PagingError>
pub fn load_from_file(&mut self) -> Result<(), PagingError>
Sourcepub fn sync_file(
&self,
page_table: &mut PageTableInner,
) -> Result<(), PagingError>
pub fn sync_file( &self, page_table: &mut PageTableInner, ) -> Result<(), PagingError>
Source§impl MappingArea
动态扩展和收缩
impl MappingArea
动态扩展和收缩
Sourcepub fn extend(
&mut self,
page_table: &mut PageTableInner,
count: usize,
) -> Result<Vpn, PagingError>
pub fn extend( &mut self, page_table: &mut PageTableInner, count: usize, ) -> Result<Vpn, PagingError>
通过在末尾添加页来扩展区域(仅限 4K 页)
返回新的结束 VPN
Sourcepub fn shrink(
&mut self,
page_table: &mut PageTableInner,
count: usize,
) -> Result<Vpn, PagingError>
pub fn shrink( &mut self, page_table: &mut PageTableInner, count: usize, ) -> Result<Vpn, PagingError>
通过从末尾移除页来收缩区域(仅限 4K 页)
返回新的结束 VPN