Bananymous
29fd682672
Kernel: Store current processor pointer in IA32_GS_BASE
...
This allows easier access to processors fields
2024-03-07 16:05:29 +02:00
Bananymous
54f64e7618
Kernel: Move current page table to Processor
...
APs can now map kernel page table and print current time!
2024-03-06 02:19:59 +02:00
Bananymous
76b0f80169
Kernel: Move IDT to Processor
2024-03-06 00:45:54 +02:00
Bananymous
58aca68726
Kernel: Move GDT to Processor
2024-03-06 00:35:45 +02:00
Bananymous
9c36d7c338
BAN/Kernel: Rework assertion/panic system
...
BAN/Assert.h does not need any includes meaning it can be included
anywhere without problems.
2024-03-04 11:41:54 +02:00
Bananymous
8141b9977d
Kernel: Per processor information is now stored in class Processor
...
This allows us to allocate processor stacks, and other per processor
structures dynamically in runtime. Giving processor stack to
ap_trampoline feels super hacky, but it works for now.
2024-03-03 22:30:06 +02:00
Bananymous
c035d3c82c
Kernel: Start all processors on kernel boot
...
Processors don't do anything, except print hello message and halt.
2024-03-03 02:19:43 +02:00
Bananymous
ec0cb5fd54
Kernel: Remove CriticalScopes from memory handing code
2024-02-29 19:16:41 +02:00
Bananymous
d94f6388b7
Kernel: Fix all broken locks from new mutexes
2024-02-28 22:45:34 +02:00
Bananymous
9314528b9b
Kernel: Improve syscall handling
...
Syscalls are now called from a list of function pointers
2024-02-12 21:51:11 +02:00
Bananymous
139bb5c2a5
Kernel: Fix linker script
...
I have no idea why rodata was executable :D
2024-01-30 17:32:50 +02:00
Bananymous
dfe5a2d665
All: Cleanup all files
...
Add newline to end of files and remove whitespace from end of lines
2024-01-24 15:53:38 +02:00
Bananymous
b0ff2392a1
Kernel: Add some helpful debug prints
...
Log RIP when stack pointer is out of bounds.
Log all syscalls that return ENOTSUP
2024-01-03 02:08:01 +02:00
Bananymous
001e95f973
Kernel: Optimize sse saving/loading
...
Only save and load sse when new thread is trying to execute sse
instruction. There is no need to do that every time we enter kernel.
2024-01-03 02:06:49 +02:00
Bananymous
4307968182
All: Start work again on sse support
2023-12-28 19:14:42 +02:00
Bananymous
284a012509
Kernel: Add framebuffer information to kernel image
2023-12-09 17:33:58 +02:00
Bananymous
1c78671078
Kernel: Rework all signal code
...
Signal handling code was way too complex. Now everything is
simplified and there is no need for ThreadBlockers.
Only complication that this patch includes is that blocking syscalls
have to manually be made interruptable by signal. There might be some
clever solution to combat this is make this happen automatically.
2023-12-06 13:02:17 +02:00
Bananymous
84040e64b8
Kernel: Don't use multiboot2 explicitly. Parse it to common structure
...
This allows support of multiple different bootloaders
2023-11-17 18:54:59 +02:00
Bananymous
ca34ece8ef
BAN: Update ASSERT api
...
its now much harder to mix < with <= and > with >=
2023-11-02 00:01:12 +02:00
Bananymous
71ecdd7245
Kernel: Canonicalize vaddr before using it
2023-10-30 19:20:17 +02:00
Bananymous
42772611ce
Kernel: Add fast page to page table
...
Add "fast page" to KERNEL_OFFSET. This is always present in page
tables and only requires changing the page table entry to map. This
requires no interrupts since it should only be for very operations
like memcpy.
I used to map all temporary mappings to vaddr 0, but this is much
better. C++ standard always says that nullptr access is undefined
and this gets rid of it.
Fixed some bugs I found along the way
2023-10-30 19:02:09 +02:00
Bananymous
0c590821ed
Kernel: only map kernel from g_kernel_start onwards
2023-10-30 16:22:02 +02:00
Bananymous
6ef153b6ca
Kernel: Enable Write Protect. This seems to be good for security
2023-10-30 12:23:22 +02:00
Bananymous
130a69bac6
Kernel: Fix stack OOB detection
...
I now check both interrupt and normal stack to detect OOB. Processes
are killed if they encouner stack over/under flow.
2023-10-30 12:17:08 +02:00
Bananymous
0b5fcb3f88
Kernel/LibC: Add crt* files to LibC and remove crt0 from kernel
...
There was no reason for libc get crt0 from kernel.
2023-10-30 11:06:13 +02:00
Bananymous
c17cdb39d5
Kernel: Map multiboot2 memory in PageTable initialization
...
It cannot be assumed that multiboot data lies between kernel_end
and 2 GiB mark, so I properly allocate virtual address space for it.
2023-10-17 01:15:08 +03:00
Bananymous
69a39b7077
Kernel: Start using multiboot2 instead of multiboot
...
This allows better compatibility with (U)EFI and gives RSDP location
instead of me having to scan ram to find it.
2023-10-17 01:06:24 +03:00
Bananymous
128202a55a
Kernel: Cleanup GDT code
2023-10-13 16:18:22 +03:00
Bananymous
518fd3fad0
Kernel: Add 16 more irq handlers
...
IDT will now panic if trying to assing handler for non supported
irq.
2023-10-13 16:17:27 +03:00
Bananymous
27eb5af6f0
Kernel: Rework interrupt mechanism
...
All interruptrable classes now inherit from Interruptable which
has methdo handle_irq which is called on a interrupt.
2023-10-05 18:53:45 +03:00
Bananymous
245f58cc3a
Kernel: mmap regions are now demand paged
...
mmap will not actually take any memory unless you use the given
memory.
2023-09-28 21:07:14 +03:00
Bananymous
d7ecf94347
Kernel: Reboot will now always succeed
...
If acpi reset fails, we forcefully trigger a triple fault to restart
the system.
2023-09-28 13:53:03 +03:00
Bananymous
976114fde1
Kernel: Print more detailed output on ISR
2023-09-25 20:33:07 +03:00
Bananymous
7a7c5e433e
Kernel/LibC: add flag to enable/disable sse support
...
SSE support is very experimental and causes GP. I decided to make
SSE not default until I get to fixing it :)
2023-09-23 02:28:25 +03:00
Bananymous
dd0b8c4140
Kernel: Add pointer validation API to page table
2023-09-22 17:20:35 +03:00
Bananymous
7ec860a3d4
Kernel: Print stack trace on isr
2023-09-11 01:20:55 +03:00
Bananymous
921d95d18f
All: Clear lines with only whitspace in them
2023-09-10 00:31:42 +03:00
Bananymous
f75adab9d8
Kernel: Move structures in boot.S to .data section
2023-08-11 00:26:12 +03:00
Bananymous
0b8396b1a6
Kernel: IDT now sends EOI for every interrupt
...
EOI is sent before calling the interrupt handler. This should be fine
since all interrupts are processed with interrupts disabled
2023-08-09 09:57:02 +03:00
Bananymous
6fcb191ca0
Kernel: Add PageTable::Flags::CacheDisable
...
Also fix multiple places where we were using uint8_t as page table
flags instead of PageTable::flags_t which we promoted to uint16_t
while back.
2023-08-06 23:59:30 +03:00
Bananymous
659adb89a6
Kernel: Start work on abstracting Timers
2023-08-04 10:29:42 +03:00
Bananymous
643e87a076
Kernel: Threads are deleted sooner and cleaner
...
We now delete threads when
1. it is marked as Terminated and is the current thread
2. it tries to start execution in Terminated state
This allows us to never have thread executing in Terminated state
2023-08-04 10:29:42 +03:00
Bananymous
20eafb4cc4
Kernel: align userspace stacks
...
I was getting #GP on sse instructions
2023-08-03 18:09:48 +03:00
Bananymous
3139391e06
Kernel: Change PageTable API
...
Getting free pages not reserves them, so you don't have to hold
the page table lock :)
2023-08-02 22:09:14 +03:00
Bananymous
64ad752e73
Kernel: PageTable now supports reserved pages
...
You can now map pages as reserved, so that they will not be given
from get_free_page() or get_free_contiguous_pages().
2023-08-01 16:35:54 +03:00
Bananymous
a78a7ed156
Kernel: Cleanup returns from any kind on interrupts
2023-08-01 14:23:50 +03:00
Bananymous
b245a55ea0
Kernel: store/load sse/mmx/fpu state on isr/irq/syscall
...
I haven't tested this yet but should be fine. This will be optimized
to only save state from threads that are using it
2023-07-31 22:28:57 +03:00
Bananymous
c4f6c859c1
Kernel: Generally improve signals
2023-07-31 22:28:18 +03:00
Bananymous
1a6100f083
Kernel: Cleanup signal trampoline
2023-07-30 15:58:35 +03:00
Bananymous
de927b6b05
Kernel: Remove is_in_syscall from Thread
2023-07-30 14:49:51 +03:00
Bananymous
1d7795e22c
Kernel: Hardware exceptions now sends signals to userspace
2023-07-30 14:34:15 +03:00
Bananymous
9729e5a05b
Kernel: Change signal kernel API
...
return rsp and rip are now stored per thread
2023-07-23 18:33:10 +03:00
Bananymous
2dce0a0415
Kernel: Userspace signal handlers are now called one at a time
...
I added a syscall for telling the kernel when signal execution has
finished. We should send a random hash or id to the signal trampoline
that we would include in the syscall, so validity of signal exit can
be confirmed.
2023-07-23 13:34:53 +03:00
Bananymous
8063700d7b
Kernel: add default signal actions
2023-07-21 18:02:35 +03:00
Bananymous
c2cf98e32f
Kernel/LibC: Add bareboness signals
...
You can now call raise() to raise a signal. Signal handlers are
not yet supported, but the handling works :)
2023-07-21 15:45:02 +03:00
Bananymous
a1db032ba9
Kernel: kernel memory takes now full pml4e
...
This allows flags to work properly
2023-07-21 13:47:05 +03:00
Bananymous
5babd7b4f2
Kernel: remove PAGE_FLAGS_MASK as that was not correct anymore
...
After I added NXE bit, the flags mask is no longer valid
2023-07-21 12:01:50 +03:00
Bananymous
c0029a2fa2
Kernel: Don't map kernel executable memory as writable
2023-07-21 11:17:39 +03:00
Bananymous
4e35b8b49d
Kernel: Syscalls now get the interrupt stack
2023-07-21 11:04:16 +03:00
Bananymous
bf5d74b8bc
Kernel: fix memory leak in PageTable
...
PageTable used to leak 2 pages on creation and other two on deletion
2023-07-19 23:17:39 +03:00
Bananymous
98c698d9ec
Kernel: Enable global bit on kernel pages
2023-07-13 15:23:25 +03:00
Bananymous
9ea2c1d932
Kernel: Support execute disable bit
...
We will now map executable memory explicitly as executable.
2023-07-13 14:28:53 +03:00
Bananymous
4086d7c3be
Kernel: rework the whole PageTable structure
...
We now have page table structure for kernel memory which is shared
between all processes.
2023-07-05 23:41:35 +03:00
Bananymous
9a7b2587af
Kernel: kmalloc has now somewhat dynamic storage
...
Allocations bigger than PAGE_SIZE and those not forced to be identity
mapped are now done on a GeneralAllocator. This allows us to use kmalloc
for big allocations; bigger than the fixed 1 MiB storage.
This is still a hack and the whole kmalloc will have to be rewritten at
some point, but for now this does the job :D
2023-06-18 23:27:00 +03:00
Bananymous
57e59d998f
Kernel: Add enum for ISR name to number
2023-06-18 23:24:27 +03:00
Bananymous
23543b15ca
Kernel: Rework syscall calling
...
I removed the intermediate function when calling syscalls. Now syscall
handler calls the current process automatically. Only exception is
sys_fork, since it needs a assembly trampoline for the new thread.
2023-06-12 14:16:48 +03:00
Bananymous
caca6dc701
Kernel: Exceptions will now enable interrupts before calling exit()
...
this allows scheduler verification on reschedule() not panic
2023-06-11 03:29:22 +03:00
Bananymous
4cdeb98897
Kernel: We now store the processes exit code
2023-06-10 17:31:56 +03:00
Bananymous
841584ccbd
Kernel: get_free_contiguous_pages works with non-page aligned addresses
...
also fix bug in ordering
2023-06-06 02:03:23 +03:00
Bananymous
896b919c9d
Kernel/LibC: pass environ pointer to process
2023-06-05 21:12:08 +03:00
Bananymous
b403155ca9
Kernel: You can specify first vaddr for getting free pages
2023-06-04 01:15:48 +03:00
Bananymous
b168462b43
Kernel: PageTable now has debug_dump
...
This dumps all the mapped pages and their flags
2023-06-03 20:08:13 +03:00
Bananymous
68691faca1
Kernel: boot.S is back to 2 MiB pages
...
bochs doesn't seem to support 1 GiB pages
2023-06-03 18:53:36 +03:00
Bananymous
dcb23f686f
Kernel: boot.S maps GiB as single pdpte
2023-05-31 00:51:15 +03:00
Bananymous
650570e57d
Kernel: Fix comment
2023-05-31 00:51:15 +03:00
Bananymous
1f5a36f074
Kernel: PageTable destructor works now
...
we are successfully booting higher half kernel now :)
2023-05-31 00:44:14 +03:00
Bananymous
aeaf2cd3f1
Kernel: PageTable::create_userspace() now works
2023-05-31 00:44:14 +03:00
Bananymous
67886b0c5a
Kernel: Move V2P and P2V to Memory/Types.h
2023-05-30 23:57:03 +03:00
Bananymous
56eb6fb4ce
Kernel: PageTable::map_range_at maps correctly the last page
2023-05-30 23:56:07 +03:00
Bananymous
81cf389754
Kernel: Booting with higher half kernel gets to Heap initialization
2023-05-30 22:21:12 +03:00
Bananymous
0907965dc5
Kernel: start work on higher half kernel
2023-05-30 08:00:17 +03:00
Bananymous
210d90ec79
Kernel: We now identity map full GiB in boot.S
...
The paging structure is pre-built so no unnecessary calculations are done
2023-05-30 00:08:52 +03:00
Bananymous
5bb1f2a48c
Kernel: Rename MMU to PageTable
...
This is more descriptive name for what it actually represents
2023-05-29 21:06:09 +03:00
Bananymous
fb17af4844
Kernel/LibC: opening standard files is done in libc
2023-05-29 20:21:19 +03:00
Bananymous
b8ec8918b7
Kernel: We can't lock the MMU lock in load()
...
It needs to be callable always by scheduler
2023-05-29 19:39:35 +03:00
Bananymous
ff83f967d8
Kernel: Make RecursiveSpinLock thread safe
...
also SpinLock is now implemented with gcc builtins
2023-05-29 19:38:09 +03:00
Bananymous
ec73db0057
Kernel: Move page macros to Types.h
2023-05-28 21:03:08 +03:00
Bananymous
833642d405
Kernel: ISR will now crash userspace process instead of panicing kernel
2023-05-28 20:53:10 +03:00
Bananymous
3e93dae53c
Kernel: Add invalidate() to MMU
2023-05-28 18:05:49 +03:00
Bananymous
187bb046aa
Kernel: fix MMU::map_page_at()
...
We used to only reassign if flags changed
2023-05-28 17:57:05 +03:00
Bananymous
869de7283f
Kernel: MMU::get() is now MMU::kernel
...
MMU is can now be locked with RecursiveSpinLock.
Scheduler now has get_current_tid() that works before the Scheduler
is initialized. This allows RecursiveSpinLock usage early on.
2023-05-28 16:18:18 +03:00
Bananymous
e0a72defa2
Kernel: Add argc and argv to process entry
2023-05-16 00:27:49 +03:00
Bananymous
6acb86c14b
Kernel: MMU keeps track of the current
2023-05-16 00:26:39 +03:00
Bananymous
ec316391c5
Kernel: argc is passed as zero to userspace
2023-05-11 18:28:32 +03:00
Bananymous
ff2e2937a5
Kernel: Remove offset from OpenFileDescriptor
...
This is now handled on the libc side. There might be reasons to
have it in kernel side, but for simplicity's sake I'm moving it
to libc for now :)
2023-05-09 20:31:22 +03:00
Bananymous
512be884ed
Kernel: Add barebones GeneralAllocator for >4096B
2023-05-08 22:10:49 +03:00
Bananymous
ab8aac7dcf
Kernel: GDT tss selector is now 16 bit value
2023-05-06 17:34:22 +03:00
Bananymous
f36b94d039
Kernel: MMU can now provide info about virtual address space
2023-05-06 17:34:22 +03:00
Bananymous
92daa831d1
Kernel: ISRs now print pid and tid
2023-05-06 00:10:15 +03:00
Bananymous
e7a170c89f
Kernel: 64 bit MMU now properly identity maps kernel
2023-05-05 14:19:28 +03:00