|
|
|
@ -309,6 +309,22 @@ impl MemorySet {
|
|
|
|
|
self.page_table.token()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 从当前地址空间中,根据start 虚拟页 找到逻辑段, 取消映射 一个逻辑段, 并把这个逻辑段 从 areas中删除
|
|
|
|
|
pub fn remove_area_with_start_vpn(&mut self, start_vpn: VirtPageNum) {
|
|
|
|
|
if let Some((idx, area)) = self.areas.iter_mut().enumerate().find(|(_, area)| {
|
|
|
|
|
area.vpn_range.l == start_vpn
|
|
|
|
|
}) {
|
|
|
|
|
area.unmap(&mut self.page_table);
|
|
|
|
|
self.areas.remove(idx);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 释放当前地址空间的 逻辑页帧areas, 把对应的物理页帧通过RAII 归还给全局物理页帧管理器
|
|
|
|
|
pub fn recycle_data_pages(&mut self) {
|
|
|
|
|
//*self = Self::new_bare();
|
|
|
|
|
self.areas.clear();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 激活当前地址空间
|
|
|
|
|
pub fn activate(&self) {
|
|
|
|
|
// let satp = self.page_table.token();
|
|
|
|
|