fix unwrap panic. now user shell is working.

master
WangRunji 6 years ago
parent da399dca96
commit ef75c8a072

@ -95,7 +95,7 @@ pub fn spawn<F, T>(f: F) -> JoinHandle<T>
// 在Processor中创建新的线程
let context = new_kernel_context(kernel_thread_entry::<F, T>, f as usize);
let pid = processor().manager().add(context);
processor().manager().set_parent(current().id(), pid);
processor().manager().set_parent(0, pid);
// 接下来看看`JoinHandle::join()`的实现
// 了解是如何获取f返回值的

@ -25,9 +25,7 @@ pub extern fn rust_main(hartid: usize, dtb: usize, hart_mask: usize) -> ! {
interrupt::init();
memory::init();
timer::init();
::process::init();
::thread::spawn(::shell::run_user_shell);
unsafe { cpu::start_others(hart_mask); }
::kmain();

@ -48,7 +48,6 @@ pub extern "C" fn _start(boot_info: &'static BootInfo) -> ! {
driver::init();
::process::init();
::thread::spawn(::shell::run_user_shell);
AP_CAN_INIT.store(true, Ordering::Relaxed);

@ -13,18 +13,20 @@ pub fn init() {
let scheduler = Box::new(scheduler::RRScheduler::new(5));
let manager = Arc::new(ProcessManager::new(scheduler, MAX_PROCESS_NUM));
unsafe {
for cpu_id in 0..MAX_CPU_NUM {
PROCESSORS[cpu_id].init(cpu_id, ContextImpl::new_init(), manager.clone());
}
}
extern fn idle(_arg: usize) -> ! {
loop { cpu::halt(); }
}
for i in 0..4 {
manager.add(ContextImpl::new_kernel(idle, i));
}
::shell::run_user_shell();
unsafe {
for cpu_id in 0..MAX_CPU_NUM {
PROCESSORS[cpu_id].init(cpu_id, ContextImpl::new_init(), manager.clone());
}
}
info!("process init end");
}

Loading…
Cancel
Save