45 Commits

Author SHA1 Message Date
e52b0bcf77 core+system: Add a bunch of syscalls related to thread creation 2025-02-22 22:58:56 +01:00
30c0f23ff0 core: Allow for non-const pointers in findMultibootTags() 2025-02-22 22:57:33 +01:00
c24bc8ed27 core: Add "tokens" to determine what processes can call which syscalls 2025-02-22 20:11:07 +01:00
6fa70693a5 core: Remove excessive ELF debug printing 2025-02-22 15:52:36 +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
6acf83692f core+init: Move syscall code from init to the system library + add a setEventQueue() syscall 2025-02-22 15:41:11 +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
960699c984 core: Fix alignment in lookupThreadById() 2025-02-22 15:38:23 +01:00
4d8c3856d4 core+system: Add a new "system library" with a shared memory ring buffer implementation 2025-02-22 15:37:22 +01:00
9f91ade838 core: Separate thread.arch from other imports 2025-02-21 19:44:54 +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
785335bd9a core: Make thread.enterTask() automatically set the thread state to Running 2025-02-21 18:40:29 +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
a8b206cac3 core: Add some annotations to managed thread variables
Some thread variables don't need to be set manually,
since they are updated whenever needed by some functions.
Add comments to make that clear.
2025-02-20 17:59:27 +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
08c1e0bca2 core: Make some functions in thread.zig private 2025-02-18 20:10:14 +01:00
b87150a35f core: Add sleep support to the scheduler 2025-02-18 20:06:40 +01:00
8f6c952331 core: Set new threads' priority to 127
This is halfway through the priority range, so user processes can either lower or raise their priority from the default.
2025-02-18 19:30:46 +01:00
9cbb043238 core/x86_64: Make in/out wrappers inline 2025-02-17 23:04:58 +01:00
13445bac1f core: Fix a small error in thread.zig 2025-02-17 23:04:43 +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
3ce8cfb726 core: Add memory and scheduler related system calls 2025-02-16 11:58:12 +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
4554bce8a8 core: Add thread states 2025-02-16 11:57:04 +01:00
f87426753b core: Add global FrameAllocator with locking 2025-02-16 11:56:14 +01:00
14862ec271 core: Add spinlock code 2025-02-16 11:52:45 +01:00
ea952efe8a core: Fix a few bugs in threading code
g_threads is processor-specific now, so it's unused, and setPageDirectory() needs the physical address.
2025-02-15 22:58:34 +01:00
a76e94c517 core: Add a simple ELF loader
We only need the ELF loader for init, and possibly a few other modules. The bulk of loading executables is going to be done by userspace, so we only need the basics here.
2025-02-15 22:46:28 +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
090e4148b8 core: Reserve physical page 0
In the kernel's early stages we access physical memory identity-mapped, so it's not very good for us to allocate that frame and then try to use it.
2025-02-15 22:18:49 +01:00
8bfc8a5781 core: Make findMultibootTags take a context argument
Will be useful later.
2025-02-15 22:18:05 +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
5d26b114a4 core: Add workaround for QEMU-specific triple-faults without KVM
Without KVM, qemu inserts an invalid 12-GiB reserved entry at the end of the physical address space, making the kernel reserve way more space than necessary for the page bitmap (and overwriting the page directory pages).
2025-02-15 15:16:50 +01:00
13ec4bee87 Ready. Set. Go!
Microkernel development in Zig, should be fun! =]
2025-02-13 22:39:48 +01:00