25 Commits

Author SHA1 Message Date
c5876768c5 core: Reserve kernel physical pages + provide our own stack
This solves a very weird bug that occurred when we allocated a page that was already used for the stack.
2025-02-24 19:16:35 +01:00
55ddc468d5 core: Reserve multiboot tags and module memory + load all modules as independent threads instead of just init
Only init is started though, other modules are left in a dormant state so init can do whatever it wants and adjust them according to its needs before running them.
2025-02-22 23:00:53 +01:00
5f9514627b core+init: Instead of exporting an "arch" symbol for platform-specific code, use "usingnamespace".
This makes imports of  platform-specific files way cleaner.
2025-02-22 15:49:14 +01:00
fb8de7b83b core: Add an "event queue" to threads using a ring buffer updated by the kernel 2025-02-22 15:39:21 +01:00
d858700da4 core: Add a struct named "platform.Registers" to cover different architectures
This replaces the architecture-independent usage of InterruptStackFrame, which is an x86_64 implementation thing.
2025-02-21 19:40:46 +01:00
52cb29dbca core: Add documentation to all scheduler functions + global thread list 2025-02-21 19:37:13 +01:00
8156ff57fe core: Check the stack is in user memory before changing it to kernel space
Otherwise, we're just adding the physical base to an address that's already in the higher half.
2025-02-21 18:47:24 +01:00
14047e0c3c core: Change naming for virtual memory structures to reflect x86_64 terms 2025-02-21 18:33:36 +01:00
930f69c498 core: Don't set the second thread argument to zero
This defeated the point of passing the page tables to init, since rsi would be set to zero anyway.
2025-02-20 23:01:28 +01:00
34255d6c68 core: Give init a pointer to its own page tables 2025-02-20 17:57:50 +01:00
e9b2f5968a core/x86_64: Fix function naming style 2025-02-20 17:55:56 +01:00
b87150a35f core: Add sleep support to the scheduler 2025-02-18 20:06:40 +01:00
9cbb043238 core/x86_64: Make in/out wrappers inline 2025-02-17 23:04:58 +01:00
9c92b3de4b core: Add priority-based scheduling 2025-02-17 20:15:30 +01:00
6be2261519 core: Store the physical page directory alongside the virtual pointer to it 2025-02-16 13:20:02 +01:00
671a9b5887 core: Add PIT timer code to preempt the scheduler 2025-02-16 11:58:01 +01:00
a209ba7b99 core: Allocate a stack for each core's idle thread 2025-02-16 11:57:27 +01:00
ed324fcf9e core: Add basic threading code 2025-02-15 22:45:32 +01:00
fa04363a51 core/x86_64: Set up a second stack in the TSS to handle system calls 2025-02-15 22:40:48 +01:00
56f2c018a7 core: Fix a couple of bugs in VMM and add a few utility functions 2025-02-15 22:23:00 +01:00
f93158645b core/x86_64: Enable the NX bit before using it
Spent an embarrassing amount of time trying to figure out why there was a page fault with "reserved bits set". Turns out, I had set the NX bit without enabling it.
2025-02-15 22:22:04 +01:00
36b9832053 core/x86_64: Add general protection fault handler 2025-02-15 22:19:08 +01:00
adffd408bc core: Add a page fault handler 2025-02-15 15:18:40 +01:00
8d70a0f0a1 core: Enable interrupts in platformEndInit()
This way, each architecture can re-enable interrupts whenever necessary
2025-02-15 15:18:24 +01:00
13ec4bee87 Ready. Set. Go!
Microkernel development in Zig, should be fun! =]
2025-02-13 22:39:48 +01:00