e699eb4cfa
system: Split heap blocks more or less equally if possible
2025-03-07 20:08:56 +01:00
f41ad7e747
system+init+memory: Add basic IPC code
2025-03-07 18:00:00 +01:00
f7ed375e8e
system: Add a heap allocator for system processes
2025-03-07 17:58:23 +01:00
0bd80c93a2
system/x86_64: Add PAGE_SIZE to the vm file to be used by everyone
2025-03-07 17:54:35 +01:00
02762336a0
core+system: Add a "getAddressSpace()" system call
2025-03-05 19:11:49 +01:00
b5327891d8
core+system+boot: Move all boot modules into the astryon/ subfolder and add that to .gitignore
...
Accidentally committed the memory binary as I forgot to add it to gitignore. Let's not do this in the future.
2025-02-24 21:48:28 +01:00
6390785c4b
system: Add a memory manager stub
2025-02-24 19:19:09 +01:00
23334004a5
init: Calculate the number of threads loaded
...
This will be quite useful in the future.
2025-02-24 19:18:51 +01:00
0b32214f0e
core+system: Make the getPriority() and setPriority() syscalls accept a PID
2025-02-24 19:18:24 +01:00
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
d3231f1362
init: Use getThreadId() instead of relying on a fixed PID
2025-02-22 23:01:48 +01:00
aad9b8119b
system+init: Move userspace virtual memory code to the system library
2025-02-22 23:01:32 +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
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
5dac18ad8b
system: Fix syscall return value constraint
...
The previous constraint was making the compiler discard the return value when building in release mode.
2025-02-22 22:57:10 +01:00
8fd1eac5a8
system: Add comments to indicate which syscalls need which tokens
2025-02-22 20:13:17 +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
76ad9a7926
readme: Correct link to easyboot's LICENSE file
2025-02-21 20:35:32 +01:00
dcdca3522f
Update README.md
...
Basic scheduling is now (mostly) done.
2025-02-21 19:49:03 +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
43bb21af0b
init: Fix a few errors
2025-02-20 23:01:56 +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
240d9afe0e
init: Add basic virtual memory code
2025-02-20 18:05:11 +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
4e03fdca6a
init: Add system call handling code
2025-02-16 11:58:20 +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