Open robert-w-gries opened 6 years ago
Hi Rob,
Thanks for the info, I'll probably patch this at some point. lambdaOS is currently a dead project but it's always nice to have fixes coming in.
If you're interested in priority preemptive scheduling, I recently merged it in: https://github.com/robert-w-gries/rxinu/pull/68
The kernel is a lot more stable now. After moving to the rust-osdev/x86_64
crate and making some fixes to how processes are initialized, I see much fewer exceptions and lock ups.
Notable changes
IrqSpinLock
is a great abstraction that reduces the number interrupts::disable_then_execute()
wrappersIrqLock
replaces the spinlocks that were used in the VGA and SERIAL drivers, meaning there's much less deadlocks nowmodify_process()
See robert-w-gries/rxinu#61
We need to set the base pointer register during process creation. Otherwise, we will eventually run into page faults due to a bad initial
rbp
value of zero.For example,
mov %rax,-0x18(%rbp)
, whererbp = 0x0
will have us access the memory location of0x0 - 0x18 = 0xffffffffffffffe8
. The reason this issue came up is because I recently changed bootloaders and page protection is properly setup for my kernel now.I fixed the issue in
rxinu
in this commit. I would submit a patch for you but it is late and I don't have my dev environment setup 😄