Commit Graph

146 Commits

Author SHA1 Message Date
Bananymous 3d95cf02f3 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 dd3f34cb2c Kernel: Make RecursiveSpinLock thread safe
also SpinLock is now implemented with gcc builtins
2023-05-29 19:38:09 +03:00
Bananymous f964f6be8d Kernel: Move page macros to Types.h 2023-05-28 21:03:08 +03:00
Bananymous 0202ccec5f Kernel: ISR will now crash userspace process instead of panicing kernel 2023-05-28 20:53:10 +03:00
Bananymous c19f4c019a Kernel: Add invalidate() to MMU 2023-05-28 18:05:49 +03:00
Bananymous 83eb3dc0cb Kernel: fix MMU::map_page_at()
We used to only reassign if flags changed
2023-05-28 17:57:05 +03:00
Bananymous b847d7dfd5 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 f33e78882e Kernel: Add argc and argv to process entry 2023-05-16 00:27:49 +03:00
Bananymous 31ac3260ed Kernel: MMU keeps track of the current 2023-05-16 00:26:39 +03:00
Bananymous 85039020d3 Kernel: argc is passed as zero to userspace 2023-05-11 18:28:32 +03:00
Bananymous 1cf7ef3de6 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 812e61ca70 Kernel: Add barebones GeneralAllocator for >4096B 2023-05-08 22:10:49 +03:00
Bananymous bc35a561d3 Kernel: GDT tss selector is now 16 bit value 2023-05-06 17:34:22 +03:00
Bananymous 06bc807e34 Kernel: MMU can now provide info about virtual address space 2023-05-06 17:34:22 +03:00
Bananymous 6262e41de1 Kernel: ISRs now print pid and tid 2023-05-06 00:10:15 +03:00
Bananymous 0cb53efa01 Kernel: 64 bit MMU now properly identity maps kernel 2023-05-05 14:19:28 +03:00
Bananymous f139fc2229 Kernel: namespace and function renames
MMU moved to namespace kernel
Kernel::Memory::Heap moved to just Kernel
MMU::map_{page,range} renamed to identity_map_{page,range}

Add MMU::get_page_flags
2023-04-28 14:48:38 +03:00
Bananymous e48acbb03b Kernel: Add set_tss_stack() to 32 bit 2023-04-28 14:44:23 +03:00
Bananymous 6ecc8cac0e Kernel: TSS stack can be set after initialization 2023-04-25 14:48:12 +03:00
Bananymous 4f8f3ddc29 Kernel: Fix 32 bit MMU 2023-04-22 18:22:39 +03:00
Bananymous 8c1f5bfe1e Kernel: Remove obsolete userspace stuff from kernel 2023-04-22 15:38:45 +03:00
Bananymous 3ad0d2328d Kernel: Don't call 'cli' on interrupt
This is automatically done because we are using interrupt gates
in the IDT
2023-04-21 11:18:08 +03:00
Bananymous 3f2beb4547 Kernel: Fix syscall return value in 32 bit 2023-04-21 11:08:02 +03:00
Bananymous be14a6c239 Kernel: Stack pointer is validated when updated
This allows us not to fail stack pointer when in syscall since
interrupts use their own stack
2023-04-21 10:40:24 +03:00
Bananymous 3aa0eeb4a3 Kernel: Add barebones per process virtual addresses
We now assign every (userspace) process its own MMU which we load
in scheduler. This allows every process to have separate virtual
address space.

This is very hackish implementations but it works for now
2023-04-20 00:45:41 +03:00
Bananymous b3eeb6412f Kernel: Add some bareboness functionality to map virtual addresses 2023-04-19 23:51:36 +03:00
Bananymous d38470c8e2 Kernel: Rename MMU::{un,}allocate... to MMU::{un,}map
This is more appropriate name for the behaviour :D
2023-04-19 21:50:30 +03:00
Bananymous 2de64b592d Kernel: Kmalloc now has its memory statically allocated
We don't use the memory map given by bootloader since this automatically
maps the memory to a available space.
2023-04-18 10:18:15 +03:00
Bananymous 9c0f3dd996 Kernel: Move kmalloc and MMU to Memory directory 2023-04-18 10:18:15 +03:00
Bananymous fe87c08a02 LibC: add needed stubs to build executables with our compiler 2023-04-12 17:53:02 +03:00
Bananymous 8637959289 Kernel: We can create basic userspace processes
These are still allocated on the kernel memory
2023-04-12 17:52:36 +03:00
Bananymous e704968f96 Kernel: Threads can now be terminated mid execution 2023-04-10 21:07:25 +03:00
Bananymous 641ed23380 Kernel: Fix framepointers on started threads 2023-04-10 21:07:25 +03:00
Bananymous 9f977488fa BuildSystem: cmake can now build out libc
I can't seem to get libc++ build to work...
2023-04-10 21:07:25 +03:00
Bananymous e322826347 Kernel: Optimize scheduler idling
Now after each interrupt we will ask the scheduler to reschedule
if the current thread is the idle thread. This allows semaphore
unblocking to be practically instant when there is only one thread
executing.

Now disk reading is back to ~3 MB/s for single threaded process
2023-04-03 01:51:05 +03:00
Bananymous e49d3c7bfe BuildSystem: We are now using cmake instead of plain make
I have been annoyed for a while since I had to build everything
when running the os since the buildsystem was really bad.

I wanted to rewrite the whole build system and changed to using cmake

:)
2023-04-02 04:07:27 +03:00
Bananymous 8b8e3cbbf0 Kernel/Userspace: Start initial work on userspace and syscalls 2023-03-13 15:32:46 +02:00
Bananymous af854ec9e1 Kernel: Thread creation now takes void(*)() as entry and void* as data
This simplifies threading for the future and gets rid of (undefined?)
cast of member function pointer to address
2023-03-09 15:33:42 +02:00
Bananymous ed18d86f08 Kernel: Fix spinlock unlocking in x86_64
Spinlock unlock used a 64 bit write on 32 bit integer, overwriting
some random memory. This caused some really hard to find bugs
2023-03-08 02:41:44 +02:00
Bananymous df8811fc1a Kernel: Remove "a" from .section .text 2023-03-07 01:57:09 +02:00
Bananymous 06db890d49 Kernel: Add ubsan
My brain has been melting since I'm getting very random bugs.
I hope I can debug them better with ubsan :)
2023-03-06 23:38:05 +02:00
Bananymous 1dd61e93b6 Kernel: Threads cannot take arguments anymore 2023-03-02 01:56:09 +02:00
Bananymous 4d8bdec16d Kernel: fix i386 MMU 2023-03-02 00:47:29 +02:00
Bananymous 7fcbb869e1 Kernel: Initialize GDT in kernel code
We dont use the boot GDT only while booting
2023-03-01 21:21:56 +02:00
Bananymous 7f8cad83b1 Kernel: x86_64 boot script now makes GDT with null, kernel code and data 2023-03-01 21:21:56 +02:00
Bananymous 9756de02ef Kernel: MMU now takes flags when allocating pages 2023-03-01 21:21:56 +02:00
Bananymous 80f9428337 Kernel: Fix prefs font for 32 bit 2023-02-24 03:19:54 +02:00
Bananymous c9ea22f5e2 Kernel: IDT now confirms that it allocated succesfully 2023-02-22 21:48:40 +02:00
Bananymous d9c05b7378 Kernel: rewrite the whole kmalloc (again)
Performance of the old kmalloc implementation was terrible.
We now use fixed-width linked list allocations for sizes <= 60 bytes.
This is much faster than variable size allocation.

We don't use bitmap scanning anymore since it was probably the slow
part. Instead we use headers that tell allocations size and aligment.

I removed the kmalloc_eternal, even though it was very fast, there is
not really any need for it, since the only place it was used in was IDT.

These changes allowed my psf (font) parsing to go from ~500 ms to ~20 ms.
(coming soon :D)
2023-02-22 16:32:50 +02:00
Bananymous 1bd8b0fe5c Kernel: Sleep now actually sleeps and allows idling 2023-02-19 18:52:25 +02:00