1use crate::lib::addr::VirtAddr;
7use crate::mm::vmm::address_space::AddressSpace;
8use core::sync::atomic::AtomicI32;
9
10pub type Pid = i32;
12
13pub type AtomicPid = AtomicI32;
15
16pub struct Process {
18 pub pid: Pid,
19 pub parent_pid: Pid,
20 pub addr_space: AddressSpace,
21 pub status: ProcessStatus,
22 pub kernel_stack_top: VirtAddr,
23 pub regs: SavedRegs
24}
25impl Process {
26 pub fn new(pid: Pid, parent_pid: Pid, addr_space: AddressSpace, kernel_stack_top: VirtAddr) -> Self {
28 Self {
29 pid,
30 parent_pid,
31 addr_space,
32 status: ProcessStatus::Ready,
33 kernel_stack_top,
34 regs: SavedRegs::new()
35 }
36 }
37}
38
39pub enum ProcessStatus {
41 Ready,
43 Running,
45 Waiting,
47 Zombie(i32)
49}
50
51#[cfg(target_arch = "x86_64")]
53pub struct SavedRegs {
54 pub rax: u64, pub rbx: u64, pub rcx: u64, pub rdx: u64,
55 pub rsi: u64, pub rdi: u64, pub rbp: u64,
56 pub r8: u64, pub r9: u64, pub r10: u64, pub r11: u64,
57 pub r12: u64, pub r13: u64, pub r14: u64, pub r15: u64,
58 pub rip: u64, pub rsp: u64, pub rflags: u64,
59}
60impl SavedRegs {
61 pub const fn new() -> Self {
66 Self {
67 rax: 0, rbx: 0, rcx: 0, rdx: 0,
68 rsi: 0, rdi: 0, rbp: 0,
69 r8: 0, r9: 0, r10: 0, r11: 0,
70 r12: 0, r13: 0, r14: 0, r15: 0,
71 rip: 0, rsp: 0, rflags: 0x202
72 }
73 }
74}