Add a scheduler which just keeps of processes for now, and a

with_process to interact with them. User space now has it's own address
space and mapper which means we will be able to allocate memory for it.
I added a bunch of functions as stubs into libxunil which are required
for doomgeneric.
This commit is contained in:
csd4ni3l
2026-04-03 11:28:31 +02:00
parent 720b68190d
commit 1e899e2f97
28 changed files with 535 additions and 57 deletions

View File

@@ -0,0 +1,32 @@
use crate::{arch::x86_64::paging::XunilFrameAllocator, mm::address_space::AddressSpace};
enum ProcessState {
Ready,
Running,
Blocked,
Zombie,
}
pub struct Process {
pub pid: u64,
pub state: ProcessState,
// cpu_ctx: &[u8],
pub address_space: AddressSpace,
pub user_entry: u64,
}
impl Process {
pub fn new(
pid: u64,
user_entry: u64,
frame_allocator: &mut XunilFrameAllocator,
) -> Option<Process> {
let address_space = AddressSpace::new(frame_allocator)?;
Some(Process {
pid,
state: ProcessState::Ready,
address_space,
user_entry,
})
}
}