diff --git a/os/src/main.rs b/os/src/main.rs index 3801a01e..c5ae3652 100644 --- a/os/src/main.rs +++ b/os/src/main.rs @@ -54,8 +54,8 @@ pub fn rust_main() -> ! { trap::enable_timer_interrupt(); timer::set_next_trigger(); task::stackless_coroutine::kernel_stackless_coroutine_test(); - task::kernel_stackful_coroutine_test(); fs::list_apps(); + task::kernel_stackful_coroutine_test(); task::add_initproc(); task::run_tasks(); panic!("Unreachable in rust_main!"); diff --git a/os/src/task/context.rs b/os/src/task/context.rs index 73d7b319..8bb8b6f3 100644 --- a/os/src/task/context.rs +++ b/os/src/task/context.rs @@ -16,14 +16,6 @@ impl TaskContext { } } - pub fn kthread_init() -> Self { - Self { - ra: 0xAAAAAAAA, - sp: 0xBBBBBBBB, - s: [0xCCCCCCCC; 12], - } - } - pub fn goto_trap_return(kstack_ptr: usize) -> Self { Self { ra: trap_return as usize, diff --git a/os/src/task/id.rs b/os/src/task/id.rs index 8257b178..0d8fc5b3 100644 --- a/os/src/task/id.rs +++ b/os/src/task/id.rs @@ -1,6 +1,6 @@ use super::ProcessControlBlock; use crate::config::{KERNEL_STACK_SIZE, PAGE_SIZE, TRAMPOLINE, TRAP_CONTEXT_BASE, USER_STACK_SIZE}; -use crate::mm::{MapPermission, PhysPageNum, VirtAddr, KERNEL_SPACE}; +use crate::mm::{MapPermission, PhysPageNum, VirtAddr, KERNEL_SPACE, PhysAddr}; use crate::sync::UPSafeCell; use alloc::{ sync::{Arc, Weak}, @@ -70,6 +70,7 @@ pub struct KernelStack(pub usize); pub fn kstack_alloc() -> KernelStack { let kstack_id = KSTACK_ALLOCATOR.exclusive_access().alloc(); let (kstack_bottom, kstack_top) = kernel_stack_position(kstack_id); + //println!("kstack_alloc kstack_bottom: {:#x?}, kstack_top: {:#x?}", kstack_bottom, kstack_top); KERNEL_SPACE.exclusive_access().insert_framed_area( kstack_bottom.into(), kstack_top.into(), @@ -82,6 +83,8 @@ impl Drop for KernelStack { fn drop(&mut self) { let (kernel_stack_bottom, _) = kernel_stack_position(self.0); let kernel_stack_bottom_va: VirtAddr = kernel_stack_bottom.into(); + // let kernel_stack_bottom_pa: PhysAddr = kernel_stack_bottom.into(); + // println!("kstack_drop kstack_bottom: va: {:#x?}, pa: {:#x?}", kernel_stack_bottom_va, kernel_stack_bottom_pa); KERNEL_SPACE .exclusive_access() .remove_area_with_start_vpn(kernel_stack_bottom_va.into()); diff --git a/os/src/task/mod.rs b/os/src/task/mod.rs index 990b1dce..2ef79b97 100644 --- a/os/src/task/mod.rs +++ b/os/src/task/mod.rs @@ -138,12 +138,12 @@ pub fn kthread_create(f: fn()) { println!("kthread_create"); - //�����ں��߳� + // create kernel thread let new_tcb = TaskControlBlock::create_kthread(f); // let kernel_stack = new_tcb.get_kernel_stack(); let new_task = Arc::new(new_tcb); - //��������������,���û��̷߳���һ�����. + // add kernel thread into TASK_MANAGER // println!("add task"); add_task(Arc::clone(&new_task)); } diff --git a/os/src/task/task.rs b/os/src/task/task.rs index 839a4e21..22037320 100644 --- a/os/src/task/task.rs +++ b/os/src/task/task.rs @@ -23,11 +23,6 @@ impl TaskControlBlock { let inner = process.inner_exclusive_access(); inner.memory_set.token() } - - // pub fn get_kernel_stack(&self) -> usize { - // self.kstack - // } - } pub struct TaskControlBlockInner { @@ -83,7 +78,7 @@ impl TaskControlBlock { let kernelstack = crate::task::id::KStack::new(); let kstack_top = kernelstack.top(); - let mut context = TaskContext::kthread_init(); + let mut context = TaskContext::zero_init(); let context_addr = &context as *const TaskContext as usize; let pa = PhysAddr::from(context_addr); let context_ppn = pa.floor(); @@ -91,11 +86,12 @@ impl TaskControlBlock { context.ra = f as usize; context.sp = kstack_top; - println!("context ppn :{:#x?}", context_ppn); + //println!("context ppn :{:#x?}", context_ppn); Self { process, - kstack, + kstack:KernelStack(kstack_top), + //kstack, inner: unsafe { UPSafeCell::new(TaskControlBlockInner { res: None,