i pushed so i can work on it in windows thanks

master
MunirG05 2023-07-10 17:14:11 +05:30
parent 9fca86ae6f
commit f98fde1247
3 changed files with 53 additions and 24 deletions

View File

@ -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);
}

View File

@ -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);
}
}
}

View File

@ -187,7 +187,7 @@ fn run(release: bool, target: Target) -> Result<(), Error> {
#[cfg(target_os = "linux")]
{
// com.args(["-enable-kvm", "-cpu", "host"]);
//com.args(["-enable-kvm", "-cpu", "host"]);
}
}