Files
XunilOS/kernel/src/task/process.rs
T
csd4ni3l 6ebc6ada09 Increase kernel stack size to 2mb, move from cooperative to timer
preemption based scheduling, add correct save_lock on aarch64, add
simple IPC (read, write, manage), and simple and unsecure SHM, add
per-process kernel stacks, add copy_cstr_to_user, always use run_next
for aarch64, remove primitives from the kernel
2026-05-26 09:53:59 +02:00

66 lines
1.5 KiB
Rust

use core::sync::atomic::Ordering;
use alloc::vec::Vec;
use crate::{
arch::arch::GLOBAL_TICK_COUNT, driver::io::keyboard::KeyboardEvent,
mm::address_space::AddressSpace, task::context::UserContext,
};
pub enum ProcessState {
Ready,
Running,
Blocked,
Zombie,
}
pub struct ProcessInfo {
pub exit_code: usize,
pub parent: usize,
pub wake_tick: Option<u64>,
}
pub struct Process {
pub pid: u64,
pub state: ProcessState,
pub stack_top: u64,
pub kernel_stack_top: u64,
pub heap_base: u64,
pub heap_end: u64,
pub kbd_buffer: Vec<KeyboardEvent>,
pub address_space: Option<AddressSpace>,
pub saved_ctx: Option<UserContext>,
pub user_entry: u64,
pub last_switch_tick: u64,
pub info: ProcessInfo,
}
impl Process {
pub fn new(
pid: u64,
user_entry: u64,
stack_top: u64,
kernel_stack_top: u64,
heap_base: u64,
heap_end: u64,
) -> Process {
Process {
pid,
stack_top,
kernel_stack_top,
state: ProcessState::Ready,
heap_base,
heap_end,
last_switch_tick: GLOBAL_TICK_COUNT.load(Ordering::Relaxed),
kbd_buffer: Vec::new(),
address_space: None,
saved_ctx: None,
user_entry,
info: ProcessInfo {
exit_code: 0,
parent: 0,
wake_tick: None,
},
}
}
}