fix unwrap panic. now user shell is working.

toolchain_update
WangRunji 6 years ago
parent da399dca96
commit ef75c8a072

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

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

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

@ -13,18 +13,20 @@ pub fn init() {
let scheduler = Box::new(scheduler::RRScheduler::new(5)); let scheduler = Box::new(scheduler::RRScheduler::new(5));
let manager = Arc::new(ProcessManager::new(scheduler, MAX_PROCESS_NUM)); 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) -> ! { extern fn idle(_arg: usize) -> ! {
loop { cpu::halt(); } loop { cpu::halt(); }
} }
for i in 0..4 { for i in 0..4 {
manager.add(ContextImpl::new_kernel(idle, i)); 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"); info!("process init end");
} }

Loading…
Cancel
Save