提交 ddc21343 编写于 作者: chyyuu1972's avatar chyyuu1972

fix kernel thread, task.rs -- Line:93 -- kstack --> kstack:KernelStack(kstack_top). run correctly

上级 2166fecf
......@@ -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!");
......
......@@ -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,
......
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());
......
......@@ -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));
}
......
......@@ -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,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册