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
Bananymous
55bb0084aa
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
acf5660090
Kernel: Add set_tss_stack() to 32 bit
2023-04-28 14:44:23 +03:00
Bananymous
f1a0625b61
Kernel: TSS stack can be set after initialization
2023-04-25 14:48:12 +03:00
Bananymous
fb6add2b4a
Kernel: Fix 32 bit MMU
2023-04-22 18:22:39 +03:00
Bananymous
e0ce2394fe
Kernel: Remove obsolete userspace stuff from kernel
2023-04-22 15:38:45 +03:00
Bananymous
fc71d2f7c4
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
35e949ef5e
Kernel: Fix syscall return value in 32 bit
2023-04-21 11:08:02 +03:00
Bananymous
9c506ef85b
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
b1c7af38d0
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
ea0c9b639f
Kernel: Add some bareboness functionality to map virtual addresses
2023-04-19 23:51:36 +03:00
Bananymous
0030f035be
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
6a3b3213cf
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
fdb4eb6042
Kernel: Move kmalloc and MMU to Memory directory
2023-04-18 10:18:15 +03:00
Bananymous
3f9d6f0311
LibC: add needed stubs to build executables with our compiler
2023-04-12 17:53:02 +03:00
Bananymous
8ee63f8264
Kernel: We can create basic userspace processes
...
These are still allocated on the kernel memory
2023-04-12 17:52:36 +03:00
Bananymous
f924ac9265
Kernel: Threads can now be terminated mid execution
2023-04-10 21:07:25 +03:00
Bananymous
3f01f936a1
Kernel: Fix framepointers on started threads
2023-04-10 21:07:25 +03:00
Bananymous
25ddc24754
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
c936aac777
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
4c5176f751
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
Bananymous
6fab26692b
Kernel: remove unnecessary function from x86_64 Thread.S
2023-02-02 23:48:18 +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
c85b97abee
Kernel: fix some of i368 IDT. This was really broken
2023-02-02 15:52:06 +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
337569b0ca
Kernel: Implement basic SpinLock
2023-02-01 01:52:52 +02:00
Bananymous
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
Bananymous
1687028ed5
Kernel: Add constructor and destructor to MMU
2023-01-30 18:54:04 +02:00
Bananymous
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
Bananymous
6418d7cfc3
Kernel: Add Other GDT entries to x86_64
2023-01-26 12:53:04 +02:00
Bananymous
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
Bananymous
589f338357
Kernel: Cleanup IDT register dump inline assembly
2023-01-26 02:57:14 +02:00
Bananymous
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
Bananymous
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
Bananymous
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
Bananymous
c4670f49d4
Kernel: Refactor some IDT code
2023-01-25 19:19:28 +02:00
Bananymous
ba53582f23
Kernel: Rewrite APIC and PIC more OOP friendly
...
x86_64 port is slowly coming together
2023-01-23 20:13:57 +02:00
Bananymous
54043288cb
Kernel: Move CPUID out of arch/
...
CPUID instructions behaves the same on x86 and x86_64. I am not
planning on supporting any non x86 based architectures.
2023-01-23 18:12:52 +02:00
Bananymous
1b9f7aa815
Kernel: Rewrite the whole VESA driver
...
We dont support vga text mode currently. I might add it later if needed.
I also removed mouse 'support' from Shell since it didn't do anything
and I didn't implement arbitary bitmap rendering to framebuffer
2023-01-23 13:21:53 +02:00
Bananymous
10c7ef7baa
Kernel: MMU rename weird variable
2023-01-22 20:16:44 +02:00
Bananymous
62469c529f
Kernel: IDT now allocates descriptors with kmalloc_eternal
2023-01-22 03:18:42 +02:00
Bananymous
cdd27ae3db
Kernel: rename MMU::m_page_directory_pointer_table -> m_highest_paging_stuct
...
This might not always be pdpt. In x86_64 it is pml4/pml5
2023-01-22 03:03:58 +02:00
Bananymous
6ec4ba3dc9
Kernel: Move dump_backtrace() out of arch.
...
I discovered __builtin_frame_address()
2023-01-22 03:00:13 +02:00
Bananymous
fbfb3d6b70
Kernel: IDT cleanup GateDesctiptor usage
...
And move everything to IDT namespace
2023-01-22 02:06:43 +02:00
Bananymous
558374a47c
Kernel: IDT flush only once in initialization
2023-01-22 02:06:43 +02:00
Bananymous
6e24ef8323
Kernel: IDT cleanup Kernel panic messages
2023-01-22 02:06:43 +02:00
Bananymous
3e8fbbaabd
Kernel: Fix small typos in IDT
2023-01-22 01:12:47 +02:00
Bananymous
491610db2c
Kernel: move GDT initialization to boot.S
2023-01-22 00:48:12 +02:00
Bananymous
aac7595a47
Kernel: cleanup boot.S code and enable SSE
2023-01-21 23:44:23 +02:00
Bananymous
b5453fad5c
Kernel: dump_stacktrace uses now "\r\n" line endings for bochs
2023-01-21 22:21:38 +02:00
Bananymous
bb051604a1
Kernel: Move dump_stacktrace() to arch folder
...
It uses mov instruction which has different register on x86/x86-64
2023-01-21 22:16:31 +02:00
Bananymous
9e092c80c0
Kernel: Cleanup boot.S
2023-01-21 22:16:01 +02:00
Bananymous
b9a4530e54
Kernel: Kernel::Panic now dumps stacktrace to com1
2023-01-16 21:50:50 +02:00