forked from AbleOS/ableos
i pushed so i can work on it in windows thanks
This commit is contained in:
parent
4252719a72
commit
359d62c1b0
|
@ -6,6 +6,8 @@ use {
|
|||
arch::logging::SERIAL_CONSOLE,
|
||||
bootmodules::{build_cmd, BootModules},
|
||||
device_tree::DeviceTree,
|
||||
scheduler::Scheduler,
|
||||
|
||||
},
|
||||
alloc::format,
|
||||
log::{debug, info, trace},
|
||||
|
@ -30,7 +32,7 @@ pub fn kmain(cmdline: &str, boot_modules: BootModules) -> ! {
|
|||
|
||||
let dt = DEVICE_TREE.lock();
|
||||
|
||||
info!("Device Tree{}", dt);
|
||||
info!("Device Tree: {}", dt);
|
||||
info!("Boot complete. Moving to init_system");
|
||||
|
||||
// TODO: schedule the disk driver from the initramfs
|
||||
|
@ -59,13 +61,17 @@ pub fn kmain(cmdline: &str, boot_modules: BootModules) -> ! {
|
|||
// log::error!("Program validation error: {e:?}");
|
||||
}
|
||||
Ok(_) => {
|
||||
|
||||
// log::info!("valid program");
|
||||
use {crate::host::TrapHandler, hbvm::vm::Vm};
|
||||
let mut vm;
|
||||
unsafe {
|
||||
vm = Vm::new_unchecked(&prog, TrapHandler);
|
||||
vm.memory.insert_test_page();
|
||||
}
|
||||
// use {crate::host::TrapHandler, hbvm::vm::Vm};
|
||||
let mut sched = Scheduler::new();
|
||||
sched.new_process(prog.clone());
|
||||
sched.scheduler_loop();
|
||||
// let mut vm;
|
||||
// unsafe {
|
||||
// vm = Vm::new_unchecked(&prog, TrapHandler);
|
||||
// vm.memory.insert_test_page();
|
||||
// }
|
||||
// log::info!("Program interrupt: {:?}", vm.run());
|
||||
// log::debug!("{:?}", vm.registers);
|
||||
}
|
||||
|
|
|
@ -1,22 +1,45 @@
|
|||
use {crate::host::TrapHandler, alloc::vec::Vec, hbvm::vm::Vm};
|
||||
use alloc::{collections::VecDeque, vec::Vec, rc::Rc, slice};
|
||||
use hbvm::validate::validate;
|
||||
|
||||
use {crate::host::TrapHandler, hbvm::vm::Vm};
|
||||
|
||||
pub struct Scheduler<'a> {
|
||||
data: Vec<Vm<'a, TrapHandler>>,
|
||||
data: VecDeque<Vm<'a, TrapHandler>>,
|
||||
}
|
||||
|
||||
impl Scheduler<'_> {
|
||||
// fn new_process(&mut self, program: Vec<u8>) {
|
||||
// let prog = program.clone();
|
||||
// #[allow(clippy::redundant_else)]
|
||||
// if let Err(e) = validate(&prog) {
|
||||
// log::error!("Program validation error: {e:?}");
|
||||
// } else {
|
||||
// log::info!("valid program");
|
||||
// unsafe {
|
||||
// let mut vm = Vm::new_unchecked(&prog, TrapHandler);
|
||||
// vm.memory.insert_test_page();
|
||||
// self.data.push(vm);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
pub fn new() -> Self {
|
||||
Self {
|
||||
data: VecDeque::new(),
|
||||
}
|
||||
}
|
||||
pub fn new_process(&mut self, program: Vec<u8>) {
|
||||
let prog = program.clone();
|
||||
let prog_arc = Rc::new(prog);
|
||||
|
||||
let binding = Rc::try_unwrap(prog_arc).ok().unwrap();
|
||||
|
||||
|
||||
|
||||
#[allow(clippy::redundant_else)]
|
||||
if let Err(e) = validate(&program.as_slice()) {
|
||||
log::error!("Program validation error: {e:?}");
|
||||
} else {
|
||||
log::info!("valid program");
|
||||
unsafe {
|
||||
let slice = slice::from_raw_parts(binding.as_ptr(), binding.len());
|
||||
let mut vm = Vm::new_unchecked(&*slice, TrapHandler);
|
||||
vm.memory.insert_test_page();
|
||||
self.data.push_front(vm);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn scheduler_loop(&mut self){
|
||||
loop {
|
||||
let mut prog = self.data.pop_front().unwrap();
|
||||
prog.run().unwrap();
|
||||
self.data.push_back(prog);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue