SCHED: Two programs are now running in ableOS

master
able 2023-07-15 05:51:19 -05:00
parent cec0cdc116
commit 423c75562b
8 changed files with 43 additions and 12 deletions

4
Cargo.lock generated
View File

@ -859,12 +859,12 @@ dependencies = [
[[package]] [[package]]
name = "hbbytecode" name = "hbbytecode"
version = "0.1.0" version = "0.1.0"
source = "git+https://git.ablecorp.us/ableos/holey-bytes#75995422262a192f2c87713d239856e98c799f41" source = "git+https://git.ablecorp.us/ableos/holey-bytes#6a444bd29ea6d474ec98edbc11b27030825b86e2"
[[package]] [[package]]
name = "hbvm" name = "hbvm"
version = "0.1.0" version = "0.1.0"
source = "git+https://git.ablecorp.us/ableos/holey-bytes#75995422262a192f2c87713d239856e98c799f41" source = "git+https://git.ablecorp.us/ableos/holey-bytes#6a444bd29ea6d474ec98edbc11b27030825b86e2"
dependencies = [ dependencies = [
"delegate", "delegate",
"derive_more", "derive_more",

View File

@ -4,7 +4,6 @@
use { use {
crate::{ crate::{
bootmodules::{build_cmd, BootModules}, bootmodules::{build_cmd, BootModules},
capabilities,
device_tree::DeviceTree, device_tree::DeviceTree,
scheduler::Scheduler, scheduler::Scheduler,
}, },
@ -38,10 +37,10 @@ pub fn kmain(cmdline: &str, boot_modules: BootModules) -> ! {
// TODO: schedule the filesystem driver from the initramfs // TODO: schedule the filesystem driver from the initramfs
// TODO: schedule the init system from the initramfs // TODO: schedule the init system from the initramfs
capabilities::example(); // capabilities::example();
let mut sched = Scheduler::new(); let mut sched = Scheduler::new();
// AHEM that isn't a valid HBVM program
sched.new_process(boot_modules[0].bytes.clone()); sched.new_process(boot_modules[0].bytes.clone());
sched.new_process(boot_modules[1].bytes.clone()); sched.new_process(boot_modules[1].bytes.clone());

View File

@ -48,11 +48,29 @@ impl Scheduler<'_> {
} }
let mut prog = self.data.pop_front().unwrap(); let mut prog = self.data.pop_front().unwrap();
prog.run().unwrap(); let ret = prog.run();
match ret {
Ok(oki) => match oki {
hbvm::vm::VmRunOk::End => {
log::info!(
"Program ended. {} programs remaining.",
// Add one here because we pop a program
self.data.len() + 1
)
}
hbvm::vm::VmRunOk::Timer => {
log::info!("Timer exhausted. Scheduled program");
self.data.push_back(prog);
}
hbvm::vm::VmRunOk::Ecall => {
// panic!();
log::info!("{:?}", prog.registers);
self.data.push_back(prog);
}
},
// log::info!("VM registers {:?}", prog.registers); Err(_) => {}
log::info!("Scheduled program"); }
self.data.push_back(prog);
} }
} }
} }

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -21,5 +21,5 @@ TERM_BACKDROP=008080
MODULE_PATH=boot:///inf_loop.hb MODULE_PATH=boot:///inf_loop.hb
MODULE_CMDLINE="diskid=123456789" MODULE_CMDLINE="diskid=123456789"
MODULE_PATH=boot:///inf_loop.hb MODULE_PATH=boot:///ecall.hb
MODULE_CMDLINE="" MODULE_CMDLINE=""

View File

@ -122,10 +122,15 @@ fn get_fs() -> Result<FileSystem<impl ReadWriteSeek>, io::Error> {
&mut fs.root_dir().create_file("background.bmp")?, &mut fs.root_dir().create_file("background.bmp")?,
)?; )?;
io::copy( io::copy(
&mut File::open("repbuild/inf_loop.hb")?, &mut File::open("repbuild/holeybytes/inf_loop.hb")?,
&mut fs.root_dir().create_file("inf_loop.hb")?, &mut fs.root_dir().create_file("inf_loop.hb")?,
)?; )?;
io::copy(
&mut File::open("repbuild/holeybytes/ecall.hb")?,
&mut fs.root_dir().create_file("ecall.hb")?,
)?;
drop(bootdir); drop(bootdir);
Ok(fs) Ok(fs)
} }
@ -224,8 +229,17 @@ fn run(release: bool, target: Target) -> Result<(), Error> {
if target == Target::Aarch64 { if target == Target::Aarch64 {
com.args([ com.args([
"-M", "virt", "-m", // "-bios",
"target/OVMF_CODE.fd",
"-M",
"virt",
"-device",
"ramfb",
"-m", //
"128M", "128M",
//
"-drive",
"file=target/disk.img,format=raw",
// "-serial", "stdio", // "-serial", "stdio",
]); ]);
} }