4cd99c71ca
Kernel: kmalloc uses now spinlock and fix kmalloc_fixed()
2023-02-22 21:49:28 +02:00
c9ea22f5e2
Kernel: IDT now confirms that it allocated succesfully
2023-02-22 21:48:40 +02:00
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
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
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
efaca469ee
Kernel: Ext2Inode now supports indirect blocks through for_each_block()
2023-02-20 10:25:15 +02:00
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
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
feaeee11e5
Kernel: fix ARCH() macro and add helper macros for push/pop
2023-02-19 18:52:25 +02:00
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
1bd8b0fe5c
Kernel: Sleep now actually sleeps and allows idling
2023-02-19 18:52:25 +02:00
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
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
94cbacc998
Kernel: PIT now has very barebones sleep
2023-02-16 17:53:25 +02:00
1b45b4d728
Kernel: Remove unnecessary BOCKS_BREAK()
2023-02-16 17:52:39 +02:00
6a133782ed
All: Move to c++20
2023-02-09 23:05:26 +02:00
fb7fe73d49
Kernel: Add inw and outw to IO
2023-02-04 23:37:34 +02:00
6fab26692b
Kernel: remove unnecessary function from x86_64 Thread.S
2023-02-02 23:48:18 +02:00
2161528cb6
Kernel: Shell is now launched as a capturing lambda
2023-02-02 23:27:51 +02:00
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
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
777ede328e
Kernel: Add helper functions for reading current rsp and rbp
2023-02-02 23:19:44 +02:00
c85b97abee
Kernel: fix some of i368 IDT. This was really broken
2023-02-02 15:52:06 +02:00
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
6cbad718fb
Kernel: Add some more cxxabi functionality
...
We can now declate static variables in functions
2023-02-02 15:50:26 +02:00
f6b05212e0
Kernel: Add is_locked() to spinlock
...
I think this is atomic read
2023-02-02 15:49:30 +02:00
01f267a321
Kernel: fix spinlock for i386
2023-02-02 15:49:00 +02:00
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
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
7d8aafa0b5
Kernel: Add macros for current archutecture
2023-02-01 01:52:52 +02:00
337569b0ca
Kernel: Implement basic SpinLock
2023-02-01 01:52:52 +02:00
be502ae616
Kernel: Debug stacktrace now detects if it kernel panics itself
2023-01-31 18:43:09 +02:00
cb3b62d665
Kernel: Only allocate single GDT entry during boot.S
...
When we need more, we should probably initialize rest of them
in cpp code
2023-01-31 18:43:09 +02:00
1954f223ad
Kernel: Add no sse and sse2 for kernel code
2023-01-31 18:43:09 +02:00
1687028ed5
Kernel: Add constructor and destructor to MMU
2023-01-30 18:54:04 +02:00
6dc22b7251
Kernel: Add actual register values to x86_64 kernel panic
...
Very hackish implementation, but we now get actual registers at the
time of the interrupt happening
2023-01-30 18:52:38 +02:00
bfe3426f6d
Kernel: Add processor dump flag to APIC
2023-01-26 13:13:46 +02:00
6418d7cfc3
Kernel: Add Other GDT entries to x86_64
2023-01-26 12:53:04 +02:00
f0093ed2fd
Kernel: kmalloc_eternal now updates the used/free values
...
I also improved the kmalloc_dump_info() formatting. We format the
values as 8-digit hex numbers since (atleast for now) the kmalloc
will always be under 4 GiB address and size :)
2023-01-26 03:04:19 +02:00
e00d18029d
Kernel: rewrite some of APIC since it didn't work with xsdts for some reason
2023-01-26 02:57:14 +02:00
35d2e27292
Kernel: Improve MMU
...
We don't have to invalidate page in AllocatePage() if we don't make
any changes. We also should not assert on deallocating non-present
pages, just return early :)
2023-01-26 02:57:14 +02:00
589f338357
Kernel: Cleanup IDT register dump inline assembly
2023-01-26 02:57:14 +02:00
05b48fa71c
Kernel: add gcc option to make sure we have (r/e)bp saved on stack
2023-01-26 02:57:14 +02:00
aa0757e135
Kernel: Move dump_stacktrace from panic -> debug
2023-01-26 02:57:14 +02:00
e87026f01d
Kernel: I have no idea what this commit does
...
I had committed a change in IDT but reverted it now.
This propably only adds a spurious interrupt detection to common cpp
interrupt handler?
2023-01-26 02:55:37 +02:00
9c31790359
Kernel: Add option to disable Serial output
...
This makes all debug output to appear on the TTY
2023-01-25 22:51:42 +02:00
c0bc002ac6
Kernel: Move debug printing to its own file
...
It didn't make sense that dprint was defined in Serial.h.
We also now dump dprint to tty if there is no serial and tty is initialized
2023-01-25 22:51:42 +02:00
b315fdc27f
Kernel: Finally managed to get 64-bit working
...
I had weird problems with interrupts but everything should work now
2023-01-25 19:19:28 +02:00
c4670f49d4
Kernel: Refactor some IDT code
2023-01-25 19:19:28 +02:00
48348c9e57
Kernel: Cleanup APIC code. Remove unnecessary defines and add consts
2023-01-25 19:00:41 +02:00