From 96a76290b66dd11bd77571313ded0f560b78691d Mon Sep 17 00:00:00 2001 From: WangRunji Date: Fri, 7 Dec 2018 23:48:27 +0800 Subject: [PATCH 1/9] fix rv32 __mulsi3 add overflow --- kernel/src/arch/riscv32/compiler_rt.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/src/arch/riscv32/compiler_rt.rs b/kernel/src/arch/riscv32/compiler_rt.rs index e8fff841..fe5da3b6 100644 --- a/kernel/src/arch/riscv32/compiler_rt.rs +++ b/kernel/src/arch/riscv32/compiler_rt.rs @@ -10,7 +10,7 @@ pub extern fn __mulsi3(mut a: u32, mut b: u32) -> u32 { while a > 0 { if a & 1 > 0 { - r += b; + r = r.overflowing_add(b).0; } a >>= 1; b <<= 1; From 102866bcf9813933e3e5de7caf84578427f5fc1d Mon Sep 17 00:00:00 2001 From: WangRunji Date: Sat, 8 Dec 2018 00:21:07 +0800 Subject: [PATCH 2/9] introduce MemoryHandler and refactor MemorySet. temporary disable swap. This is a manual rebase of LCY's code --- .../memory/src/memory_set/handler/byframe.rs | 34 ++++ crate/memory/src/memory_set/handler/delay.rs | 46 ++++++ crate/memory/src/memory_set/handler/linear.rs | 32 ++++ crate/memory/src/memory_set/handler/mod.rs | 29 ++++ .../src/{memory_set.rs => memory_set/mod.rs} | 151 ++++-------------- crate/memory/src/paging/mod.rs | 6 +- kernel/src/arch/aarch64/memory.rs | 14 +- kernel/src/arch/aarch64/paging.rs | 30 ++-- kernel/src/arch/riscv32/memory.rs | 12 +- kernel/src/arch/riscv32/paging.rs | 37 ++--- kernel/src/arch/x86_64/paging.rs | 31 ++-- kernel/src/memory.rs | 80 +++------- kernel/src/process/context.rs | 61 +------ 13 files changed, 249 insertions(+), 314 deletions(-) create mode 100644 crate/memory/src/memory_set/handler/byframe.rs create mode 100644 crate/memory/src/memory_set/handler/delay.rs create mode 100644 crate/memory/src/memory_set/handler/linear.rs create mode 100644 crate/memory/src/memory_set/handler/mod.rs rename crate/memory/src/{memory_set.rs => memory_set/mod.rs} (61%) diff --git a/crate/memory/src/memory_set/handler/byframe.rs b/crate/memory/src/memory_set/handler/byframe.rs new file mode 100644 index 00000000..ddfdd9d9 --- /dev/null +++ b/crate/memory/src/memory_set/handler/byframe.rs @@ -0,0 +1,34 @@ +use super::*; + +#[derive(Debug, Clone)] +pub struct ByFrame { + flags: MemoryAttr, + allocator: T, +} + +impl MemoryHandler for ByFrame { + fn box_clone(&self) -> Box { + Box::new(self.clone()) + } + + fn map(&self, pt: &mut PageTable, addr: VirtAddr) { + let target = self.allocator.alloc().expect("failed to allocate frame"); + self.flags.apply(pt.map(addr, target)); + } + + fn unmap(&self, pt: &mut PageTable, addr: VirtAddr) { + let target = pt.get_entry(addr).expect("fail to get entry").target(); + self.allocator.dealloc(target); + pt.unmap(addr); + } + + fn page_fault_handler(&self, _pt: &mut PageTable, _addr: VirtAddr) -> bool { + false + } +} + +impl ByFrame { + pub fn new(flags: MemoryAttr, allocator: T) -> Self { + ByFrame { flags, allocator } + } +} \ No newline at end of file diff --git a/crate/memory/src/memory_set/handler/delay.rs b/crate/memory/src/memory_set/handler/delay.rs new file mode 100644 index 00000000..af3003f7 --- /dev/null +++ b/crate/memory/src/memory_set/handler/delay.rs @@ -0,0 +1,46 @@ +use super::*; + +#[derive(Debug, Clone)] +pub struct Delay { + flags: MemoryAttr, + allocator: T, +} + +impl MemoryHandler for Delay { + fn box_clone(&self) -> Box { + Box::new(self.clone()) + } + + fn map(&self, pt: &mut PageTable, addr: VirtAddr) { + let entry = pt.map(addr, 0); + entry.set_present(false); + entry.update(); + } + + fn unmap(&self, pt: &mut PageTable, addr: VirtAddr) { + let entry = pt.get_entry(addr).expect("failed to get entry"); + if entry.present() { + self.allocator.dealloc(entry.target()); + } + pt.unmap(addr); + } + + fn page_fault_handler(&self, pt: &mut PageTable, addr: VirtAddr) -> bool { + let entry = pt.get_entry(addr).expect("failed to get entry"); + if entry.present() { + // not a delay case + return false; + } + let frame = self.allocator.alloc().expect("failed to alloc frame"); + entry.set_target(frame); + entry.set_present(true); + entry.update(); + true + } +} + +impl Delay { + pub fn new(flags: MemoryAttr, allocator: T) -> Self { + Delay { flags, allocator } + } +} \ No newline at end of file diff --git a/crate/memory/src/memory_set/handler/linear.rs b/crate/memory/src/memory_set/handler/linear.rs new file mode 100644 index 00000000..0ea84821 --- /dev/null +++ b/crate/memory/src/memory_set/handler/linear.rs @@ -0,0 +1,32 @@ +use super::*; + +#[derive(Debug, Eq, PartialEq, Clone)] +pub struct Linear { + offset: isize, + flags: MemoryAttr, +} + +impl MemoryHandler for Linear { + fn box_clone(&self) -> Box { + Box::new(self.clone()) + } + + fn map(&self, pt: &mut PageTable, addr: VirtAddr) { + let target = (addr as isize + self.offset) as PhysAddr; + self.flags.apply(pt.map(addr, target)); + } + + fn unmap(&self, pt: &mut PageTable, addr: VirtAddr) { + pt.unmap(addr); + } + + fn page_fault_handler(&self, _pt: &mut PageTable, _addr: VirtAddr) -> bool { + false + } +} + +impl Linear { + pub fn new(offset: isize, flags: MemoryAttr) -> Self { + Linear { offset, flags } + } +} \ No newline at end of file diff --git a/crate/memory/src/memory_set/handler/mod.rs b/crate/memory/src/memory_set/handler/mod.rs new file mode 100644 index 00000000..0a3c7ee6 --- /dev/null +++ b/crate/memory/src/memory_set/handler/mod.rs @@ -0,0 +1,29 @@ +use super::*; + +// here may be a interesting part for lab +pub trait MemoryHandler: Debug + 'static { + fn box_clone(&self) -> Box; + fn map(&self, pt: &mut PageTable, addr: VirtAddr); + fn unmap(&self, pt: &mut PageTable, addr: VirtAddr); + fn page_fault_handler(&self, pt: &mut PageTable, addr: VirtAddr) -> bool; +} + +impl Clone for Box { + fn clone(&self) -> Box { + self.box_clone() + } +} + +pub trait FrameAllocator: Debug + Clone + 'static { + fn alloc(&self) -> Option; + fn dealloc(&self, target: PhysAddr); +} + +mod linear; +mod byframe; +mod delay; +//mod swap; + +pub use self::linear::Linear; +pub use self::byframe::ByFrame; +pub use self::delay::Delay; \ No newline at end of file diff --git a/crate/memory/src/memory_set.rs b/crate/memory/src/memory_set/mod.rs similarity index 61% rename from crate/memory/src/memory_set.rs rename to crate/memory/src/memory_set/mod.rs index 3c631eb5..a40dfb7e 100644 --- a/crate/memory/src/memory_set.rs +++ b/crate/memory/src/memory_set/mod.rs @@ -1,10 +1,13 @@ //! memory set, area //! and the inactive page table -use alloc::vec::Vec; +use alloc::{vec::Vec, boxed::Box}; use core::fmt::{Debug, Error, Formatter}; use super::*; use crate::paging::*; +use self::handler::MemoryHandler; + +pub mod handler; /// an inactive page table /// Note: InactivePageTable is not a PageTable @@ -31,7 +34,7 @@ pub trait InactivePageTable { ** which takes a temporarily activated page table as param ** @retval none */ - fn edit(&mut self, f: impl FnOnce(&mut Self::Active)); + fn edit(&mut self, f: impl FnOnce(&mut Self::Active) -> T) -> T; /* ** @brief activate the inactive page table ** @retval none @@ -48,88 +51,32 @@ pub trait InactivePageTable { ** @retval usize the token of the inactive page table */ fn token(&self) -> usize; - - /// Why the methods below are in this trait? - /* - ** @brief allocate a frame for use - ** @retval Option the physics address of the beginning of allocated frame, if present - */ - fn alloc_frame() -> Option; - /* - ** @brief deallocate a frame for use - ** @param PhysAddr the physics address of the beginning of frame to be deallocated - ** @retval none - */ - fn dealloc_frame(target: PhysAddr); } /// a continuous memory space when the same attribute /// like `vma_struct` in ucore -#[derive(Debug, Eq, PartialEq, Copy, Clone)] +#[derive(Debug, Clone)] pub struct MemoryArea { start_addr: VirtAddr, end_addr: VirtAddr, - phys_start_addr: Option, - flags: MemoryAttr, + handler: Box, name: &'static str, } impl MemoryArea { - /* - ** @brief create a memory area from virtual address - ** @param start_addr: VirtAddr the virtual address of beginning of the area - ** @param end_addr: VirtAddr the virtual address of end of the area - ** @param flags: MemoryAttr the common memory attribute of the memory area - ** @param name: &'static str the name of the memory area - ** @retval MemoryArea the memory area created - */ - pub fn new(start_addr: VirtAddr, end_addr: VirtAddr, flags: MemoryAttr, name: &'static str) -> Self { - assert!(start_addr <= end_addr, "invalid memory area"); - MemoryArea { start_addr, end_addr, phys_start_addr: None, flags, name } - } - /* - ** @brief create a memory area from virtual address which is identically mapped - ** @param start_addr: VirtAddr the virtual address of beginning of the area - ** @param end_addr: VirtAddr the virtual address of end of the area - ** @param flags: MemoryAttr the common memory attribute of the memory area - ** @param name: &'static str the name of the memory area - ** @retval MemoryArea the memory area created - */ - pub fn new_identity(start_addr: VirtAddr, end_addr: VirtAddr, flags: MemoryAttr, name: &'static str) -> Self { - assert!(start_addr <= end_addr, "invalid memory area"); - MemoryArea { start_addr, end_addr, phys_start_addr: Some(start_addr), flags, name } - } - /* - ** @brief create a memory area from physics address - ** @param start_addr: PhysAddr the physics address of beginning of the area - ** @param end_addr: PhysAddr the physics address of end of the area - ** @param offset: usiz the offset between physics address and virtual address - ** @param flags: MemoryAttr the common memory attribute of the memory area - ** @param name: &'static str the name of the memory area - ** @retval MemoryArea the memory area created - */ - pub fn new_physical(phys_start_addr: PhysAddr, phys_end_addr: PhysAddr, offset: usize, flags: MemoryAttr, name: &'static str) -> Self { - let start_addr = phys_start_addr + offset; - let end_addr = phys_end_addr + offset; - assert!(start_addr <= end_addr, "invalid memory area"); - let phys_start_addr = Some(phys_start_addr); - MemoryArea { start_addr, end_addr, phys_start_addr, flags, name } - } /* ** @brief get slice of the content in the memory area ** @retval &[u8] the slice of the content in the memory area */ pub unsafe fn as_slice(&self) -> &[u8] { - use core::slice; - slice::from_raw_parts(self.start_addr as *const u8, self.end_addr - self.start_addr) + ::core::slice::from_raw_parts(self.start_addr as *const u8, self.end_addr - self.start_addr) } /* ** @brief get mutable slice of the content in the memory area ** @retval &mut[u8] the mutable slice of the content in the memory area */ pub unsafe fn as_slice_mut(&self) -> &mut [u8] { - use core::slice; - slice::from_raw_parts_mut(self.start_addr as *mut u8, self.end_addr - self.start_addr) + ::core::slice::from_raw_parts_mut(self.start_addr as *mut u8, self.end_addr - self.start_addr) } /* ** @brief test whether a virtual address is in the memory area @@ -156,64 +103,21 @@ impl MemoryArea { ** @param pt: &mut T::Active the page table to use ** @retval none */ - fn map(&self, pt: &mut T::Active) { - match self.phys_start_addr { - Some(phys_start) => { - for page in Page::range_of(self.start_addr, self.end_addr) { - let addr = page.start_address(); - let target = page.start_address() - self.start_addr + phys_start; - self.flags.apply(pt.map(addr, target)); - } - } - None => { - for page in Page::range_of(self.start_addr, self.end_addr) { - let addr = page.start_address(); - let target = T::alloc_frame().expect("failed to allocate frame"); - self.flags.apply(pt.map(addr, target)); - // for frame delayed allocation -// let entry = pt.map(addr,0); -// self.flags.apply(entry); -// let entry = pt.get_entry(addr).expect("fail to get entry"); -// entry.set_present(false); -// entry.update(); - } - } - }; + fn map(&self, pt: &mut PageTable) { + for page in Page::range_of(self.start_addr, self.end_addr) { + self.handler.map(pt, page.start_address()); + } } /* ** @brief unmap the memory area from the physice address in a page table ** @param pt: &mut T::Active the page table to use ** @retval none */ - fn unmap(&self, pt: &mut T::Active) { + fn unmap(&self, pt: &mut PageTable) { for page in Page::range_of(self.start_addr, self.end_addr) { - let addr = page.start_address(); - if self.phys_start_addr.is_none() { - if pt.get_entry(addr).expect("fail to get entry").present(){ - let target = pt.get_entry(addr).expect("fail to get entry").target(); - T::dealloc_frame(target); - } - else{ - // set valid for pt.unmap function - pt.get_entry(addr).expect("fail to get entry").set_present(true); - } - } - pt.unmap(addr); + self.handler.unmap(pt, page.start_address()); } } - - pub fn get_start_addr(&self) -> VirtAddr { - self.start_addr - } - - pub fn get_end_addr(&self) -> VirtAddr{ - self.end_addr - } - - pub fn get_flags(&self) -> &MemoryAttr{ - &self.flags - } - } /// The attributes of the memory @@ -269,7 +173,7 @@ impl MemoryAttr { ** the page table entry to apply the attribute ** @retval none */ - fn apply(&self, entry: &mut impl Entry) { + fn apply(&self, entry: &mut Entry) { if self.user { entry.set_user(true); } if self.readonly { entry.set_writable(false); } if self.execute { entry.set_execute(true); } @@ -293,13 +197,13 @@ impl MemorySet { */ pub fn new() -> Self { MemorySet { - areas: Vec::::new(), + areas: Vec::new(), page_table: T::new(), } } pub fn new_bare() -> Self { MemorySet { - areas: Vec::::new(), + areas: Vec::new(), page_table: T::new_bare(), } } @@ -316,11 +220,13 @@ impl MemorySet { ** @param area: MemoryArea the memory area to add ** @retval none */ - pub fn push(&mut self, area: MemoryArea) { + pub fn push(&mut self, start_addr: VirtAddr, end_addr: VirtAddr, handler: impl MemoryHandler, name: &'static str) { + assert!(start_addr <= end_addr, "invalid memory area"); + let area = MemoryArea { start_addr, end_addr, handler: Box::new(handler), name }; assert!(self.areas.iter() .find(|other| area.is_overlap_with(other)) .is_none(), "memory area overlap"); - self.page_table.edit(|pt| area.map::(pt)); + self.page_table.edit(|pt| area.map(pt)); self.areas.push(area); } /* @@ -364,7 +270,7 @@ impl MemorySet { let Self { ref mut page_table, ref mut areas, .. } = self; page_table.edit(|pt| { for area in areas.iter() { - area.unmap::(pt); + area.unmap(pt); } }); areas.clear(); @@ -378,6 +284,13 @@ impl MemorySet { &mut self.page_table } + pub fn page_fault_handler(&mut self, addr: VirtAddr) -> bool { + let area = self.areas.iter().find(|area| area.contains(addr)); + match area { + Some(area) => self.page_table.edit(|pt| area.handler.page_fault_handler(pt, addr)), + None => false, + } + } } impl Clone for MemorySet { @@ -385,10 +298,9 @@ impl Clone for MemorySet { let mut page_table = T::new(); page_table.edit(|pt| { for area in self.areas.iter() { - area.map::(pt); + area.map(pt); } }); - info!("finish map in clone!"); MemorySet { areas: self.areas.clone(), page_table, @@ -398,7 +310,6 @@ impl Clone for MemorySet { impl Drop for MemorySet { fn drop(&mut self) { - info!("come into drop func for memoryset"); self.clear(); } } diff --git a/crate/memory/src/paging/mod.rs b/crate/memory/src/paging/mod.rs index 6bbe9b21..bc6a9884 100644 --- a/crate/memory/src/paging/mod.rs +++ b/crate/memory/src/paging/mod.rs @@ -12,14 +12,14 @@ mod mock_page_table; // trait for PageTable pub trait PageTable { - type Entry: Entry; +// type Entry: Entry; /* ** @brief map a virual address to the target physics address ** @param addr: VirtAddr the virual address to map ** @param target: VirtAddr the target physics address ** @retval Entry the page table entry of the mapped virual address */ - fn map(&mut self, addr: VirtAddr, target: PhysAddr) -> &mut Self::Entry; + fn map(&mut self, addr: VirtAddr, target: PhysAddr) -> &mut Entry; /* ** @brief unmap a virual address from physics address ** @param addr: VirtAddr the virual address to unmap @@ -31,7 +31,7 @@ pub trait PageTable { ** @param addr: VirtAddr the virual address ** @retval Entry the page table entry of the virual address */ - fn get_entry(&mut self, addr: VirtAddr) -> Option<&mut Self::Entry>; + fn get_entry(&mut self, addr: VirtAddr) -> Option<&mut Entry>; // For testing with mock /* ** @brief used for testing with mock diff --git a/kernel/src/arch/aarch64/memory.rs b/kernel/src/arch/aarch64/memory.rs index cf86c761..25139322 100644 --- a/kernel/src/arch/aarch64/memory.rs +++ b/kernel/src/arch/aarch64/memory.rs @@ -5,7 +5,7 @@ use ucore_memory::PAGE_SIZE; use atags::atags::Atags; use aarch64::{barrier, regs::*, addr::*}; use aarch64::paging::{PhysFrame as Frame, memory_attribute::*}; -use crate::memory::{FRAME_ALLOCATOR, init_heap, MemoryArea, MemoryAttr, MemorySet}; +use crate::memory::{FRAME_ALLOCATOR, init_heap, MemoryArea, MemoryAttr, MemorySet, Linear}; /// Memory initialization. pub fn init() { @@ -100,14 +100,14 @@ fn init_frame_allocator() { /// remap kernel page table after all initialization. fn remap_the_kernel() { let mut ms = unsafe { MemorySet::new_bare() }; - ms.push(MemoryArea::new_identity(0, bootstacktop as usize, MemoryAttr::default(), "kstack")); - ms.push(MemoryArea::new_identity(stext as usize, etext as usize, MemoryAttr::default().execute().readonly(), "text")); - ms.push(MemoryArea::new_identity(sdata as usize, edata as usize, MemoryAttr::default(), "data")); - ms.push(MemoryArea::new_identity(srodata as usize, erodata as usize, MemoryAttr::default().readonly(), "rodata")); - ms.push(MemoryArea::new_identity(sbss as usize, ebss as usize, MemoryAttr::default(), "bss")); + ms.push(0, bootstacktop as usize, Linear::new(0, MemoryAttr::default()), "kstack"); + ms.push(stext as usize, etext as usize, Linear::new(0, MemoryAttr::default().execute().readonly()), "text"); + ms.push(sdata as usize, edata as usize, Linear::new(0, MemoryAttr::default()), "data"); + ms.push(srodata as usize, erodata as usize, Linear::new(0, MemoryAttr::default().readonly()), "rodata"); + ms.push(sbss as usize, ebss as usize, Linear::new(0, MemoryAttr::default()), "bss"); use super::board::{IO_REMAP_BASE, IO_REMAP_END}; - ms.push(MemoryArea::new_identity(IO_REMAP_BASE, IO_REMAP_END, MemoryAttr::default().mmio(), "io_remap")); + ms.push(IO_REMAP_BASE, IO_REMAP_END, Linear::new(0, MemoryAttr::default().mmio()), "io_remap"); unsafe { ms.get_page_table_mut().activate_as_kernel(); } ::core::mem::forget(ms); diff --git a/kernel/src/arch/aarch64/paging.rs b/kernel/src/arch/aarch64/paging.rs index d44e4e2d..edbbd899 100644 --- a/kernel/src/arch/aarch64/paging.rs +++ b/kernel/src/arch/aarch64/paging.rs @@ -49,9 +49,7 @@ pub struct ActivePageTable(RecursivePageTable<'static>); pub struct PageEntry(PageTableEntry); impl PageTable for ActivePageTable { - type Entry = PageEntry; - - fn map(&mut self, addr: usize, target: usize) -> &mut PageEntry { + fn map(&mut self, addr: usize, target: usize) -> &mut Entry { let flags = EF::default(); let attr = MairNormal::attr_value(); self.0.map_to(Page::of_addr(addr), Frame::of_addr(target), flags, attr, &mut FrameAllocatorForAarch64) @@ -64,7 +62,7 @@ impl PageTable for ActivePageTable { flush.flush(); } - fn get_entry(&mut self, addr: usize) -> Option<&mut PageEntry> { + fn get_entry(&mut self, addr: usize) -> Option<&mut Entry> { let entry_addr = ((addr >> 9) & 0o777_777_777_7770) | (RECURSIVE_INDEX << 39); Some(unsafe { &mut *(entry_addr as *mut PageEntry) }) } @@ -90,7 +88,7 @@ impl ActivePageTable { pub unsafe fn new() -> Self { ActivePageTable(RecursivePageTable::new(&mut *(ROOT_PAGE_TABLE as *mut _)).unwrap()) } - fn with_temporary_map(&mut self, frame: &Frame, f: impl FnOnce(&mut ActivePageTable, &mut Aarch64PageTable)) { + fn with_temporary_map(&mut self, frame: &Frame, f: impl FnOnce(&mut ActivePageTable, &mut Aarch64PageTable) -> T) -> T { // Create a temporary page let page = Page::of_addr(0xcafebabe); assert!(self.0.translate_page(page).is_none(), "temporary page is already mapped"); @@ -98,9 +96,10 @@ impl ActivePageTable { self.map(page.start_address().as_u64() as usize, frame.start_address().as_u64() as usize); // Call f let table = unsafe { &mut *page.start_address().as_mut_ptr() }; - f(self, table); + let ret = f(self, table); // Unmap the page self.unmap(0xcafebabe); + ret } } @@ -196,7 +195,7 @@ impl InactivePageTable for InactivePageTable0 { } fn new_bare() -> Self { - let frame = Self::alloc_frame().map(|target| Frame::of_addr(target)) + let frame = alloc_frame().map(|target| Frame::of_addr(target)) .expect("failed to allocate frame"); active_table().with_temporary_map(&frame, |_, table: &mut Aarch64PageTable| { table.zero(); @@ -206,7 +205,7 @@ impl InactivePageTable for InactivePageTable0 { InactivePageTable0 { p4_frame: frame } } - fn edit(&mut self, f: impl FnOnce(&mut Self::Active)) { + fn edit(&mut self, f: impl FnOnce(&mut Self::Active) -> T) -> T { active_table().with_temporary_map(&ttbr_el1_read(0), |active_table, p4_table: &mut Aarch64PageTable| { let backup = p4_table[RECURSIVE_INDEX].clone(); @@ -215,12 +214,13 @@ impl InactivePageTable for InactivePageTable0 { tlb_invalidate_all(); // execute f in the new context - f(active_table); + let ret = f(active_table); // restore recursive mapping to original p4 table p4_table[RECURSIVE_INDEX] = backup; tlb_invalidate_all(); - }); + ret + }) } unsafe fn activate(&self) { @@ -255,14 +255,6 @@ impl InactivePageTable for InactivePageTable0 { fn token(&self) -> usize { self.p4_frame.start_address().as_u64() as usize // as TTBRx_EL1 } - - fn alloc_frame() -> Option { - alloc_frame() - } - - fn dealloc_frame(target: usize) { - dealloc_frame(target) - } } impl InactivePageTable0 { @@ -291,7 +283,7 @@ impl InactivePageTable0 { impl Drop for InactivePageTable0 { fn drop(&mut self) { info!("PageTable dropping: {:?}", self); - Self::dealloc_frame(self.p4_frame.start_address().as_u64() as usize); + dealloc_frame(self.p4_frame.start_address().as_u64() as usize); } } diff --git a/kernel/src/arch/riscv32/memory.rs b/kernel/src/arch/riscv32/memory.rs index 7ba0b9fa..f633ac2a 100644 --- a/kernel/src/arch/riscv32/memory.rs +++ b/kernel/src/arch/riscv32/memory.rs @@ -2,7 +2,7 @@ use core::{slice, mem}; use riscv::{addr::*, register::sstatus}; use ucore_memory::PAGE_SIZE; use log::*; -use crate::memory::{active_table, FRAME_ALLOCATOR, init_heap, MemoryArea, MemoryAttr, MemorySet, MEMORY_ALLOCATOR}; +use crate::memory::{active_table, FRAME_ALLOCATOR, init_heap, MemoryArea, MemoryAttr, MemorySet, MEMORY_ALLOCATOR, Linear}; use crate::consts::{MEMORY_OFFSET, MEMORY_END}; #[cfg(feature = "no_mmu")] @@ -78,11 +78,11 @@ fn init_frame_allocator() { fn remap_the_kernel() { let mut ms = MemorySet::new_bare(); #[cfg(feature = "no_bbl")] - ms.push(MemoryArea::new_identity(0x10000000, 0x10000008, MemoryAttr::default(), "serial")); - ms.push(MemoryArea::new_identity(stext as usize, etext as usize, MemoryAttr::default().execute().readonly(), "text")); - ms.push(MemoryArea::new_identity(sdata as usize, edata as usize, MemoryAttr::default(), "data")); - ms.push(MemoryArea::new_identity(srodata as usize, erodata as usize, MemoryAttr::default().readonly(), "rodata")); - ms.push(MemoryArea::new_identity(sbss as usize, ebss as usize, MemoryAttr::default(), "bss")); + ms.push(0x10000000, 0x10000008, Linear::new(0, MemoryAttr::default()), "serial"); + ms.push(stext as usize, etext as usize, Linear::new(0, MemoryAttr::default().execute().readonly()), "text"); + ms.push(sdata as usize, edata as usize, Linear::new(0, MemoryAttr::default()), "data"); + ms.push(srodata as usize, erodata as usize, Linear::new(0, MemoryAttr::default().readonly()), "rodata"); + ms.push(sbss as usize, ebss as usize, Linear::new(0, MemoryAttr::default()), "bss"); unsafe { ms.activate(); } unsafe { SATP = ms.token(); } mem::forget(ms); diff --git a/kernel/src/arch/riscv32/paging.rs b/kernel/src/arch/riscv32/paging.rs index 6cce3f32..b043cf7c 100644 --- a/kernel/src/arch/riscv32/paging.rs +++ b/kernel/src/arch/riscv32/paging.rs @@ -42,8 +42,6 @@ pub struct ActivePageTable(RecursivePageTable<'static>); pub struct PageEntry(PageTableEntry); impl PageTable for ActivePageTable { - type Entry = PageEntry; - /* * @param: * addr: the virtual addr to be matched @@ -53,7 +51,7 @@ impl PageTable for ActivePageTable { * @retval: * the matched PageEntry */ - fn map(&mut self, addr: usize, target: usize) -> &mut PageEntry { + fn map(&mut self, addr: usize, target: usize) -> &mut Entry { // the flag for the new page entry let flags = EF::VALID | EF::READABLE | EF::WRITABLE; // here page is for the virtual address while frame is for the physical, both of them is 4096 bytes align @@ -86,7 +84,7 @@ impl PageTable for ActivePageTable { * @retval: * a mutable PageEntry reference of 'addr' */ - fn get_entry(&mut self, addr: usize) -> Option<&mut PageEntry> { + fn get_entry(&mut self, addr: usize) -> Option<&mut Entry> { if unsafe { !(*ROOT_PAGE_TABLE)[addr >> 22].flags().contains(EF::VALID) } { return None; } @@ -149,7 +147,7 @@ impl ActivePageTable { * @brief: * do something on the target physical frame? */ - fn with_temporary_map(&mut self, frame: &Frame, f: impl FnOnce(&mut ActivePageTable, &mut RvPageTable)) { + fn with_temporary_map(&mut self, frame: &Frame, f: impl FnOnce(&mut ActivePageTable, &mut RvPageTable) -> T) -> T { // Create a temporary page let page = Page::of_addr(VirtAddr::new(0xcafebabe)); assert!(self.0.translate_page(page).is_none(), "temporary page is already mapped"); @@ -157,9 +155,10 @@ impl ActivePageTable { self.map(page.start_address().as_usize(), frame.start_address().as_u32() as usize); // Call f let table = unsafe { &mut *(page.start_address().as_usize() as *mut _) }; - f(self, table); + let ret = f(self, table); // Unmap the page self.unmap(0xcafebabe); + ret } } /// implementation for the Entry trait in /crate/memory/src/paging/mod.rs @@ -233,7 +232,7 @@ impl InactivePageTable for InactivePageTable0 { * the inactive page table */ fn new_bare() -> Self { - let frame = Self::alloc_frame().map(|target| Frame::of_addr(PhysAddr::new(target as u32))) + let frame = alloc_frame().map(|target| Frame::of_addr(PhysAddr::new(target as u32))) .expect("failed to allocate frame"); active_table().with_temporary_map(&frame, |_, table: &mut RvPageTable| { table.zero(); @@ -248,7 +247,7 @@ impl InactivePageTable for InactivePageTable0 { * @brief: * temporarily map the inactive pagetable as an active p2page and apply f on the temporary modified active page table */ - fn edit(&mut self, f: impl FnOnce(&mut Self::Active)) { + fn edit(&mut self, f: impl FnOnce(&mut Self::Active) -> T) -> T { active_table().with_temporary_map(&satp::read().frame(), |active_table, p2_table: &mut RvPageTable| { let backup = p2_table[RECURSIVE_INDEX].clone(); @@ -257,12 +256,14 @@ impl InactivePageTable for InactivePageTable0 { sfence_vma_all(); // execute f in the new context - f(active_table); + let ret = f(active_table); // restore recursive mapping to original p2 table p2_table[RECURSIVE_INDEX] = backup; sfence_vma_all(); - }); + + ret + }) } /* @@ -313,14 +314,6 @@ impl InactivePageTable for InactivePageTable0 { fn token(&self) -> usize { self.p2_frame.number() | (1 << 31) // as satp } - - fn alloc_frame() -> Option { - alloc_frame() - } - - fn dealloc_frame(target: usize) { - dealloc_frame(target) - } } impl InactivePageTable0 { @@ -332,17 +325,15 @@ impl InactivePageTable0 { let table = unsafe { &mut *ROOT_PAGE_TABLE }; let e0 = table[0x40]; let e1 = table[KERNEL_P2_INDEX]; - assert!(!e1.is_unused()); - // for larger heap memroy let e2 = table[KERNEL_P2_INDEX + 1]; - assert!(!e2.is_unused()); let e3 = table[KERNEL_P2_INDEX + 2]; + assert!(!e1.is_unused()); assert!(!e2.is_unused()); + assert!(!e3.is_unused()); self.edit(|_| { table[0x40] = e0; table[KERNEL_P2_INDEX].set(e1.frame(), EF::VALID | EF::GLOBAL); - // for larger heap memroy table[KERNEL_P2_INDEX + 1].set(e2.frame(), EF::VALID | EF::GLOBAL); table[KERNEL_P2_INDEX + 2].set(e3.frame(), EF::VALID | EF::GLOBAL); }); @@ -352,7 +343,7 @@ impl InactivePageTable0 { impl Drop for InactivePageTable0 { fn drop(&mut self) { info!("PageTable dropping: {:?}", self); - Self::dealloc_frame(self.p2_frame.start_address().as_u32() as usize); + dealloc_frame(self.p2_frame.start_address().as_u32() as usize); } } diff --git a/kernel/src/arch/x86_64/paging.rs b/kernel/src/arch/x86_64/paging.rs index bdf9a4cb..37a64194 100644 --- a/kernel/src/arch/x86_64/paging.rs +++ b/kernel/src/arch/x86_64/paging.rs @@ -1,4 +1,3 @@ -use bit_allocator::{BitAlloc, BitAlloc64K}; // Depends on kernel use crate::memory::{active_table, alloc_frame, dealloc_frame}; use spin::{Mutex, MutexGuard}; @@ -44,9 +43,7 @@ pub struct ActivePageTable(RecursivePageTable<'static>); pub struct PageEntry(PageTableEntry); impl PageTable for ActivePageTable { - type Entry = PageEntry; - - fn map(&mut self, addr: usize, target: usize) -> &mut PageEntry { + fn map(&mut self, addr: usize, target: usize) -> &mut Entry { let flags = EF::PRESENT | EF::WRITABLE | EF::NO_EXECUTE; self.0.map_to(Page::of_addr(addr), Frame::of_addr(target), flags, &mut FrameAllocatorForX86) .unwrap().flush(); @@ -58,7 +55,7 @@ impl PageTable for ActivePageTable { flush.flush(); } - fn get_entry(&mut self, addr: usize) -> Option<&mut PageEntry> { + fn get_entry(&mut self, addr: usize) -> Option<&mut Entry> { for level in 0..3 { let entry = get_entry_ptr(addr, 4 - level); if unsafe { !(*entry).present() } { return None; } @@ -84,7 +81,7 @@ impl ActivePageTable { pub unsafe fn new() -> Self { ActivePageTable(RecursivePageTable::new(&mut *(0xffffffff_fffff000 as *mut _)).unwrap()) } - fn with_temporary_map(&mut self, frame: &Frame, f: impl FnOnce(&mut ActivePageTable, &mut x86PageTable)) { + fn with_temporary_map(&mut self, frame: &Frame, f: impl FnOnce(&mut ActivePageTable, &mut x86PageTable) -> T) -> T { // Create a temporary page let page = Page::of_addr(0xcafebabe); assert!(self.0.translate_page(page).is_none(), "temporary page is already mapped"); @@ -92,9 +89,10 @@ impl ActivePageTable { self.map(page.start_address().as_u64() as usize, frame.start_address().as_u64() as usize); // Call f let table = unsafe { &mut *page.start_address().as_mut_ptr() }; - f(self, table); + let ret = f(self, table); // Unmap the page self.unmap(0xcafebabe); + ret } } @@ -173,7 +171,7 @@ impl InactivePageTable for InactivePageTable0 { } fn new_bare() -> Self { - let frame = Self::alloc_frame().map(|target| Frame::of_addr(target)) + let frame = alloc_frame().map(|target| Frame::of_addr(target)) .expect("failed to allocate frame"); active_table().with_temporary_map(&frame, |_, table: &mut x86PageTable| { table.zero(); @@ -183,7 +181,7 @@ impl InactivePageTable for InactivePageTable0 { InactivePageTable0 { p4_frame: frame } } - fn edit(&mut self, f: impl FnOnce(&mut Self::Active)) { + fn edit(&mut self, f: impl FnOnce(&mut Self::Active) -> T) -> T { active_table().with_temporary_map(&Cr3::read().0, |active_table, p4_table: &mut x86PageTable| { let backup = p4_table[0o777].clone(); @@ -192,12 +190,13 @@ impl InactivePageTable for InactivePageTable0 { tlb::flush_all(); // execute f in the new context - f(active_table); + let ret = f(active_table); // restore recursive mapping to original p4 table p4_table[0o777] = backup; tlb::flush_all(); - }); + ret + }) } unsafe fn activate(&self) { @@ -227,14 +226,6 @@ impl InactivePageTable for InactivePageTable0 { fn token(&self) -> usize { self.p4_frame.start_address().as_u64() as usize // as CR3 } - - fn alloc_frame() -> Option { - alloc_frame() - } - - fn dealloc_frame(target: usize) { - dealloc_frame(target) - } } impl InactivePageTable0 { @@ -254,7 +245,7 @@ impl InactivePageTable0 { impl Drop for InactivePageTable0 { fn drop(&mut self) { info!("PageTable dropping: {:?}", self); - Self::dealloc_frame(self.p4_frame.start_address().as_u64() as usize); + dealloc_frame(self.p4_frame.start_address().as_u64() as usize); } } diff --git a/kernel/src/memory.rs b/kernel/src/memory.rs index 7fdaa135..b429e66e 100644 --- a/kernel/src/memory.rs +++ b/kernel/src/memory.rs @@ -4,7 +4,7 @@ use crate::consts::MEMORY_OFFSET; use super::HEAP_ALLOCATOR; use ucore_memory::{*, paging::PageTable}; use ucore_memory::cow::CowExt; -pub use ucore_memory::memory_set::{MemoryArea, MemoryAttr, InactivePageTable}; +pub use ucore_memory::memory_set::{MemoryArea, MemoryAttr, InactivePageTable, handler::*}; use ucore_memory::swap::*; use crate::process::{process}; use crate::sync::{SpinNoIrqLock, SpinNoIrq, MutexGuard}; @@ -46,33 +46,29 @@ pub fn active_table() -> MutexGuard<'static, CowExt, SpinNoIrq> ACTIVE_TABLE.lock() } -// Page table for swap in and out -lazy_static!{ - static ref ACTIVE_TABLE_SWAP: SpinNoIrqLock> = - SpinNoIrqLock::new(unsafe{SwapExt::new(ActivePageTable::new(), fifo::FifoSwapManager::default(), mock_swapper::MockSwapper::default())}); + +#[derive(Debug, Clone, Copy)] +pub struct GlobalFrameAlloc; + +impl FrameAllocator for GlobalFrameAlloc { + fn alloc(&self) -> Option { + // get the real address of the alloc frame + let ret = FRAME_ALLOCATOR.lock().alloc().map(|id| id * PAGE_SIZE + MEMORY_OFFSET); + trace!("Allocate frame: {:x?}", ret); + ret + // TODO: try to swap out when alloc failed + } + fn dealloc(&self, target: usize) { + trace!("Deallocate frame: {:x}", target); + FRAME_ALLOCATOR.lock().dealloc((target - MEMORY_OFFSET) / PAGE_SIZE); + } } -pub fn active_table_swap() -> MutexGuard<'static, SwapExt, SpinNoIrq>{ - ACTIVE_TABLE_SWAP.lock() -} - -/* -* @brief: -* allocate a free physical frame, if no free frame, then swap out one page and reture mapped frame as the free one -* @retval: -* the physical address for the allocated frame -*/ pub fn alloc_frame() -> Option { - // get the real address of the alloc frame - let ret = FRAME_ALLOCATOR.lock().alloc().map(|id| id * PAGE_SIZE + MEMORY_OFFSET); - trace!("Allocate frame: {:x?}", ret); - //do we need : unsafe { ACTIVE_TABLE_SWAP.force_unlock(); } ??? - Some(ret.unwrap_or_else(|| active_table_swap().swap_out_any::().ok().expect("fail to swap out page"))) + GlobalFrameAlloc.alloc() } - pub fn dealloc_frame(target: usize) { - trace!("Deallocate frame: {:x}", target); - FRAME_ALLOCATOR.lock().dealloc((target - MEMORY_OFFSET) / PAGE_SIZE); + GlobalFrameAlloc.dealloc(target); } pub struct KernelStack(usize); @@ -97,44 +93,12 @@ impl Drop for KernelStack { } -/* -* @param: -* addr: the virtual address of the page fault -* @brief: -* handle page fault -* @retval: -* Return true to continue, false to halt -*/ +/// Handle page fault at `addr`. +/// Return true to continue, false to halt. #[cfg(not(feature = "no_mmu"))] pub fn page_fault_handler(addr: usize) -> bool { info!("start handling swap in/out page fault"); - //unsafe { ACTIVE_TABLE_SWAP.force_unlock(); } - - /*LAB3 EXERCISE 1: YOUR STUDENT NUMBER - * handle the frame deallocated - */ - - info!("get pt from processor()"); - if process().memory_set.find_area(addr).is_none(){ - return false; - } - - let pt = process().memory_set.get_page_table_mut(); - info!("pt got"); - if active_table_swap().page_fault_handler(pt as *mut InactivePageTable0, addr, true, || alloc_frame().expect("fail to alloc frame")){ - return true; - } - ////////////////////////////////////////////////////////////////////////////// - - - // Handle copy on write (not being used now) - /* - unsafe { ACTIVE_TABLE.force_unlock(); } - if active_table().page_fault_handler(addr, || alloc_frame().expect("fail to alloc frame")){ - return true; - } - */ - false + process().memory_set.page_fault_handler(addr) } pub fn init_heap() { diff --git a/kernel/src/process/context.rs b/kernel/src/process/context.rs index 24701bd2..34cc0d7a 100644 --- a/kernel/src/process/context.rs +++ b/kernel/src/process/context.rs @@ -1,5 +1,5 @@ use crate::arch::interrupt::{TrapFrame, Context as ArchContext}; -use crate::memory::{MemoryArea, MemoryAttr, MemorySet, KernelStack, active_table_swap, alloc_frame, InactivePageTable0}; +use crate::memory::{MemoryArea, MemoryAttr, MemorySet, KernelStack, InactivePageTable0, GlobalFrameAlloc, FrameAllocator}; use xmas_elf::{ElfFile, header, program::{Flags, ProgramHeader, Type, SegmentData}}; use core::fmt::{Debug, Error, Formatter}; use alloc::{boxed::Box, collections::BTreeMap, vec::Vec, sync::Arc, string::String}; @@ -82,7 +82,7 @@ impl ContextImpl { true => (USER32_STACK_OFFSET, USER32_STACK_OFFSET + USER_STACK_SIZE), false => (USER_STACK_OFFSET, USER_STACK_OFFSET + USER_STACK_SIZE), }; - memory_set.push(MemoryArea::new(ustack_buttom, ustack_top, MemoryAttr::default().user(), "user_stack")); + memory_set.push(ustack_buttom, ustack_top, handler::ByFrame::new(MemoryAttr::default().user(), GlobalFrameAlloc), "user_stack"); ustack_top }; #[cfg(feature = "no_mmu")] @@ -96,9 +96,6 @@ impl ContextImpl { let kstack = KernelStack::new(); - //set the user Memory pages in the memory set swappable - memory_set_map_swappable(&mut memory_set); - Box::new(ContextImpl { arch: unsafe { ArchContext::new_user_thread( @@ -131,9 +128,6 @@ impl ContextImpl { info!("temporary copy data!"); let kstack = KernelStack::new(); - memory_set_map_swappable(&mut memory_set); - info!("FORK() finsihed!"); - Box::new(ContextImpl { arch: unsafe { ArchContext::new_fork(tf, kstack.top(), memory_set.token()) }, memory_set, @@ -144,28 +138,6 @@ impl ContextImpl { } } -#[cfg(not(feature = "no_mmu"))] -#[cfg(not(target_arch = "aarch64"))] -impl Drop for ContextImpl { - fn drop(&mut self){ - info!("come in to drop for ContextImpl"); - //set the user Memory pages in the memory set unswappable - let Self {ref mut arch, ref mut memory_set, ref mut kstack, ..} = self; - let pt = { - memory_set.get_page_table_mut() as *mut InactivePageTable0 - }; - for area in memory_set.iter(){ - for page in Page::range_of(area.get_start_addr(), area.get_end_addr()) { - let addr = page.start_address(); - unsafe { - active_table_swap().remove_from_swappable(pt, addr, || alloc_frame().expect("alloc frame failed")); - } - } - } - debug!("Finishing setting pages unswappable"); - } -} - impl Debug for ContextImpl { fn fmt(&self, f: &mut Formatter) -> Result<(), Error> { write!(f, "{:x?}", self.arch) @@ -222,7 +194,7 @@ fn memory_set_from<'a>(elf: &'a ElfFile<'a>) -> (MemorySet, usize) { let target = ms.push(mem_size); #[cfg(not(feature = "no_mmu"))] let target = { - ms.push(MemoryArea::new(virt_addr, virt_addr + mem_size, memory_attr_from(ph.flags()), "")); + ms.push(virt_addr, virt_addr + mem_size, handler::ByFrame::new(memory_attr_from(ph.flags()), GlobalFrameAlloc), ""); unsafe { ::core::slice::from_raw_parts_mut(virt_addr as *mut u8, mem_size) } }; // Copy data @@ -249,30 +221,3 @@ fn memory_attr_from(elf_flags: Flags) -> MemoryAttr { if elf_flags.is_execute() { flags = flags.execute(); } flags } - -/* -* @param: -* memory_set: the target MemorySet to set swappable -* @brief: -* map the memory area in the memory_set swappalbe, specially for the user process -*/ -#[cfg(not(any(feature = "no_mmu", target_arch = "aarch64")))] -pub fn memory_set_map_swappable(memory_set: &mut MemorySet) { - info!("COME INTO memory set map swappable!"); - let pt = unsafe { - memory_set.get_page_table_mut() as *mut InactivePageTable0 - }; - for area in memory_set.iter(){ - for page in Page::range_of(area.get_start_addr(), area.get_end_addr()) { - let addr = page.start_address(); - unsafe { active_table_swap().set_swappable(pt, addr); } - } - } - info!("Finishing setting pages swappable"); -} - -#[cfg(any(feature = "no_mmu", target_arch = "aarch64"))] -pub fn memory_set_map_swappable(memory_set: &mut MemorySet) { - // FIXME: Page Fault on aarch64 - // NOTE: This function may disappear after refactor memory crate -} \ No newline at end of file From ff806d4465123add5da48fd1766f99e1dc77d9b9 Mon Sep 17 00:00:00 2001 From: WangRunji Date: Sat, 8 Dec 2018 12:42:08 +0800 Subject: [PATCH 3/9] move common codes to InactivePageTable trait --- crate/memory/src/memory_set/mod.rs | 44 ---- crate/memory/src/paging/ext.rs | 15 ++ crate/memory/src/paging/mock_page_table.rs | 8 +- crate/memory/src/paging/mod.rs | 255 +++++++++------------ crate/memory/src/swap/mod.rs | 1 - kernel/src/arch/aarch64/paging.rs | 105 +++------ kernel/src/arch/riscv32/paging.rs | 199 ++++------------ kernel/src/arch/x86_64/paging.rs | 113 +++------ kernel/src/memory.rs | 2 +- 9 files changed, 233 insertions(+), 509 deletions(-) create mode 100644 crate/memory/src/paging/ext.rs diff --git a/crate/memory/src/memory_set/mod.rs b/crate/memory/src/memory_set/mod.rs index a40dfb7e..c4741511 100644 --- a/crate/memory/src/memory_set/mod.rs +++ b/crate/memory/src/memory_set/mod.rs @@ -9,50 +9,6 @@ use self::handler::MemoryHandler; pub mod handler; -/// an inactive page table -/// Note: InactivePageTable is not a PageTable -/// but it can be activated and "become" a PageTable -/// Why this trait is in this file?(seems should in paging/mod.rs) -pub trait InactivePageTable { - /// the active version of page table - type Active: PageTable; - - /* - ** @brief create a inactive page table with kernel memory mapped - ** @retval InactivePageTable the created inactive page table - */ - fn new() -> Self; - /* - ** @brief create an inactive page table without kernel memory mapped - ** @retval InactivePageTable the created inactive page table - */ - fn new_bare() -> Self; - /* - ** @brief temporarily active the page table and edit it - ** @retval impl FnOnce(&mut Self::Active) - ** the function of the editing action, - ** which takes a temporarily activated page table as param - ** @retval none - */ - fn edit(&mut self, f: impl FnOnce(&mut Self::Active) -> T) -> T; - /* - ** @brief activate the inactive page table - ** @retval none - */ - unsafe fn activate(&self); - /* - ** @brief execute function with this inactive page table - ** @param f: impl FnOnce() the function to be executed - ** @retval none - */ - unsafe fn with(&self, f: impl FnOnce() -> T) -> T; - /* - ** @brief get the token of the inactive page table - ** @retval usize the token of the inactive page table - */ - fn token(&self) -> usize; -} - /// a continuous memory space when the same attribute /// like `vma_struct` in ucore #[derive(Debug, Clone)] diff --git a/crate/memory/src/paging/ext.rs b/crate/memory/src/paging/ext.rs new file mode 100644 index 00000000..aa15fb62 --- /dev/null +++ b/crate/memory/src/paging/ext.rs @@ -0,0 +1,15 @@ +//! Helper functions + +use super::*; + +pub trait PageTableExt: PageTable { + const TEMP_PAGE_ADDR: VirtAddr = 0xcafeb000; + + fn with_temporary_map(&mut self, target: PhysAddr, f: impl FnOnce(&mut Self, &mut D) -> T) -> T { + self.map(Self::TEMP_PAGE_ADDR, target); + let data = unsafe { &mut *(self.get_page_slice_mut(Self::TEMP_PAGE_ADDR).as_ptr() as *mut D) }; + let ret = f(self, data); + self.unmap(Self::TEMP_PAGE_ADDR); + ret + } +} \ No newline at end of file diff --git a/crate/memory/src/paging/mock_page_table.rs b/crate/memory/src/paging/mock_page_table.rs index bb1d415f..67f34be9 100644 --- a/crate/memory/src/paging/mock_page_table.rs +++ b/crate/memory/src/paging/mock_page_table.rs @@ -57,14 +57,16 @@ impl Entry for MockEntry { fn set_user(&mut self, value: bool) { unimplemented!() } fn execute(&self) -> bool { unimplemented!() } fn set_execute(&mut self, value: bool) { unimplemented!() } + fn mmio(&self) -> bool { unimplemented!() } + fn set_mmio(&mut self, value: bool) { unimplemented!() } } type PageFaultHandler = Box; impl PageTable for MockPageTable { - type Entry = MockEntry; +// type Entry = MockEntry; - fn map(&mut self, addr: VirtAddr, target: PhysAddr) -> &mut Self::Entry { + fn map(&mut self, addr: VirtAddr, target: PhysAddr) -> &mut Entry { let entry = &mut self.entries[addr / PAGE_SIZE]; assert!(!entry.present); entry.present = true; @@ -77,7 +79,7 @@ impl PageTable for MockPageTable { assert!(entry.present); entry.present = false; } - fn get_entry(&mut self, addr: VirtAddr) -> Option<&mut Self::Entry> { + fn get_entry(&mut self, addr: VirtAddr) -> Option<&mut Entry> { Some(&mut self.entries[addr / PAGE_SIZE]) } fn get_page_slice_mut<'a,'b>(&'a mut self, addr: VirtAddr) -> &'b mut [u8] { diff --git a/crate/memory/src/paging/mod.rs b/crate/memory/src/paging/mod.rs index bc6a9884..ccb2a0e2 100644 --- a/crate/memory/src/paging/mod.rs +++ b/crate/memory/src/paging/mod.rs @@ -3,198 +3,149 @@ //! Implemented for every architecture, used by OS. use super::*; -use super::memory_set::InactivePageTable; +use log::*; #[cfg(test)] pub use self::mock_page_table::MockPageTable; +pub use self::ext::*; #[cfg(test)] mod mock_page_table; +mod ext; + -// trait for PageTable pub trait PageTable { // type Entry: Entry; - /* - ** @brief map a virual address to the target physics address - ** @param addr: VirtAddr the virual address to map - ** @param target: VirtAddr the target physics address - ** @retval Entry the page table entry of the mapped virual address - */ + + /// Map a page of virual address `addr` to the frame of physics address `target` + /// Return the page table entry of the mapped virual address fn map(&mut self, addr: VirtAddr, target: PhysAddr) -> &mut Entry; - /* - ** @brief unmap a virual address from physics address - ** @param addr: VirtAddr the virual address to unmap - ** @retval none - */ + + /// Unmap a page of virual address `addr` fn unmap(&mut self, addr: VirtAddr); - /* - ** @brief get the page table entry of a virual address - ** @param addr: VirtAddr the virual address - ** @retval Entry the page table entry of the virual address - */ + + /// Get the page table entry of a page of virual address `addr` + /// If its page do not exist, return `None` fn get_entry(&mut self, addr: VirtAddr) -> Option<&mut Entry>; - // For testing with mock - /* - ** @brief used for testing with mock - ** get a mutable reference of the content of a page from a virtual address - ** @param addr: VirtAddr the virual address of the page - ** @retval &'b mut [u8] mutable reference of the content of a page as array of bytes - */ - fn get_page_slice_mut<'a,'b>(&'a mut self, addr: VirtAddr) -> &'b mut [u8]; - /* - ** @brief used for testing with mock - ** read data from a virtual address - ** @param addr: VirtAddr the virual address of data to read - ** @retval u8 the data read - */ - fn read(&mut self, addr: VirtAddr) -> u8; - /* - ** @brief used for testing with mock - ** write data to a virtual address - ** @param addr: VirtAddr the virual address of data to write - ** @param data: u8 the data to write - ** @retval none - */ - fn write(&mut self, addr: VirtAddr, data: u8); + + /// Get a mutable reference of the content of a page of virtual address `addr` + /// Used for testing with mock + fn get_page_slice_mut<'a>(&mut self, addr: VirtAddr) -> &'a mut [u8] { + unsafe { core::slice::from_raw_parts_mut((addr & !(PAGE_SIZE - 1)) as *mut u8, PAGE_SIZE) } + } + /// Read data from virtual address `addr` + /// Used for testing with mock + fn read(&mut self, addr: VirtAddr) -> u8 { + unsafe { (addr as *const u8).read() } + } + + /// Write data to virtual address `addr` + /// Used for testing with mock + fn write(&mut self, addr: VirtAddr, data: u8) { + unsafe { (addr as *mut u8).write(data) } + } } - -// trait for Entry in PageTable +/// Page Table Entry pub trait Entry { - /* - ** @brief force update this page table entry - ** IMPORTANT! - ** This must be called after any change to ensure it become effective. - ** Usually this will make a flush to TLB/MMU. - ** @retval none - */ + /// Make all changes take effect. + /// + /// IMPORTANT! + /// This must be called after any change to ensure it become effective. + /// Usually it will cause a TLB/MMU flush. fn update(&mut self); - /* - ** @brief get the accessed bit of the entry - ** Will be set when accessed - ** @retval bool the accessed bit - */ + /// A bit set by hardware when the page is accessed fn accessed(&self) -> bool; - /* - ** @brief get the dirty bit of the entry - ** Will be set when written - ** @retval bool the dirty bit - */ + /// A bit set by hardware when the page is written fn dirty(&self) -> bool; - /* - ** @brief get the writable bit of the entry - ** Will PageFault when try to write page where writable=0 - ** @retval bool the writable bit - */ + /// Will PageFault when try to write page where writable=0 fn writable(&self) -> bool; - /* - ** @brief get the present bit of the entry - ** Will PageFault when try to access page where present=0 - ** @retval bool the present bit - */ + /// Will PageFault when try to access page where present=0 fn present(&self) -> bool; - - /* - ** @brief clear the accessed bit - ** @retval none - */ fn clear_accessed(&mut self); - /* - ** @brief clear the dirty bit - ** @retval none - */ fn clear_dirty(&mut self); - /* - ** @brief set value of writable bit - ** @param value: bool the writable bit value - ** @retval none - */ fn set_writable(&mut self, value: bool); - /* - ** @brief set value of present bit - ** @param value: bool the present bit value - ** @retval none - */ fn set_present(&mut self, value: bool); - /* - ** @brief get the target physics address in the entry - ** can be used for other purpose if present=0 - ** @retval target: PhysAddr the target physics address - */ + /// The target physics address in the entry + /// Can be used for other purpose if present=0 fn target(&self) -> PhysAddr; - /* - ** @brief set the target physics address in the entry - ** @param target: PhysAddr the target physics address - ** @retval none - */ fn set_target(&mut self, target: PhysAddr); - // For Copy-on-write extension - /* - ** @brief used for Copy-on-write extension - ** get the writable and shared bit - ** @retval value: bool the writable and shared bit - */ + // For Copy-on-write fn writable_shared(&self) -> bool; - /* - ** @brief used for Copy-on-write extension - ** get the readonly and shared bit - ** @retval value: bool the readonly and shared bit - */ fn readonly_shared(&self) -> bool; - /* - ** @brief used for Copy-on-write extension - ** mark the page as (writable or readonly) shared - ** @param writable: bool if it is true, set the page as writable and shared - ** else set the page as readonly and shared - ** @retval value: none - */ fn set_shared(&mut self, writable: bool); - /* - ** @brief used for Copy-on-write extension - ** mark the page as not shared - ** @retval value: none - */ fn clear_shared(&mut self); - // For Swap extension - /* - ** @brief used for Swap extension - ** get the swapped bit - ** @retval value: bool the swapped bit - */ + // For Swap fn swapped(&self) -> bool; - /* - ** @brief used for Swap extension - ** set the swapped bit - ** @param value: bool the swapped bit value - ** @retval none - */ fn set_swapped(&mut self, value: bool); - /* - ** @brief get the user bit of the entry - ** @retval bool the user bit - */ fn user(&self) -> bool; - /* - ** @brief set value of user bit - ** @param value: bool the user bit value - ** @retval none - */ fn set_user(&mut self, value: bool); - /* - ** @brief get the execute bit of the entry - ** @retval bool the execute bit - */ fn execute(&self) -> bool; - /* - ** @brief set value of user bit - ** @param value: bool the execute bit value - ** @retval none - */ fn set_execute(&mut self, value: bool); fn mmio(&self) -> bool; fn set_mmio(&mut self, value: bool); } + +/// An inactive page table +/// Note: InactivePageTable is not a PageTable +/// but it can be activated and "become" a PageTable +pub trait InactivePageTable: Sized { + /// the active version of page table + type Active: PageTable; + + /// Create a new page table with kernel memory mapped + fn new() -> Self { + let mut pt = Self::new_bare(); + pt.map_kernel(); + pt + } + + /// Create a new page table without kernel memory mapped + fn new_bare() -> Self; + + /// Map kernel segments + fn map_kernel(&mut self); + + /// CR3 on x86, SATP on RISCV, TTBR on AArch64 + fn token(&self) -> usize; + unsafe fn set_token(token: usize); + fn active_token() -> usize; + fn flush_tlb(); + + /// Make this page table editable + /// Set the recursive entry of current active page table to this + fn edit(&mut self, f: impl FnOnce(&mut Self::Active) -> T) -> T; + + /// Activate this page table + unsafe fn activate(&self) { + let old_token = Self::active_token(); + let new_token = self.token(); + debug!("switch table {:x?} -> {:x?}", old_token, new_token); + if old_token != new_token { + Self::set_token(new_token); + Self::flush_tlb(); + } + } + + /// Execute function `f` with this page table activated + unsafe fn with(&self, f: impl FnOnce() -> T) -> T { + let old_token = Self::active_token(); + let new_token = self.token(); + debug!("switch table {:x?} -> {:x?}", old_token, new_token); + if old_token != new_token { + Self::set_token(new_token); + Self::flush_tlb(); + } + let ret = f(); + debug!("switch table {:x?} -> {:x?}", new_token, old_token); + if old_token != new_token { + Self::set_token(old_token); + Self::flush_tlb(); + } + ret + } +} diff --git a/crate/memory/src/swap/mod.rs b/crate/memory/src/swap/mod.rs index 21a82593..14a027a1 100644 --- a/crate/memory/src/swap/mod.rs +++ b/crate/memory/src/swap/mod.rs @@ -8,7 +8,6 @@ use super::*; use super::paging::*; -use super::memory_set::InactivePageTable; use super::addr::Frame; use core::ops::{Deref, DerefMut}; diff --git a/kernel/src/arch/aarch64/paging.rs b/kernel/src/arch/aarch64/paging.rs index edbbd899..6542f79f 100644 --- a/kernel/src/arch/aarch64/paging.rs +++ b/kernel/src/arch/aarch64/paging.rs @@ -66,21 +66,10 @@ impl PageTable for ActivePageTable { let entry_addr = ((addr >> 9) & 0o777_777_777_7770) | (RECURSIVE_INDEX << 39); Some(unsafe { &mut *(entry_addr as *mut PageEntry) }) } - - fn get_page_slice_mut<'a, 'b>(&'a mut self, addr: usize) -> &'b mut [u8] { - use core::slice; - unsafe { slice::from_raw_parts_mut((addr & !0xfffusize) as *mut u8, PAGE_SIZE) } - } - - fn read(&mut self, addr: usize) -> u8 { - unsafe { *(addr as *const u8) } - } - - fn write(&mut self, addr: usize, data: u8) { - unsafe { *(addr as *mut u8) = data; } - } } +impl PageTableExt for ActivePageTable {} + const ROOT_PAGE_TABLE: *mut Aarch64PageTable = ((RECURSIVE_INDEX << 39) | (RECURSIVE_INDEX << 30) | (RECURSIVE_INDEX << 21) | (RECURSIVE_INDEX << 12)) as *mut Aarch64PageTable; @@ -88,19 +77,6 @@ impl ActivePageTable { pub unsafe fn new() -> Self { ActivePageTable(RecursivePageTable::new(&mut *(ROOT_PAGE_TABLE as *mut _)).unwrap()) } - fn with_temporary_map(&mut self, frame: &Frame, f: impl FnOnce(&mut ActivePageTable, &mut Aarch64PageTable) -> T) -> T { - // Create a temporary page - let page = Page::of_addr(0xcafebabe); - assert!(self.0.translate_page(page).is_none(), "temporary page is already mapped"); - // Map it to table - self.map(page.start_address().as_u64() as usize, frame.start_address().as_u64() as usize); - // Call f - let table = unsafe { &mut *page.start_address().as_mut_ptr() }; - let ret = f(self, table); - // Unmap the page - self.unmap(0xcafebabe); - ret - } } impl Entry for PageEntry { @@ -195,9 +171,9 @@ impl InactivePageTable for InactivePageTable0 { } fn new_bare() -> Self { - let frame = alloc_frame().map(|target| Frame::of_addr(target)) - .expect("failed to allocate frame"); - active_table().with_temporary_map(&frame, |_, table: &mut Aarch64PageTable| { + let target = alloc_frame().expect("failed to allocate frame"); + let frame = Frame::of_addr(target); + active_table().with_temporary_map(target, |_, table: &mut Aarch64PageTable| { table.zero(); // set up recursive mapping for the table table[RECURSIVE_INDEX].set_frame(frame.clone(), EF::default(), MairNormal::attr_value()); @@ -205,8 +181,35 @@ impl InactivePageTable for InactivePageTable0 { InactivePageTable0 { p4_frame: frame } } + fn map_kernel(&mut self) { + let table = unsafe { &mut *ROOT_PAGE_TABLE }; + let e0 = table[KERNEL_PML4].clone(); + assert!(!e0.is_unused()); + + self.edit(|_| { + table[KERNEL_PML4].set_frame(Frame::containing_address(e0.addr()), EF::default(), MairNormal::attr_value()); + }); + } + + fn token(&self) -> usize { + self.p4_frame.start_address().as_u64() as usize // as TTBRx_EL1 + } + + unsafe fn set_token(token: usize) { + ttbr_el1_write(1, Frame::containing_address(PhysAddr::new(token as u64))); + } + + fn active_token() -> usize { + ttbr_el1_read(1).start_address().as_u64() as usize + } + + fn flush_tlb() { + tlb_invalidate_all(); + } + fn edit(&mut self, f: impl FnOnce(&mut Self::Active) -> T) -> T { - active_table().with_temporary_map(&ttbr_el1_read(0), |active_table, p4_table: &mut Aarch64PageTable| { + let target = ttbr_el1_read(0).start_address().as_u64() as usize; + active_table().with_temporary_map(target, |active_table, p4_table: &mut Aarch64PageTable| { let backup = p4_table[RECURSIVE_INDEX].clone(); // overwrite recursive mapping @@ -222,51 +225,9 @@ impl InactivePageTable for InactivePageTable0 { ret }) } - - unsafe fn activate(&self) { - let old_frame = ttbr_el1_read(1); - let new_frame = self.p4_frame.clone(); - debug!("switch TTBR1 {:?} -> {:?}", old_frame, new_frame); - if old_frame != new_frame { - ttbr_el1_write(1, new_frame); - tlb_invalidate_all(); - } - } - - unsafe fn with(&self, f: impl FnOnce() -> T) -> T { - // Just need to switch the user TTBR - let old_frame = ttbr_el1_read(1); - let new_frame = self.p4_frame.clone(); - debug!("switch TTBR1 {:?} -> {:?}", old_frame, new_frame); - if old_frame != new_frame { - ttbr_el1_write(1, new_frame); - tlb_invalidate_all(); - } - let ret = f(); - debug!("switch TTBR1 {:?} -> {:?}", new_frame, old_frame); - if old_frame != new_frame { - ttbr_el1_write(1, old_frame); - tlb_invalidate_all(); - flush_icache_all(); - } - ret - } - - fn token(&self) -> usize { - self.p4_frame.start_address().as_u64() as usize // as TTBRx_EL1 - } } impl InactivePageTable0 { - fn map_kernel(&mut self) { - let table = unsafe { &mut *ROOT_PAGE_TABLE }; - let e0 = table[KERNEL_PML4].clone(); - assert!(!e0.is_unused()); - - self.edit(|_| { - table[KERNEL_PML4].set_frame(Frame::containing_address(e0.addr()), EF::default(), MairNormal::attr_value()); - }); - } /// Activate as kernel page table (TTBR0). /// Used in `arch::memory::remap_the_kernel()`. pub unsafe fn activate_as_kernel(&self) { diff --git a/kernel/src/arch/riscv32/paging.rs b/kernel/src/arch/riscv32/paging.rs index b043cf7c..795c384e 100644 --- a/kernel/src/arch/riscv32/paging.rs +++ b/kernel/src/arch/riscv32/paging.rs @@ -31,7 +31,6 @@ pub fn setup_page_table(frame: Frame) { p2.map_identity(KERNEL_P2_INDEX + 1, EF::VALID | EF::READABLE | EF::WRITABLE | EF::EXECUTABLE); p2.map_identity(KERNEL_P2_INDEX + 2, EF::VALID | EF::READABLE | EF::WRITABLE | EF::EXECUTABLE); - use riscv::register::satp; unsafe { satp::set(satp::Mode::Sv32, 0, frame); } sfence_vma_all(); info!("setup init page table end"); @@ -94,43 +93,10 @@ impl PageTable for ActivePageTable { let entry_addr = ((addr >> 10) & ((1 << 22) - 4)) | (RECURSIVE_INDEX << 22); unsafe { Some(&mut *(entry_addr as *mut PageEntry)) } } - - /* - * @param: - * addr:the input (virutal) address - * @brief: - * get the addr's memory page slice - * @retval: - * a mutable reference slice of 'addr' 's page - */ - fn get_page_slice_mut<'a, 'b>(&'a mut self, addr: usize) -> &'b mut [u8] { - use core::slice; - unsafe { slice::from_raw_parts_mut((addr & !(PAGE_SIZE - 1)) as *mut u8, PAGE_SIZE) } - } - - /* - * @param: - * addr: virtual address - * @brief: - * get the address's content - * @retval: - * the content(u8) of 'addr' - */ - fn read(&mut self, addr: usize) -> u8 { - unsafe { *(addr as *const u8) } - } - - /* - * @param: - * addr: virtual address - * @brief: - * write the address's content - */ - fn write(&mut self, addr: usize, data: u8) { - unsafe { *(addr as *mut u8) = data; } - } } +impl PageTableExt for ActivePageTable {} + // define the ROOT_PAGE_TABLE, and the virtual address of it? const ROOT_PAGE_TABLE: *mut RvPageTable = (((RECURSIVE_INDEX << 10) | (RECURSIVE_INDEX + 1)) << 12) as *mut RvPageTable; @@ -139,27 +105,6 @@ impl ActivePageTable { pub unsafe fn new() -> Self { ActivePageTable(RecursivePageTable::new(&mut *ROOT_PAGE_TABLE).unwrap()) } - - /* - * @param: - * frame: the target physical frame which will be temporarily mapped - * f: the function you would like to apply for once - * @brief: - * do something on the target physical frame? - */ - fn with_temporary_map(&mut self, frame: &Frame, f: impl FnOnce(&mut ActivePageTable, &mut RvPageTable) -> T) -> T { - // Create a temporary page - let page = Page::of_addr(VirtAddr::new(0xcafebabe)); - assert!(self.0.translate_page(page).is_none(), "temporary page is already mapped"); - // Map it to table - self.map(page.start_address().as_usize(), frame.start_address().as_u32() as usize); - // Call f - let table = unsafe { &mut *(page.start_address().as_usize() as *mut _) }; - let ret = f(self, table); - // Unmap the page - self.unmap(0xcafebabe); - ret - } } /// implementation for the Entry trait in /crate/memory/src/paging/mod.rs impl Entry for PageEntry { @@ -213,114 +158,16 @@ pub struct InactivePageTable0 { impl InactivePageTable for InactivePageTable0 { type Active = ActivePageTable; - /* - * @brief: - * get a new pagetable (for a new process or thread) - * @retbal: - * the new pagetable - */ - fn new() -> Self { - let mut pt = Self::new_bare(); - pt.map_kernel(); - pt - } - - /* - * @brief: - * allocate a new frame and then self-mapping it and regard it as the inactivepagetale - * retval: - * the inactive page table - */ fn new_bare() -> Self { - let frame = alloc_frame().map(|target| Frame::of_addr(PhysAddr::new(target as u32))) - .expect("failed to allocate frame"); - active_table().with_temporary_map(&frame, |_, table: &mut RvPageTable| { + let target = alloc_frame().expect("failed to allocate frame"); + let frame = Frame::of_addr(PhysAddr::new(target as u32)); + active_table().with_temporary_map(target, |_, table: &mut RvPageTable| { table.zero(); table.set_recursive(RECURSIVE_INDEX, frame.clone()); }); InactivePageTable0 { p2_frame: frame } } - /* - * @param: - * f: a function to do something with the temporary modified activate page table - * @brief: - * temporarily map the inactive pagetable as an active p2page and apply f on the temporary modified active page table - */ - fn edit(&mut self, f: impl FnOnce(&mut Self::Active) -> T) -> T { - active_table().with_temporary_map(&satp::read().frame(), |active_table, p2_table: &mut RvPageTable| { - let backup = p2_table[RECURSIVE_INDEX].clone(); - - // overwrite recursive mapping - p2_table[RECURSIVE_INDEX].set(self.p2_frame.clone(), EF::VALID); - sfence_vma_all(); - - // execute f in the new context - let ret = f(active_table); - - // restore recursive mapping to original p2 table - p2_table[RECURSIVE_INDEX] = backup; - sfence_vma_all(); - - ret - }) - } - - /* - * @brief: - * active self as the current active page table - */ - unsafe fn activate(&self) { - let old_frame = satp::read().frame(); - let new_frame = self.p2_frame.clone(); - debug!("switch table {:x?} -> {:x?}", old_frame, new_frame); - if old_frame != new_frame { - satp::set(satp::Mode::Sv32, 0, new_frame); - sfence_vma_all(); - } - } - - /* - * @param: - * f: the function to run when temporarily activate self as current page table - * @brief: - * Temporarily activate self and run the process, and return the return value of f - * @retval: - * the return value of f - */ - unsafe fn with(&self, f: impl FnOnce() -> T) -> T { - let old_frame = satp::read().frame(); - let new_frame = self.p2_frame.clone(); - debug!("switch table {:x?} -> {:x?}", old_frame, new_frame); - if old_frame != new_frame { - satp::set(satp::Mode::Sv32, 0, new_frame); - sfence_vma_all(); - } - let target = f(); - debug!("switch table {:x?} -> {:x?}", new_frame, old_frame); - if old_frame != new_frame { - satp::set(satp::Mode::Sv32, 0, old_frame); - sfence_vma_all(); - } - target - } - - /* - * @brief: - * get the token of self, the token is self's pagetable frame's starting physical address - * @retval: - * self token - */ - fn token(&self) -> usize { - self.p2_frame.number() | (1 << 31) // as satp - } -} - -impl InactivePageTable0 { - /* - * @brief: - * map the kernel code memory address (p2 page table) in the new inactive page table according the current active page table - */ fn map_kernel(&mut self) { let table = unsafe { &mut *ROOT_PAGE_TABLE }; let e0 = table[0x40]; @@ -338,6 +185,42 @@ impl InactivePageTable0 { table[KERNEL_P2_INDEX + 2].set(e3.frame(), EF::VALID | EF::GLOBAL); }); } + + fn token(&self) -> usize { + self.p2_frame.number() | (1 << 31) // as satp + } + + unsafe fn set_token(token: usize) { + asm!("csrw 0x180, $0" :: "r"(token) :: "volatile"); + } + + fn active_token() -> usize { + satp::read().bits() + } + + fn flush_tlb() { + sfence_vma_all(); + } + + fn edit(&mut self, f: impl FnOnce(&mut Self::Active) -> T) -> T { + let target = satp::read().frame().start_address().as_u32() as usize; + active_table().with_temporary_map(target, |active_table, p2_table: &mut RvPageTable| { + let backup = p2_table[RECURSIVE_INDEX].clone(); + + // overwrite recursive mapping + p2_table[RECURSIVE_INDEX].set(self.p2_frame.clone(), EF::VALID); + sfence_vma_all(); + + // execute f in the new context + let ret = f(active_table); + + // restore recursive mapping to original p2 table + p2_table[RECURSIVE_INDEX] = backup; + sfence_vma_all(); + + ret + }) + } } impl Drop for InactivePageTable0 { diff --git a/kernel/src/arch/x86_64/paging.rs b/kernel/src/arch/x86_64/paging.rs index 37a64194..76c89e43 100644 --- a/kernel/src/arch/x86_64/paging.rs +++ b/kernel/src/arch/x86_64/paging.rs @@ -62,38 +62,14 @@ impl PageTable for ActivePageTable { } unsafe { Some(&mut *(get_entry_ptr(addr, 1))) } } - - fn get_page_slice_mut<'a, 'b>(&'a mut self, addr: usize) -> &'b mut [u8] { - use core::slice; - unsafe { slice::from_raw_parts_mut((addr & !0xfffusize) as *mut u8, PAGE_SIZE) } - } - - fn read(&mut self, addr: usize) -> u8 { - unsafe { *(addr as *const u8) } - } - - fn write(&mut self, addr: usize, data: u8) { - unsafe { *(addr as *mut u8) = data; } - } } +impl PageTableExt for ActivePageTable {} + impl ActivePageTable { pub unsafe fn new() -> Self { ActivePageTable(RecursivePageTable::new(&mut *(0xffffffff_fffff000 as *mut _)).unwrap()) } - fn with_temporary_map(&mut self, frame: &Frame, f: impl FnOnce(&mut ActivePageTable, &mut x86PageTable) -> T) -> T { - // Create a temporary page - let page = Page::of_addr(0xcafebabe); - assert!(self.0.translate_page(page).is_none(), "temporary page is already mapped"); - // Map it to table - self.map(page.start_address().as_u64() as usize, frame.start_address().as_u64() as usize); - // Call f - let table = unsafe { &mut *page.start_address().as_mut_ptr() }; - let ret = f(self, table); - // Unmap the page - self.unmap(0xcafebabe); - ret - } } impl Entry for PageEntry { @@ -164,16 +140,10 @@ pub struct InactivePageTable0 { impl InactivePageTable for InactivePageTable0 { type Active = ActivePageTable; - fn new() -> Self { - let mut pt = Self::new_bare(); - pt.map_kernel(); - pt - } - fn new_bare() -> Self { - let frame = alloc_frame().map(|target| Frame::of_addr(target)) - .expect("failed to allocate frame"); - active_table().with_temporary_map(&frame, |_, table: &mut x86PageTable| { + let target = alloc_frame().expect("failed to allocate frame"); + let frame = Frame::of_addr(target); + active_table().with_temporary_map(target, |_, table: &mut x86PageTable| { table.zero(); // set up recursive mapping for the table table[511].set_frame(frame.clone(), EF::PRESENT | EF::WRITABLE); @@ -181,8 +151,37 @@ impl InactivePageTable for InactivePageTable0 { InactivePageTable0 { p4_frame: frame } } + fn map_kernel(&mut self) { + let mut table = unsafe { &mut *(0xffffffff_fffff000 as *mut x86PageTable) }; + // Kernel at 0xffff_ff00_0000_0000 + // Kernel stack at 0x0000_57ac_0000_0000 (defined in bootloader crate) + let e510 = table[510].clone(); + let estack = table[175].clone(); + self.edit(|_| { + table[510].set_addr(e510.addr(), e510.flags() | EF::GLOBAL); + table[175].set_addr(estack.addr(), estack.flags() | EF::GLOBAL); + }); + } + + fn token(&self) -> usize { + self.p4_frame.start_address().as_u64() as usize // as CR3 + } + + unsafe fn set_token(token: usize) { + Cr3::write(Frame::containing_address(PhysAddr::new(token as u64)), Cr3Flags::empty()); + } + + fn active_token() -> usize { + Cr3::read().0.start_address().as_u64() as usize + } + + fn flush_tlb() { + tlb::flush_all(); + } + fn edit(&mut self, f: impl FnOnce(&mut Self::Active) -> T) -> T { - active_table().with_temporary_map(&Cr3::read().0, |active_table, p4_table: &mut x86PageTable| { + let target = Cr3::read().0.start_address().as_u64() as usize; + active_table().with_temporary_map(target, |active_table, p4_table: &mut x86PageTable| { let backup = p4_table[0o777].clone(); // overwrite recursive mapping @@ -198,48 +197,6 @@ impl InactivePageTable for InactivePageTable0 { ret }) } - - unsafe fn activate(&self) { - let old_frame = Cr3::read().0; - let new_frame = self.p4_frame.clone(); - debug!("switch table {:?} -> {:?}", old_frame, new_frame); - if old_frame != new_frame { - Cr3::write(new_frame, Cr3Flags::empty()); - } - } - - unsafe fn with(&self, f: impl FnOnce() -> T) -> T { - let old_frame = Cr3::read().0; - let new_frame = self.p4_frame.clone(); - debug!("switch table {:?} -> {:?}", old_frame, new_frame); - if old_frame != new_frame { - Cr3::write(new_frame, Cr3Flags::empty()); - } - let ret = f(); - debug!("switch table {:?} -> {:?}", new_frame, old_frame); - if old_frame != new_frame { - Cr3::write(old_frame, Cr3Flags::empty()); - } - ret - } - - fn token(&self) -> usize { - self.p4_frame.start_address().as_u64() as usize // as CR3 - } -} - -impl InactivePageTable0 { - fn map_kernel(&mut self) { - let mut table = unsafe { &mut *(0xffffffff_fffff000 as *mut x86PageTable) }; - // Kernel at 0xffff_ff00_0000_0000 - // Kernel stack at 0x0000_57ac_0000_0000 (defined in bootloader crate) - let e510 = table[510].clone(); - let estack = table[175].clone(); - self.edit(|_| { - table[510].set_addr(e510.addr(), e510.flags() | EF::GLOBAL); - table[175].set_addr(estack.addr(), estack.flags() | EF::GLOBAL); - }); - } } impl Drop for InactivePageTable0 { diff --git a/kernel/src/memory.rs b/kernel/src/memory.rs index b429e66e..7e598f7b 100644 --- a/kernel/src/memory.rs +++ b/kernel/src/memory.rs @@ -4,7 +4,7 @@ use crate::consts::MEMORY_OFFSET; use super::HEAP_ALLOCATOR; use ucore_memory::{*, paging::PageTable}; use ucore_memory::cow::CowExt; -pub use ucore_memory::memory_set::{MemoryArea, MemoryAttr, InactivePageTable, handler::*}; +pub use ucore_memory::memory_set::{MemoryArea, MemoryAttr, handler::*}; use ucore_memory::swap::*; use crate::process::{process}; use crate::sync::{SpinNoIrqLock, SpinNoIrq, MutexGuard}; From 704af9421177da6beb8f097480d47f7606f8e3a0 Mon Sep 17 00:00:00 2001 From: WangRunji Date: Fri, 14 Dec 2018 02:25:30 +0800 Subject: [PATCH 4/9] fix rv32 entry editing --- kernel/src/arch/riscv32/paging.rs | 72 ++++++++++++++++--------------- 1 file changed, 38 insertions(+), 34 deletions(-) diff --git a/kernel/src/arch/riscv32/paging.rs b/kernel/src/arch/riscv32/paging.rs index 795c384e..0d86c293 100644 --- a/kernel/src/arch/riscv32/paging.rs +++ b/kernel/src/arch/riscv32/paging.rs @@ -36,9 +36,9 @@ pub fn setup_page_table(frame: Frame) { info!("setup init page table end"); } -pub struct ActivePageTable(RecursivePageTable<'static>); +pub struct ActivePageTable(RecursivePageTable<'static>, PageEntry); -pub struct PageEntry(PageTableEntry); +pub struct PageEntry(PageTableEntry, Page); impl PageTable for ActivePageTable { /* @@ -84,17 +84,27 @@ impl PageTable for ActivePageTable { * a mutable PageEntry reference of 'addr' */ fn get_entry(&mut self, addr: usize) -> Option<&mut Entry> { - if unsafe { !(*ROOT_PAGE_TABLE)[addr >> 22].flags().contains(EF::VALID) } { + let p2 = unsafe { ROOT_PAGE_TABLE.as_mut().unwrap() }; + let page = Page::of_addr(VirtAddr::new(addr)); + if !p2[page.p2_index()].flags().contains(EF::VALID) { return None; } - let page = Page::of_addr(VirtAddr::new(addr)); - // ??? - let _ = self.0.translate_page(page); - let entry_addr = ((addr >> 10) & ((1 << 22) - 4)) | (RECURSIVE_INDEX << 22); - unsafe { Some(&mut *(entry_addr as *mut PageEntry)) } + let entry = edit_entry_of(&page, |entry| *entry); + self.1 = PageEntry(entry, page); + Some(&mut self.1) } } +fn edit_entry_of(page: &Page, f: impl FnOnce(&mut PageTableEntry) -> T) -> T { + let p2_flags = unsafe { (*ROOT_PAGE_TABLE)[page.p2_index()].flags_mut() }; + p2_flags.insert(EF::READABLE | EF::WRITABLE); + let entry_addr = (RECURSIVE_INDEX << 22) | (page.p2_index() << 12) | (page.p1_index() << 2); + let entry = unsafe { &mut *(entry_addr as *mut PageTableEntry) }; + let ret = f(entry); + p2_flags.remove(EF::READABLE | EF::WRITABLE); + ret +} + impl PageTableExt for ActivePageTable {} // define the ROOT_PAGE_TABLE, and the virtual address of it? @@ -103,23 +113,26 @@ const ROOT_PAGE_TABLE: *mut RvPageTable = impl ActivePageTable { pub unsafe fn new() -> Self { - ActivePageTable(RecursivePageTable::new(&mut *ROOT_PAGE_TABLE).unwrap()) + ActivePageTable( + RecursivePageTable::new(&mut *ROOT_PAGE_TABLE).unwrap(), + ::core::mem::zeroed() + ) } } /// implementation for the Entry trait in /crate/memory/src/paging/mod.rs impl Entry for PageEntry { fn update(&mut self) { - let addr = VirtAddr::new((self as *const _ as usize) << 10); - sfence_vma(0, addr); + edit_entry_of(&self.1, |entry| *entry = self.0); + sfence_vma(0, self.1.start_address()); } fn accessed(&self) -> bool { self.0.flags().contains(EF::ACCESSED) } fn dirty(&self) -> bool { self.0.flags().contains(EF::DIRTY) } fn writable(&self) -> bool { self.0.flags().contains(EF::WRITABLE) } fn present(&self) -> bool { self.0.flags().contains(EF::VALID | EF::READABLE) } - fn clear_accessed(&mut self) { self.as_flags().remove(EF::ACCESSED); } - fn clear_dirty(&mut self) { self.as_flags().remove(EF::DIRTY); } - fn set_writable(&mut self, value: bool) { self.as_flags().set(EF::WRITABLE, value); } - fn set_present(&mut self, value: bool) { self.as_flags().set(EF::VALID | EF::READABLE, value); } + fn clear_accessed(&mut self) { self.0.flags_mut().remove(EF::ACCESSED); } + fn clear_dirty(&mut self) { self.0.flags_mut().remove(EF::DIRTY); } + fn set_writable(&mut self, value: bool) { self.0.flags_mut().set(EF::WRITABLE, value); } + fn set_present(&mut self, value: bool) { self.0.flags_mut().set(EF::VALID | EF::READABLE, value); } fn target(&self) -> usize { self.0.addr().as_u32() as usize } fn set_target(&mut self, target: usize) { let flags = self.0.flags(); @@ -129,25 +142,19 @@ impl Entry for PageEntry { fn writable_shared(&self) -> bool { self.0.flags().contains(EF::RESERVED1) } fn readonly_shared(&self) -> bool { self.0.flags().contains(EF::RESERVED2) } fn set_shared(&mut self, writable: bool) { - let flags = self.as_flags(); + let flags = self.0.flags_mut(); flags.set(EF::RESERVED1, writable); flags.set(EF::RESERVED2, !writable); } - fn clear_shared(&mut self) { self.as_flags().remove(EF::RESERVED1 | EF::RESERVED2); } + fn clear_shared(&mut self) { self.0.flags_mut().remove(EF::RESERVED1 | EF::RESERVED2); } fn swapped(&self) -> bool { self.0.flags().contains(EF::RESERVED1) } - fn set_swapped(&mut self, value: bool) { self.as_flags().set(EF::RESERVED1, value); } + fn set_swapped(&mut self, value: bool) { self.0.flags_mut().set(EF::RESERVED1, value); } fn user(&self) -> bool { self.0.flags().contains(EF::USER) } - fn set_user(&mut self, value: bool) { self.as_flags().set(EF::USER, value); } + fn set_user(&mut self, value: bool) { self.0.flags_mut().set(EF::USER, value); } fn execute(&self) -> bool { self.0.flags().contains(EF::EXECUTABLE) } - fn set_execute(&mut self, value: bool) { self.as_flags().set(EF::EXECUTABLE, value); } - fn mmio(&self) -> bool { unimplemented!() } - fn set_mmio(&mut self, value: bool) { unimplemented!() } -} - -impl PageEntry { - fn as_flags(&mut self) -> &mut EF { - unsafe { &mut *(self as *mut _ as *mut EF) } - } + fn set_execute(&mut self, value: bool) { self.0.flags_mut().set(EF::EXECUTABLE, value); } + fn mmio(&self) -> bool { false } + fn set_mmio(&mut self, value: bool) { } } #[derive(Debug)] @@ -174,15 +181,12 @@ impl InactivePageTable for InactivePageTable0 { let e1 = table[KERNEL_P2_INDEX]; let e2 = table[KERNEL_P2_INDEX + 1]; let e3 = table[KERNEL_P2_INDEX + 2]; - assert!(!e1.is_unused()); - assert!(!e2.is_unused()); - assert!(!e3.is_unused()); self.edit(|_| { table[0x40] = e0; - table[KERNEL_P2_INDEX].set(e1.frame(), EF::VALID | EF::GLOBAL); - table[KERNEL_P2_INDEX + 1].set(e2.frame(), EF::VALID | EF::GLOBAL); - table[KERNEL_P2_INDEX + 2].set(e3.frame(), EF::VALID | EF::GLOBAL); + table[KERNEL_P2_INDEX] = e1; + table[KERNEL_P2_INDEX + 1] = e2; + table[KERNEL_P2_INDEX + 2] = e3; }); } From 557f021c087224159ef94ebd2d88a70bfc3c6817 Mon Sep 17 00:00:00 2001 From: WangRunji Date: Fri, 14 Dec 2018 02:26:37 +0800 Subject: [PATCH 5/9] fix DelayHandler & MemoryAttr --- crate/memory/src/memory_set/handler/delay.rs | 5 ++--- crate/memory/src/memory_set/mod.rs | 23 ++++++-------------- kernel/src/arch/x86_64/paging.rs | 4 ++-- 3 files changed, 11 insertions(+), 21 deletions(-) diff --git a/crate/memory/src/memory_set/handler/delay.rs b/crate/memory/src/memory_set/handler/delay.rs index af3003f7..1a424a78 100644 --- a/crate/memory/src/memory_set/handler/delay.rs +++ b/crate/memory/src/memory_set/handler/delay.rs @@ -21,8 +21,8 @@ impl MemoryHandler for Delay { let entry = pt.get_entry(addr).expect("failed to get entry"); if entry.present() { self.allocator.dealloc(entry.target()); + pt.unmap(addr); } - pt.unmap(addr); } fn page_fault_handler(&self, pt: &mut PageTable, addr: VirtAddr) -> bool { @@ -33,8 +33,7 @@ impl MemoryHandler for Delay { } let frame = self.allocator.alloc().expect("failed to alloc frame"); entry.set_target(frame); - entry.set_present(true); - entry.update(); + self.flags.apply(entry); true } } diff --git a/crate/memory/src/memory_set/mod.rs b/crate/memory/src/memory_set/mod.rs index c4741511..5582aaed 100644 --- a/crate/memory/src/memory_set/mod.rs +++ b/crate/memory/src/memory_set/mod.rs @@ -83,7 +83,6 @@ pub struct MemoryAttr { readonly: bool, execute: bool, mmio: bool, - hide: bool, } impl MemoryAttr { @@ -116,26 +115,18 @@ impl MemoryAttr { self } /* - ** @brief set the memory attribute's hide bit - ** @retval MemoryAttr the memory attribute itself - */ - pub fn hide(mut self) -> Self { - self.hide = true; - self - } - /* ** @brief apply the memory attribute to a page table entry ** @param entry: &mut impl Entry ** the page table entry to apply the attribute ** @retval none */ - fn apply(&self, entry: &mut Entry) { - if self.user { entry.set_user(true); } - if self.readonly { entry.set_writable(false); } - if self.execute { entry.set_execute(true); } - if self.mmio { entry.set_mmio(true); } - if self.hide { entry.set_present(false); } - if self.user || self.readonly || self.execute || self.mmio || self.hide { entry.update(); } + pub fn apply(&self, entry: &mut Entry) { + entry.set_present(true); + entry.set_user(self.user); + entry.set_writable(!self.readonly); + entry.set_execute(self.execute); + entry.set_mmio(self.mmio); + entry.update(); } } diff --git a/kernel/src/arch/x86_64/paging.rs b/kernel/src/arch/x86_64/paging.rs index 76c89e43..0ae779d8 100644 --- a/kernel/src/arch/x86_64/paging.rs +++ b/kernel/src/arch/x86_64/paging.rs @@ -116,8 +116,8 @@ impl Entry for PageEntry { } fn execute(&self) -> bool { !self.0.flags().contains(EF::NO_EXECUTE) } fn set_execute(&mut self, value: bool) { self.as_flags().set(EF::NO_EXECUTE, !value); } - fn mmio(&self) -> bool { unimplemented!() } - fn set_mmio(&mut self, value: bool) { unimplemented!() } + fn mmio(&self) -> bool { false } + fn set_mmio(&mut self, value: bool) { } } fn get_entry_ptr(addr: usize, level: u8) -> *mut PageEntry { From 6952f008e0105d363b077443a2437ba0fbfe5789 Mon Sep 17 00:00:00 2001 From: WangRunji Date: Fri, 14 Dec 2018 02:37:51 +0800 Subject: [PATCH 6/9] rename ContextImpl to Process --- kernel/src/process/context.rs | 46 +++++++++++++++-------------------- kernel/src/process/mod.rs | 14 ++++++----- kernel/src/shell.rs | 6 ++--- kernel/src/syscall.rs | 2 +- 4 files changed, 31 insertions(+), 37 deletions(-) diff --git a/kernel/src/process/context.rs b/kernel/src/process/context.rs index 34cc0d7a..c115bdf9 100644 --- a/kernel/src/process/context.rs +++ b/kernel/src/process/context.rs @@ -1,18 +1,16 @@ -use crate::arch::interrupt::{TrapFrame, Context as ArchContext}; -use crate::memory::{MemoryArea, MemoryAttr, MemorySet, KernelStack, InactivePageTable0, GlobalFrameAlloc, FrameAllocator}; -use xmas_elf::{ElfFile, header, program::{Flags, ProgramHeader, Type, SegmentData}}; -use core::fmt::{Debug, Error, Formatter}; -use alloc::{boxed::Box, collections::BTreeMap, vec::Vec, sync::Arc, string::String}; -use ucore_memory::{Page}; -use ucore_memory::memory_set::*; -use ucore_process::Context; +use alloc::{boxed::Box, collections::BTreeMap, string::String, sync::Arc, vec::Vec}; + +use log::*; use simple_filesystem::file::File; use spin::Mutex; -use log::*; +use ucore_process::Context; +use xmas_elf::{ElfFile, header, program::{Flags, ProgramHeader, SegmentData, Type}}; +use crate::arch::interrupt::{Context as ArchContext, TrapFrame}; +use crate::memory::{ByFrame, Delay, FrameAllocator, GlobalFrameAlloc, KernelStack, MemoryArea, MemoryAttr, MemorySet}; // TODO: avoid pub -pub struct ContextImpl { +pub struct Process { pub arch: ArchContext, pub memory_set: MemorySet, pub kstack: KernelStack, @@ -20,17 +18,17 @@ pub struct ContextImpl { pub cwd: String, } -impl Context for ContextImpl { +impl Context for Process { unsafe fn switch_to(&mut self, target: &mut Context) { use core::mem::transmute; - let (target, _): (&mut ContextImpl, *const ()) = transmute(target); + let (target, _): (&mut Process, *const ()) = transmute(target); self.arch.switch(&mut target.arch); } } -impl ContextImpl { +impl Process { pub unsafe fn new_init() -> Box { - Box::new(ContextImpl { + Box::new(Process { arch: ArchContext::null(), memory_set: MemorySet::new(), kstack: KernelStack::new(), @@ -42,7 +40,7 @@ impl ContextImpl { pub fn new_kernel(entry: extern fn(usize) -> !, arg: usize) -> Box { let memory_set = MemorySet::new(); let kstack = KernelStack::new(); - Box::new(ContextImpl { + Box::new(Process { arch: unsafe { ArchContext::new_kernel_thread(entry, arg, kstack.top(), memory_set.token()) }, memory_set, kstack, @@ -52,7 +50,7 @@ impl ContextImpl { } /// Make a new user thread from ELF data - pub fn new_user<'a, Iter>(data: &[u8], args: Iter) -> Box + pub fn new_user<'a, Iter>(data: &[u8], args: Iter) -> Box where Iter: Iterator { // Parse elf @@ -82,7 +80,7 @@ impl ContextImpl { true => (USER32_STACK_OFFSET, USER32_STACK_OFFSET + USER_STACK_SIZE), false => (USER_STACK_OFFSET, USER_STACK_OFFSET + USER_STACK_SIZE), }; - memory_set.push(ustack_buttom, ustack_top, handler::ByFrame::new(MemoryAttr::default().user(), GlobalFrameAlloc), "user_stack"); + memory_set.push(ustack_buttom, ustack_top, ByFrame::new(MemoryAttr::default().user(), GlobalFrameAlloc), "user_stack"); ustack_top }; #[cfg(feature = "no_mmu")] @@ -96,7 +94,7 @@ impl ContextImpl { let kstack = KernelStack::new(); - Box::new(ContextImpl { + Box::new(Process { arch: unsafe { ArchContext::new_user_thread( entry_addr, ustack_top, kstack.top(), is32, memory_set.token()) @@ -128,7 +126,7 @@ impl ContextImpl { info!("temporary copy data!"); let kstack = KernelStack::new(); - Box::new(ContextImpl { + Box::new(Process { arch: unsafe { ArchContext::new_fork(tf, kstack.top(), memory_set.token()) }, memory_set, kstack, @@ -138,12 +136,6 @@ impl ContextImpl { } } -impl Debug for ContextImpl { - fn fmt(&self, f: &mut Formatter) -> Result<(), Error> { - write!(f, "{:x?}", self.arch) - } -} - /// Push a slice at the stack. Return the new sp. unsafe fn push_slice(mut sp: usize, vs: &[T]) -> usize { use core::{mem::{size_of, align_of}, slice}; @@ -173,7 +165,7 @@ unsafe fn push_args_at_stack<'a, Iter>(args: Iter, stack_top: usize) -> usize /// Generate a MemorySet according to the ELF file. /// Also return the real entry point address. -fn memory_set_from<'a>(elf: &'a ElfFile<'a>) -> (MemorySet, usize) { +fn memory_set_from(elf: &ElfFile<'_>) -> (MemorySet, usize) { debug!("come in to memory_set_from"); let mut ms = MemorySet::new(); let mut entry = None; @@ -194,7 +186,7 @@ fn memory_set_from<'a>(elf: &'a ElfFile<'a>) -> (MemorySet, usize) { let target = ms.push(mem_size); #[cfg(not(feature = "no_mmu"))] let target = { - ms.push(virt_addr, virt_addr + mem_size, handler::ByFrame::new(memory_attr_from(ph.flags()), GlobalFrameAlloc), ""); + ms.push(virt_addr, virt_addr + mem_size, ByFrame::new(memory_attr_from(ph.flags()), GlobalFrameAlloc), ""); unsafe { ::core::slice::from_raw_parts_mut(virt_addr as *mut u8, mem_size) } }; // Copy data diff --git a/kernel/src/process/mod.rs b/kernel/src/process/mod.rs index a9a3f390..64bf00a0 100644 --- a/kernel/src/process/mod.rs +++ b/kernel/src/process/mod.rs @@ -1,5 +1,5 @@ use spin::Mutex; -pub use self::context::ContextImpl; +pub use self::context::Process; pub use ucore_process::*; use crate::consts::{MAX_CPU_NUM, MAX_PROCESS_NUM}; use crate::arch::cpu; @@ -17,7 +17,7 @@ pub fn init() { unsafe { for cpu_id in 0..MAX_CPU_NUM { - PROCESSORS[cpu_id].init(cpu_id, ContextImpl::new_init(), manager.clone()); + PROCESSORS[cpu_id].init(cpu_id, Process::new_init(), manager.clone()); } } @@ -25,7 +25,7 @@ pub fn init() { loop { cpu::halt(); } } for i in 0..4 { - manager.add(ContextImpl::new_kernel(idle, i), 0); + manager.add(Process::new_kernel(idle, i), 0); } crate::shell::run_user_shell(); @@ -35,9 +35,11 @@ pub fn init() { static PROCESSORS: [Processor; MAX_CPU_NUM] = [Processor::new(), Processor::new(), Processor::new(), Processor::new(), Processor::new(), Processor::new(), Processor::new(), Processor::new()]; /// Get current thread struct -pub fn process() -> &'static mut ContextImpl { +/// +/// FIXME: It's obviously unsafe to get &mut ! +pub fn process() -> &'static mut Process { use core::mem::transmute; - let (process, _): (&mut ContextImpl, *const ()) = unsafe { + let (process, _): (&mut Process, *const ()) = unsafe { transmute(processor().context()) }; process @@ -53,5 +55,5 @@ pub fn processor() -> &'static Processor { #[no_mangle] pub fn new_kernel_context(entry: extern fn(usize) -> !, arg: usize) -> Box { - ContextImpl::new_kernel(entry, arg) + Process::new_kernel(entry, arg) } diff --git a/kernel/src/shell.rs b/kernel/src/shell.rs index b8443f38..cef7ca62 100644 --- a/kernel/src/shell.rs +++ b/kernel/src/shell.rs @@ -8,9 +8,9 @@ use crate::process::*; pub fn run_user_shell() { if let Ok(inode) = ROOT_INODE.lookup("sh") { let data = inode.read_as_vec().unwrap(); - processor().manager().add(ContextImpl::new_user(data.as_slice(), "sh".split(' ')), 0); + processor().manager().add(Process::new_user(data.as_slice(), "sh".split(' ')), 0); } else { - processor().manager().add(ContextImpl::new_kernel(shell, 0), 0); + processor().manager().add(Process::new_kernel(shell, 0), 0); } } @@ -27,7 +27,7 @@ pub extern fn shell(_arg: usize) -> ! { let name = cmd.split(' ').next().unwrap(); if let Ok(file) = ROOT_INODE.lookup(name) { let data = file.read_as_vec().unwrap(); - let pid = processor().manager().add(ContextImpl::new_user(data.as_slice(), cmd.split(' ')), thread::current().id()); + let pid = processor().manager().add(Process::new_user(data.as_slice(), cmd.split(' ')), thread::current().id()); unsafe { thread::JoinHandle::<()>::_of(pid) }.join().unwrap(); } else { println!("Program not exist"); diff --git a/kernel/src/syscall.rs b/kernel/src/syscall.rs index 4935c298..2a7ffdf1 100644 --- a/kernel/src/syscall.rs +++ b/kernel/src/syscall.rs @@ -208,7 +208,7 @@ fn sys_exec(name: *const u8, argc: usize, argv: *const *const u8, tf: &mut TrapF // Make new Context let iter = args.iter().map(|s| s.as_str()); - let mut context = ContextImpl::new_user(buf.as_slice(), iter); + let mut context = Process::new_user(buf.as_slice(), iter); // Activate new page table unsafe { context.memory_set.activate(); } From fbf59396b25af6961804add45a91f7c04d297c7f Mon Sep 17 00:00:00 2001 From: WangRunji Date: Sat, 15 Dec 2018 20:04:22 +0800 Subject: [PATCH 7/9] use 'ucore_*.img' by default --- kernel/Makefile | 16 ++++++---------- user/img/{ucore-rv32.img => ucore-riscv32.img} | Bin 2 files changed, 6 insertions(+), 10 deletions(-) rename user/img/{ucore-rv32.img => ucore-riscv32.img} (100%) diff --git a/kernel/Makefile b/kernel/Makefile index 87668a4a..ea52c554 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -31,14 +31,15 @@ target := $(arch)-blog_os kernel := target/$(target)/$(mode)/ucore bin := target/$(target)/$(mode)/kernel.bin bootimage := target/$(target)/bootimage.bin - user_dir := ../user -user_bin_path := $(user_dir)/target/$(arch)-ucore/debug -user_bins := $(patsubst $(user_bin_path)/%.d, $(user_bin_path)/%, $(wildcard $(user_bin_path)/*.d)) -user_obj := build/$(arch)/user.o export ARCH = $(arch) -export SFSIMG = $(user_dir)/build/user-$(arch).img +#export SFSIMG = $(user_dir)/build/user-$(arch).img +ifeq ($(arch), x86_64) +export SFSIMG = $(user_dir)/img/ucore-i386.img +else +export SFSIMG = $(user_dir)/img/ucore-$(arch).img +endif ### qemu options ### qemu_opts := \ @@ -186,11 +187,6 @@ endif sfsimg: @cd $(user_dir) && make sfsimg -# make user.o from binary files -$(user_obj): $(user_bins) - @cd $(user_bin_path) && \ - $(ld) -o $(abspath $@) $(patsubst %, -b binary %, $(notdir $(user_bins))) - ### install ### ifeq ($(board), raspi3) diff --git a/user/img/ucore-rv32.img b/user/img/ucore-riscv32.img similarity index 100% rename from user/img/ucore-rv32.img rename to user/img/ucore-riscv32.img From d20d22b85bfcce4eea87dd2fe70e53e1671773f5 Mon Sep 17 00:00:00 2001 From: WangRunji Date: Sat, 15 Dec 2018 20:17:02 +0800 Subject: [PATCH 8/9] add hint for user shell. detect cores through 'SMP' env. --- kernel/Makefile | 1 + kernel/src/process/mod.rs | 5 ++++- kernel/src/shell.rs | 2 ++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/kernel/Makefile b/kernel/Makefile index ea52c554..cc60d885 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -34,6 +34,7 @@ bootimage := target/$(target)/bootimage.bin user_dir := ../user export ARCH = $(arch) +export SMP = $(smp) #export SFSIMG = $(user_dir)/build/user-$(arch).img ifeq ($(arch), x86_64) export SFSIMG = $(user_dir)/img/ucore-i386.img diff --git a/kernel/src/process/mod.rs b/kernel/src/process/mod.rs index 64bf00a0..790e4ced 100644 --- a/kernel/src/process/mod.rs +++ b/kernel/src/process/mod.rs @@ -21,10 +21,13 @@ pub fn init() { } } + // Add idle threads extern fn idle(_arg: usize) -> ! { loop { cpu::halt(); } } - for i in 0..4 { + use core::str::FromStr; + let cores = usize::from_str(env!("SMP")).unwrap(); + for i in 0..cores { manager.add(Process::new_kernel(idle, i), 0); } crate::shell::run_user_shell(); diff --git a/kernel/src/shell.rs b/kernel/src/shell.rs index cef7ca62..236bb42d 100644 --- a/kernel/src/shell.rs +++ b/kernel/src/shell.rs @@ -7,6 +7,8 @@ use crate::process::*; pub fn run_user_shell() { if let Ok(inode) = ROOT_INODE.lookup("sh") { + println!("Going to user mode shell."); + println!("Use 'ls' to list available programs."); let data = inode.read_as_vec().unwrap(); processor().manager().add(Process::new_user(data.as_slice(), "sh".split(' ')), 0); } else { From 70e0025c635936b0b76c924f3eeeb377c297d15d Mon Sep 17 00:00:00 2001 From: WangRunji Date: Sun, 16 Dec 2018 11:47:33 +0800 Subject: [PATCH 9/9] add OS2ATC slides. update README --- README.md | 4 +- docs/2_OSLab/os2atc/demo.png | Bin 0 -> 323892 bytes docs/2_OSLab/os2atc/ucore_os_in_rust.md | 616 +++++++++++++++++++++++ docs/2_OSLab/os2atc/ucore_os_in_rust.pdf | Bin 0 -> 1104276 bytes 4 files changed, 619 insertions(+), 1 deletion(-) create mode 100644 docs/2_OSLab/os2atc/demo.png create mode 100644 docs/2_OSLab/os2atc/ucore_os_in_rust.md create mode 100644 docs/2_OSLab/os2atc/ucore_os_in_rust.pdf diff --git a/README.md b/README.md index 50f5122c..cfdfdf6f 100644 --- a/README.md +++ b/README.md @@ -8,10 +8,12 @@ Going to be the next generation teaching operating system. Supported architectures: x86_64, RISCV32IMA(S/M), AArch64 -Tested boards: QEMU, Raspberry Pi 3B+ +Tested boards: QEMU, labeled-RISCV, Raspberry Pi 3B+ [Dev docs](https://rucore.gitbook.io/rust-os-docs/) (in Chinese) +![demo](./docs/2_OSLab/os2atc/demo.png) + ## Summary This is a project of THU courses: diff --git a/docs/2_OSLab/os2atc/demo.png b/docs/2_OSLab/os2atc/demo.png new file mode 100644 index 0000000000000000000000000000000000000000..d686b461795866ec3e646be9d8e41ac574202fd6 GIT binary patch literal 323892 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

Lwgz>_er3Q!s9SL=pe13&g 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 literal 0 HcmV?d00001 diff --git a/docs/2_OSLab/os2atc/ucore_os_in_rust.md b/docs/2_OSLab/os2atc/ucore_os_in_rust.md new file mode 100644 index 00000000..a700a957 --- /dev/null +++ b/docs/2_OSLab/os2atc/ucore_os_in_rust.md @@ -0,0 +1,616 @@ + + + + +# Rust版 uCore OS 的设计与实现 +## Design and implementation of uCore OS in Rust + +王润基 +清华大学计算机系 + +2018.12.16 @ OS2ATC + +--- + +# 提纲 + +## 简介:Rust uCore OS是什么? +## 动机:为什么要用Rust写OS? +## 体会:用Rust写OS有何好处? +## 未来:接下来会做什么? + +--- + +# 简介:Rust uCore OS是什么? + +--- + +# uCore OS + +清华大学教学操作系统 + +参考 xv6 & jos in MIT, OS161 in Harvard, Linux + +用C语言编写的宏内核OS + +* [ucore_os_lab](https://github.com/chyyuu/ucore_os_lab):操作系统课实验 +* [ucore_os_plus](https://github.com/chyyuu/ucore_os_plus):教学科研系统 + +--- + +# uCore OS in Rust -- RustOS + +2018年操作系统课大实验项目 + +“用Rust语言重新实现uCore” + +# + +之后在OS专题训练课上推广,目前: + +支持三大平台:x86_64, RISCV32, AArch64 +支持硬件:计算所Labeled-RISCV,树莓派3B +支持多核CPU + +--- + +## 大实验选题列举 + +OS: +* RustOS for x86_64 SMP +* Rustable - ucore 在 arm 平台的 rust 移植 +* Rucore with LKM Drivers + +OS专题训练: +* RustOS 上树莓派 USB 与 VideoCore IV 显卡驱动的移植 +* RustOS 多核移植与基于PARD框架的线程级Label管理 +* RustOS wiki完善与教学lab实验的制作 +* RustOS 参考sv6的多核实现和优化 +* RustOS 移植到 rv64 及llvm编译器支持 + +--- + +# 动机:为什么要用Rust写OS? + +* C语言有何不足? +* Rust解决了哪些痛点? +* 条件是否成熟? + +--- + +# C语言有何不足? + +--- + +## 简单?简陋? + +C语言简单、直接,为OS而生。 +但从现代编程语言的角度看,C语言有些简陋,难以表达复杂逻辑和抽象。 + +![90%](./C.jpg) +*上图出自[一篇知乎回答](https://www.zhihu.com/question/25038841/answer/44396770)* + +--- + +### 缺乏对OOP和接口的语言级支持 +C中常用函数指针实现接口: +```c +struct device { + size_t d_blocks; + size_t d_blocksize; + int (*d_open)(struct device *dev, uint32_t open_flags); + int (*d_close)(struct device *dev); + int (*d_io)(struct device *dev, struct iobuf *iob, bool write); + int (*d_ioctl)(struct device *dev, int op, void *data); +}; +``` + +--- + +### 缺乏基础数据结构支持 + +OS中常用的侵入式链表(摘自ucore_os_lab): +```c +// 链表节点 +struct list_entry { + struct list_entry *prev, *next; +}; +// 在宿主类型中嵌入链表节点 +struct Page { + list_entry_t page_link; + ... +}; +// 从list类型转化回宿主类型 +#_define le2page(le, member) \ + to_struct((le), struct Page, member) +#_define offsetof(type, member) \ + ((size_t)(&((type *)0)->member)) +#_define to_struct(ptr, type, member) \ + ((type *)((char *)(ptr) - offsetof(type, member))) +``` + +--- + +### 缺乏工程模块系统 + +* 编译配置复杂 +* 难以复用代码 + +--- + +## SegmentFault! + +悬空指针,重复释放,数据竞争…… + +# +![60%](./pointer.png) + +--- + +# Rust解决了哪些痛点? + +* 强类型,内存安全,线程安全——减少Bug! +* 现代语言特性——提升开发体验 +* 完善的模块系统——方便代码复用 +* 零开销抽象——能写OS的根本保障 + +--- + +# 是时候尝试Rust了! + +### 社区:[Redox](https://www.redox-os.org) +全功能Rust OS,微内核架构,支持GUI + +### 教学:[CS140e](https://web.stanford.edu/class/cs140e/) +斯坦福大学实验性OS课程,2018年新开设 +Rust编写OS,面向ARM,在树莓派3上运行 + +### 兴趣:[Writing an OS in Rust](https://os.phil-opp.com) +手把手带你用Rust编写OS的系列博客 +面向x86_64,教程极为详尽 +作者为Rust编写OS提供了大量开源工具 + +--- + +## 万事俱备,只是…… +# 还不会Rust怎么办? + +编写OS是学习Rust的高效途径! + +--- + +# 体会:用Rust写OS有何好处? + +* 内存与线程安全:减少Bug +* 包管理系统:复用已有代码 +* 接口与泛型:内核模块化 +* 所有权和RAII机制:简化资源管理 + +--- + +# 安全! + +类型系统 + 所有权机制 + 生命周期机制 + +=> 内存安全 + 线程安全 + +--- + +## Rust如何减少Bug + +### 消除了越界访问 +=> panic + +### 消除了因生命周期导致的非法访存 +=> 编译错误 + +### 消除了数据竞争 +=> 死锁 + +### 缩小了Bug的查找范围 +=> unsafe块 + +--- + +## Rust如何减少Bug + +* 大部分低级错误在编译期避免 +* 少数逻辑错误在运行时暴露 +* 难以发现的错误被限制了范围 + +--- + +## 充分利用现成轮子 + +引用的外部库(crate): +* `alloc`: 容器 +* `log`: 日志 +* `spin`: 自旋锁 +* `xmas-elf`: 解析ELF文件 +* `linked_list_allocator`: 堆分配算法 +* `uart_116500`: 串口驱动 +* `x86_64`: 包装汇编指令,封装页表等数据结构 + +更好地专注于OS核心逻辑! + +--- + +## 制造我们自己的轮子 + +仿照`x86_64`库,并基于社区现有成果, +我们分别实现了`riscv`和`aarch64`库。 + +--- + +# 内核模块化 + +ucore_os_lab = 内存管理 + 进程管理 + 文件系统 + +lab1-lab8,层层依赖,高度耦合。 + +然而它们在逻辑上互不相关,理应分开。 + +--- + +# 内核模块化 + +每个部分作为独立的crate存在,互不依赖。 + +内核通过实现它们的接口,把它们粘合在一起。 + +可以分别内部单元测试,然后放在一起集成测试。 + +配合泛型,可做到零开销。 + +--- + +### 内存模块 + +接口:页表,页表项,缺页处理函数 + +功能:面向进程的虚存管理(`mm_struct`) +-------支持内存置换、写时复制、延迟分配等机制 + +### 线程模块 + +接口:上下文切换,新线程的构造 + +功能:线程调度和管理 + +### 文件系统 + +接口:块设备,VFS(虚拟文件系统) + +功能:文件操作和管理 + +--- + +### 内存模块——接口 + +```rust +pub trait PageTable { + fn map(&mut self, addr: VirtAddr, target: PhysAddr) + -> &mut Entry; + fn unmap(&mut self, addr: VirtAddr); + fn get_entry(&mut self, addr: VirtAddr) + -> Option<&mut Entry>; +} + +pub trait Entry { + fn update(&mut self); // flush TLB + fn present(&self) -> bool; + fn target(&self) -> PhysAddr; + fn set_present(&mut self, value: bool); + fn set_target(&mut self, target: PhysAddr); + ... +} +``` + +--- + +### 内存模块——面向接口的上层实现 + +```rust +pub struct MemoryArea { + start_addr: VirtAddr, + end_addr: VirtAddr, + ... +} + +impl MemoryArea { + fn map(&self, pt: &mut PageTable) { + for page in Page::range_of(self.start_addr, self.end_addr) { + let target = alloc_frame(); + pt.map(addr, target); + } + } +} +``` +为一段连续的虚拟地址空间 映射页表项。 + +--- + +### 内存模块——接口的Mock实现 +```rust +pub struct MockPageTable { + entries: [MockEntry; PAGE_COUNT], + data: [u8; PAGE_SIZE * PAGE_COUNT], + page_fault_handler: Option, +} + +impl PageTable for MockPageTable { + fn map(...) {...} + fn unmap(...) {...} + fn get_entry(...) {...} +} + +impl MockPageTable { + fn read(&mut self, addr: VirtAddr) -> u8 {...} + fn write(&mut self, addr: VirtAddr, data: u8) {...} +} +``` +实现一个仿真页表,模拟地址转换的过程,从数组中存取数据。 + +--- + +### 内存模块——基于Mock的单元测试 +```rust +#[test] +fn memory_area_map() { + let mut pt = MockPageTable {...}; + let area = MemoryArea {...}; + + area.map(&mut pt); + + pt.write(0x1000, 1); + assert_eq!(pt.read(0x1000), 1); +} +``` +可用`cargo test`在任意环境下运行单元测试,不依赖QEMU。 + +--- + +### 线程模块——接口与实现 +```rust +pub trait Context { + unsafe extern "C" + fn switch_to(&mut self, target: &mut Context); +} +pub struct X86Context { + rip: usize, + ... // callee-saved registers +} +impl Context for X86Context { + unsafe extern "C" // Store caller-saved registers + fn switch_to(&mut self, target: &mut Context) { + // Store callee-saved registers + // Restore callee-saved registers + } // Restore caller-saved registers +} +``` +上下文切换:保存和恢复寄存器 + +--- + +### 线程模块——面向接口的上层实现 +```rust +/// 管理所有线程的状态及调度,全局唯一 +pub struct ProcessManager {...} +/// 线程执行者,每个CPU核对应一个 +pub struct Processor { + manager: Arc, + context: Box, + ... +} +impl Processor { + /// 调度线程,无限循环 + fn run(&mut self) -> ! { loop { + let mut process = self.manager.pop(); + unsafe { self.context.switch_to(&mut process); } + self.manager.push(process); + }} +} +``` +每个CPU核不断地从运行队列中:取出线程-运行-放回 + +--- + +### 线程模块——兼容标准库的高层封装 + +```rust +// thread.rs +pub fn current() -> Thread {...} +pub fn sleep(dur: Duration) {...} +pub fn spawn(f: F) -> JoinHandle {...} +pub fn yield_now() {...} +pub fn park() {...} +``` +在上页基础上进一步封装。 +提供和标准库`std::thread`完全一致的上层接口。 +使得依赖std的多线程代码,可以方便地迁移到内核中。 + +--- + +# 所有权和RAII机制:简化资源管理 + +OS需要管理复杂的资源 +资源之间有复杂的共享和依赖关系 + +--- + +![80%](./resources.png) + +--- + +进程的对象结构: +```rust +pub struct Process { + context: Context, + kstack: KernelStack, + memory: MemorySet, + files: BTreeMap>>, + ... +} +``` + +--- + +将资源封装成对象,在析构函数中释放资源。 + +```rust +pub struct KernelStack { + ptr: *mut u8, + layout: Layout, +} + +impl Drop for KernelStack { + fn drop(&mut self) { + unsafe{ dealloc(self.ptr, self.layout); } + } +} +``` + +--- + +当对象的生命周期结束时,资源自动释放。 + +```rust +pub struct Process { + context: Context, + kstack: KernelStack, + memory: MemorySet, + files: BTreeMap>>, + ... +} + +pub struct ProcessManager { + procs: BTreeMap, +} +impl ProcessManager { + pub fn remove(&mut self, pid: usize) { + self.procs.remove(&pid); + // All resources have been released here + } +} +``` + +--- + +# Rust vs C + +## 代码风格 + +||Rust|C| +|-|-|-| +|数据结构|泛型容器(Vec)|侵入式(链表)| +|全局变量|少量|大量| +|数据分布|倾向分散|倾向集中| +|数据类型|鼓励自定义类型|基础类型| +|思维方式|所有权+生命周期|数据+行为| + +--- + +## 代码量 + +||Rust|C| +|-|-|-| +|内存管理|1600|1800| +|线程管理|1200|1200| +|文件系统|1300|3400| +|同步互斥|500|400| +|内核其它|800|1200| +|共计|5400|8000| + +*使用`loc`统计代码行数,基于RISCV版本,粗略计算* + +--- + +## 语言能力 + +在底层: +* 具有同等的底层操作能力 +* 二者具有良好的互操作性 + +在上层: +* Rust能编写更加安全的代码,减少Bug +* Rust具有更好的表达能力,胜任复杂逻辑 +* Rust具有更强的抽象能力,有助于代码的分离和复用 + +——Rust更加适合编写OS! + +--- + +# Rust的问题 + +学习曲线过于陡峭! + +所有权、生命周期等机制难以驾驭! + +初学者大部分时间在与编译器作斗争。 + +一种可能的解决方案: +* 先用unsafe、C风格实现 +* 再逐步消除unsafe、重构成Rust风格 + +--- + +# 未来:接下来会做什么? + +* 真机测试:HiFiveU, K210等RISCV64开发板 +* 教学实验:2019年操作系统课实验 +* 功能完善:实现POSIX接口 +* 性能优化:发掘Rust的潜力 +* 对比借鉴:其它有趣OS +* 潜力探索:async异步机制 + +--- + +## 其它有趣OS + +### [Tock](https://www.tockos.org) + +Rust编写的嵌入式操作系统 + +关注:Capsule内核模块设计,进程的内存分配策略…… + +### [Biscuit](https://github.com/mit-pdos/biscuit) + +Golang编写的POSIX兼容OS,MIT出品 + +关注:Go异步机制,Go vs Rust + +--- + +## 潜力探索:async无栈协程应用于OS内核的探讨 + +async-await:用户态异步编程机制 + +用同步的方式,编写异步的代码。 + +背后的实现机制和OS线程调度高度一致。 + +能否应用于Kernel中?与传统线程机制相比有何优缺点? + +--- + +# 感谢 + +### 指导老师 +陈渝,向勇 + +### 参与开发的同学们 +王润基,戴臻旸,王纪霆 +贾越凯,寇明阳,孔彦 +刘辰屹,陈秋昊,朱书聪 + +--- + +# 欢迎试玩! + +![40%](demo.png) +GitHub:https://github.com/wangrunji0408/RustOS + +--- + +# 感谢聆听 +# Q&A diff --git a/docs/2_OSLab/os2atc/ucore_os_in_rust.pdf b/docs/2_OSLab/os2atc/ucore_os_in_rust.pdf new file mode 100644 index 0000000000000000000000000000000000000000..576a4ee157196256b4fe1f598a78b6dbfbe594e3 GIT binary patch literal 1104276 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 z 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