Commit Graph

184 Commits

Author SHA1 Message Date
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