Commit Graph

221 Commits

Author SHA1 Message Date
Bananymous d5f302a68b Kernel: kmalloc now uses two locks
One for fixed allocations and one for general allocations
2023-03-06 12:40:35 +02:00
Bananymous f1f5e76636 Kernel: kmalloc requires alignment to be power of two 2023-03-02 22:31:13 +02:00
Bananymous 52aa98ba25 Kernel+LibC: Add some errno codes
Kernel now returns ENOMEM and other errnos, so we dont have to write
error messages
2023-03-02 21:10:44 +02:00
Bananymous 90a7268e5a BAN: Rewrite RefCounted to return ErrorOr 2023-03-02 12:30:11 +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 ba8c4dbc7f Kernel: panic now disables interrupts as the first thing 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 7d84f290a1 Kernel: Add lock to Disk reads before I forget 2023-02-26 03:48:11 +02:00
Bananymous ee5d02aa70 Kernel: Rewrite basically all current disk io stuff
This is a big commit that was kinda hard to split to smaller ones.

Essentially we now look at all the mass storage devices from PCI
and initialize (P)ATA devices. This doesn't provide any more functionality
but better abstractions and everything doesn't have to be on its old
default port that might be different for modern computers.
2023-02-26 03:00:29 +02:00
Bananymous 40cf68a22a Kernel: Shell now sleeps through Scheduler and doesn't 'hlt'
ls doesn't crash when trying to list file
2023-02-26 02:57:27 +02:00
Bananymous 04bb08d27f Kernel: Add basic PCI enumeration 2023-02-26 02:56:53 +02:00
Bananymous 34f9912a1d Kernel: Add IO functions inl, outl, and ins{b,w,l} to read into buffer 2023-02-24 12:39:38 +02:00
Bananymous 80f9428337 Kernel: Fix prefs font for 32 bit 2023-02-24 03:19:54 +02:00
Bananymous 390a747768 Kernel: Add prefs font for terminal output before file system 2023-02-23 01:22:50 +02:00
Bananymous a4980acc88 Kernel: Fonts can now be parsed from the filesystem and set to terminal
We currently dont have a fallback font if we cannot get to filesystem
initialization, but that will come later. I can't test on real hardware
for this reason.
2023-02-22 22:29:31 +02:00
Bananymous 0e668738dc Kernel: Make some basic bitmap font parsing code 2023-02-22 22:28:12 +02:00
Bananymous a3e9e7d125 Kernel: Fix some shell commands 2023-02-22 21:55:32 +02:00
Bananymous 4cd99c71ca Kernel: kmalloc uses now spinlock and fix kmalloc_fixed() 2023-02-22 21:49:28 +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 5d31e89574 Kernel: Update ErrorOr API and add path find to VFS
These two are done on the same commit since Changes to Shell were
annoying to make work with only one change
2023-02-22 01:23:11 +02:00
Bananymous 038379274e Kernel: Inode can now return full mode value
Kernel::Inode::Mode is an union of bitmasked fields for every
possible bit
2023-02-20 21:39:24 +02:00
Bananymous efaca469ee Kernel: Ext2Inode now supports indirect blocks through for_each_block() 2023-02-20 10:25:15 +02:00
Bananymous 80006ea137 Kernel: Initial work on filesystem
We support now ext2 directory listing. File reading is not yet supported.
2023-02-20 01:46:00 +02:00
Bananymous 247f03c79e BAN: Make ErrorOr<> have attribute [[nodiscard]]
We don't have to specify it everytime we make function return ErrorOr
2023-02-19 20:10:30 +02:00
Bananymous feaeee11e5 Kernel: fix ARCH() macro and add helper macros for push/pop 2023-02-19 18:52:25 +02:00
Bananymous 0506fee34a Kernel: Shell's thread now uses sleep instead of polling
Also added 'sleep' command that just sleeps for 5 seconds
2023-02-19 18:52:25 +02:00
Bananymous 1bd8b0fe5c Kernel: Sleep now actually sleeps and allows idling 2023-02-19 18:52:25 +02:00
Bananymous 8f1b6da2af Kernel: Use Vector instead of raw poiters in Disk stuff
We now don't have to manually free allocated data
2023-02-16 20:48:41 +02:00
Bananymous 460fc3a29f Kernel: Start working on filesystem
We have a basic PATA driver (for reading) and gpt parser.
2023-02-16 20:00:31 +02:00
Bananymous 94cbacc998 Kernel: PIT now has very barebones sleep 2023-02-16 17:53:25 +02:00
Bananymous 1b45b4d728 Kernel: Remove unnecessary BOCKS_BREAK() 2023-02-16 17:52:39 +02:00
Bananymous 6a133782ed All: Move to c++20 2023-02-09 23:05:26 +02:00
Bananymous fb7fe73d49 Kernel: Add inw and outw to IO 2023-02-04 23:37:34 +02:00
Bananymous 6fab26692b Kernel: remove unnecessary function from x86_64 Thread.S 2023-02-02 23:48:18 +02:00
Bananymous 2161528cb6 Kernel: Shell is now launched as a capturing lambda 2023-02-02 23:27:51 +02:00
Bananymous cdbad56ed7 Kernel: Update shell thread command to run following command as thread
'thread echo "Hello World"' runs the command 'echo "Hello World"' after
5 seconds have passed. This was just my test code for threading
2023-02-02 23:26:19 +02:00
Bananymous 5b5e620d8a Kernel: Improve multithreading support
We can now use arbitary BAN::function<void(...)> as the Thread.
I also implemented multithreading for i386 since it was not done
on the initial multithreading commit.
2023-02-02 23:24:12 +02:00
Bananymous 777ede328e Kernel: Add helper functions for reading current rsp and rbp 2023-02-02 23:19:44 +02:00
Bananymous c85b97abee Kernel: fix some of i368 IDT. This was really broken 2023-02-02 15:52:06 +02:00
Bananymous 117d1de038 Kernel: panic does not need to include <kernel/kprint.h>
This allows us to not have kprint available literally everywhere
2023-02-02 15:51:15 +02:00
Bananymous 6cbad718fb Kernel: Add some more cxxabi functionality
We can now declate static variables in functions
2023-02-02 15:50:26 +02:00
Bananymous f6b05212e0 Kernel: Add is_locked() to spinlock
I think this is atomic read
2023-02-02 15:49:30 +02:00
Bananymous 01f267a321 Kernel: fix spinlock for i386 2023-02-02 15:49:00 +02:00
Bananymous 9b8de5025a All: rename every function from UpperCamelCase to snake_case
This was a mess since I didn't know which to use but now I decided
to go with snake_case :)
2023-02-01 21:05:44 +02:00
Bananymous 6a9d60a8fb Kernel: Implement somewhat functioning multithread support
This still uses only a single cpu, but we can now have 'parallelization'

This seems to work fine in qemu and bochs, but my own computer did not
like this when I last tried.

I have absolutely no idea how multithreading should actually be
implmemented and I just thought and implemented the most simple one I
could think of. This might not be in any way correct :D
2023-02-01 01:53:35 +02:00
Bananymous 7d8aafa0b5 Kernel: Add macros for current archutecture 2023-02-01 01:52:52 +02:00