feat: Symmetric Multiprocessing, text editor improvements, merge doom libc, implement math functions

This commit is contained in:
2026-03-23 20:09:11 +01:00
parent a805b06406
commit 63d9270613
46 changed files with 3004 additions and 2404 deletions
+15 -4
View File
@@ -1,7 +1,7 @@
/*
* Scheduler.hpp
* Preemptive process scheduler with user-mode support
* Copyright (c) 2025 Daniel Hammer
* Preemptive process scheduler with SMP support
* Copyright (c) 2025-2026 Daniel Hammer
*/
#pragma once
@@ -24,12 +24,15 @@ namespace Sched {
Free,
Ready,
Running,
Blocked, // Waiting (e.g. waitpid) -- not schedulable
Terminated
};
struct Process {
int pid;
ProcessState state;
int waitingForPid; // PID this process is blocked on (-1 if none)
uint64_t sleepUntilTick; // Tick deadline for SYS_SLEEP_MS (0 = not sleeping)
char name[64];
uint64_t savedRsp;
uint64_t stackBase; // Bottom of allocated kernel stack (lowest address)
@@ -41,6 +44,8 @@ namespace Sched {
uint64_t heapNext; // Simple bump allocator for user heap
char args[256]; // Command-line arguments (set by parent via Spawn)
int runningOnCpu; // CPU index running this process (-1 if not running)
// I/O redirection for GUI terminal
bool redirected = false;
int parentPid = -1;
@@ -67,7 +72,7 @@ namespace Sched {
int Spawn(const char* vfsPath, const char* args = nullptr);
void Schedule();
// Called from the APIC timer handler on every tick.
// Called from the APIC timer handler on every tick (per-CPU).
void Tick();
// Get the PID of the currently running process (-1 if idle)
@@ -79,9 +84,15 @@ namespace Sched {
// Called by terminated processes to mark themselves done
void ExitProcess();
// Check if a process is still alive (Ready or Running)
// Check if a process is still alive (Ready, Running, or Blocked)
bool IsAlive(int pid);
// Block the current process until the given PID exits.
void BlockOnPid(int pid);
// Block the current process for the given number of milliseconds.
void BlockForSleep(uint64_t ms);
// Find a process by PID (returns nullptr if not found or not alive)
Process* GetProcessByPid(int pid);