41 Commits

Author SHA1 Message Date
95dbd68de2
Update README.md
Basic scheduling is now (mostly) done.
2025-02-21 19:49:03 +01:00
9d26113ca9
core: Separate thread.arch from other imports 2025-02-21 19:44:54 +01:00
c1956748f3
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
7665e4cbb6
core: Add documentation to all scheduler functions + global thread list 2025-02-21 19:37:13 +01:00
50e7b6cca7
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
9acbc45a80
core: Make thread.enterTask() automatically set the thread state to Running 2025-02-21 18:40:29 +01:00
c722341d3f
core: Change naming for virtual memory structures to reflect x86_64 terms 2025-02-21 18:33:36 +01:00
e6bc3afcb8
init: Fix a few errors 2025-02-20 23:01:56 +01:00
5cb9689d10
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
b2d89ab4fd
init: Add basic virtual memory code 2025-02-20 18:05:11 +01:00
2ecd24df82
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
8ea5df2e4e
core: Give init a pointer to its own page tables 2025-02-20 17:57:50 +01:00
0782ff5fe7
core/x86_64: Fix function naming style 2025-02-20 17:55:56 +01:00
b14c473a29
core: Make some functions in thread.zig private 2025-02-18 20:10:14 +01:00
0ee587a142
core: Add sleep support to the scheduler 2025-02-18 20:06:40 +01:00
e27ef97682
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
9cdf9aa71b
core/x86_64: Make in/out wrappers inline 2025-02-17 23:04:58 +01:00
c455e8ea0b
core: Fix a small error in thread.zig 2025-02-17 23:04:43 +01:00
f0d5b60b83
core: Add priority-based scheduling 2025-02-17 20:15:30 +01:00
0edcae7aae
core: Store the physical page directory alongside the virtual pointer to it 2025-02-16 13:20:02 +01:00
d7557d84f7
init: Add system call handling code 2025-02-16 11:58:20 +01:00
46a0c8c800
core: Add memory and scheduler related system calls 2025-02-16 11:58:12 +01:00
5eabb6bdf0
core: Add PIT timer code to preempt the scheduler 2025-02-16 11:58:01 +01:00
c86481f2e7
core: Allocate a stack for each core's idle thread 2025-02-16 11:57:27 +01:00
6a2323c16b
core: Add thread states 2025-02-16 11:57:04 +01:00
77cee5aeb0
core: Add global FrameAllocator with locking 2025-02-16 11:56:14 +01:00
2fd618173f
core: Add spinlock code 2025-02-16 11:52:45 +01:00
09fb2b6554
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
2f77128437
Update README.md 2025-02-15 22:55:13 +01:00
614ed80980
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
985d8fec0a
core: Add basic threading code 2025-02-15 22:45:32 +01:00
14578a0fee
core/x86_64: Set up a second stack in the TSS to handle system calls 2025-02-15 22:40:48 +01:00
654b228f10
core: Fix a couple of bugs in VMM and add a few utility functions 2025-02-15 22:23:00 +01:00
ffa9b78bf7
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
da5335410d
core/x86_64: Add general protection fault handler 2025-02-15 22:19:08 +01:00
c4bb857c4e
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
baf3d39e98
core: Make findMultibootTags take a context argument
Will be useful later.
2025-02-15 22:18:05 +01:00
d8236bc8f7
core: Add a page fault handler 2025-02-15 15:18:40 +01:00
18ec598394
core: Enable interrupts in platformEndInit()
This way, each architecture can re-enable interrupts whenever necessary
2025-02-15 15:18:24 +01:00
1ec239147a
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
fce8a58cf6
Ready. Set. Go!
Microkernel development in Zig, should be fun! =]
2025-02-13 22:39:48 +01:00