Bananymous
801025ad7b
Kernel: Big commit. Rewrite ELF loading code
...
We now load ELF files to VirtualRanges instead of using kmalloc.
We have only a fixed 1 MiB kmalloc for big allocations and this
allows loading files even when they don't fit in there.
This caused me to rewrite the whole ELF loading process since the
loaded ELF is not in memory mapped by every process.
Virtual ranges allow you to zero out the memory and to copy into
them from arbitary byte buffers.
2023-06-09 00:37:43 +03:00
Bananymous
59b10c4d25
Kernel: PageTableScope locks the PageTable before disabling interrupts
...
This allows replacing some PageTableScopes with PageTable::lock()
2023-06-09 00:34:41 +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
24993f6020
LibC: implement setenv, unsetenv, putenv
2023-06-05 22:51:02 +03:00
Bananymous
55ea5c5488
Kernel: add basic support for environment variables
...
exec functions will search files from PATH
2023-06-05 22:51:02 +03:00
Bananymous
c6b5cc1e07
Kernel: exec now has better posix errors
2023-06-05 21:12:08 +03:00
Bananymous
896b919c9d
Kernel/LibC: pass environ pointer to process
2023-06-05 21:12:08 +03:00
Bananymous
6b73f4d187
Kernel: TTY now actually flushes on ^D
2023-06-05 20:21:46 +03:00
Bananymous
08a806e75d
Kernel: verify that loaded elfs are executable
2023-06-05 19:29:32 +03:00
Bananymous
cf88142856
Kernel: TTY now supports CSI s and u
...
These are commonly supported values to save and load cursor
position
2023-06-05 18:19:13 +03:00
Bananymous
d1ad38c8d4
Kernel/LibC: add SYS_STAT and stat(), lstat()
2023-06-05 14:37:14 +03:00
Bananymous
9fbb2b9369
Kernel: Add SYS_WAIT
...
This syscall waits for a given pid.
2023-06-04 18:00:52 +03:00
Bananymous
a3aca67eef
Kernel: fork() now clones current thread
...
This is how posix specifies thread cloning during fork
2023-06-04 17:40:37 +03:00
Bananymous
977652ad57
Kernel: Process FixedWidthAllocators come now in 4 sizes
2023-06-04 01:26:43 +03:00
Bananymous
5bf7ca1c80
Kernel: Allocators are now stored in UniqPtr
...
This allows proper memory management, we had some memory leak
2023-06-04 01:25:57 +03:00
Bananymous
1b1f22c35e
Kernel: make load_elf() its own function
2023-06-04 01:24:11 +03:00
Bananymous
479817231a
Kernel: PhysicalRange maps its nodes to kernel vaddr space
...
This keeps the lower half of address space cleaner
2023-06-04 01:20:47 +03:00
Bananymous
e3c5477df4
Kernel: reorder process exit steps
2023-06-04 01:19:04 +03:00
Bananymous
b403155ca9
Kernel: You can specify first vaddr for getting free pages
2023-06-04 01:15:48 +03:00
Bananymous
5f339d585c
Kernel: PAGE_FLAG_MASK is now only 0xF
...
We don't care currenly about anything but the last few bits
2023-06-03 20:08:13 +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
9228df0f23
Kernel: Inode/Device detection is done with overridden bool functions
2023-06-03 13:28:15 +03:00
Bananymous
402ad85583
Kernel: Heap will return 0 if no free page is available
2023-06-03 02:55:31 +03:00
Bananymous
53e91ba98a
Kernel: DiskCache will try to shrink_to_fit after cache cleanup
2023-06-03 02:55:22 +03:00
Bananymous
fd153f3762
Kernel: DiskCache won't crash when running out of kmalloc memory
2023-06-03 02:36:20 +03:00
Bananymous
813d0f1b5f
Kernel: add basic disk cache
...
ATADevices now add disk cache to themselves
2023-06-03 02:23:14 +03:00
Bananymous
2b901abfb1
Kernel: Shell 'memory' now prints heap memory usage
2023-06-03 02:22:18 +03:00
Bananymous
8645c4c653
Kernel: Shell ls and stat now properly show symlinks
2023-06-02 18:22:56 +03:00
Bananymous
7aea8c45f7
Kernel: VFS now has max link depth of 100
2023-06-02 12:50:40 +03:00
Bananymous
7bbdee6cc4
Kernel: Symlinks are now working
...
We still have to implement loop or depth detection
2023-06-02 11:43:46 +03:00
Bananymous
ff548bd898
Kernel: Shell can now list symlinks
2023-06-01 00:25:53 +03:00
Bananymous
835d32814d
Kernel: add basic support for symlinks
2023-06-01 00:24:45 +03:00
Bananymous
79d1f665f2
Kernel: Shell opens standard files
2023-05-31 23:14:15 +03:00
Bananymous
1daa1f5611
Kernel: Cleanup exec code
2023-05-31 22:36:05 +03:00
Bananymous
24a190d1f7
Kernel: Add SYS_EXEC syscall
2023-05-31 20:57:33 +03:00
Bananymous
b48b239882
Kernel: Implement Process::exec()
2023-05-31 20:56:29 +03:00
Bananymous
5fb69300ca
Kernel: Move userspace entry functions to Process instead of Thread
2023-05-31 19:31:10 +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
959c0fc572
Kernel: kmalloc free error prints the pointer
2023-05-31 00:34:56 +03:00
Bananymous
e3d3788f28
Kernel: RSDP location is now done with virtual addresses
2023-05-31 00:34:21 +03:00
Bananymous
850b7f27a2
Kernel: Physical range now calculates RAM with physical addresses
2023-05-31 00:33:44 +03:00
Bananymous
0939f23b04
Kernel: Heap gets multiboot pointer with P2V
2023-05-30 23:57:44 +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
8bea18a6f2
Kernel: Remove unused includes of CriticalScope
2023-05-29 21:15:55 +03:00
Bananymous
861966eed6
Kernel: Remove unnecessary usages of PageTableScope
...
This should be used as few times as possible since it calls 'cli'
2023-05-29 21:11:29 +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
998999a755
Kernel: Add SYS_SLEEP
2023-05-28 22:34:48 +03:00
Bananymous
09666adc53
Kernel: fork() now copies allocations through FixedWidthAllocator
2023-05-28 21:34:35 +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
f04399c3a0
Kernel: fork() now copies allocation done through GeneralAllocator
2023-05-28 20:37:39 +03:00
Bananymous
f2d767b799
Kernel: Add bareboness fork() function
2023-05-28 18:08:49 +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
b021d3eebd
Kernel: Processes and Threads use VirtualRange memory allocations
2023-05-28 17:48:34 +03:00
Bananymous
15842db83e
Kernel: Move PhysicalRange to its own file and add VirtualRange
2023-05-28 17:48:34 +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
eb24d32383
Kernel: Directory listing is working again
2023-05-26 22:31:21 +03:00
Bananymous
565e3db22d
Kernel: kmalloc debug_dump is marked [[maybe_unused]]
2023-05-26 22:31:21 +03:00
Bananymous
faf14b880e
LibC: Rewrite all the headers.
...
We now have more or less posix issue 2018 conforming libc headers.
This was a really time consuming and boring operation but it had to
be done.
Now we get to actually start implementing libc :)
2023-05-26 22:31:21 +03:00
Bananymous
27147790fd
Userspace: Start work on shell
2023-05-26 22:31:21 +03:00
Bananymous
1658e925f2
Kernel: Add bareboness possibility to set termios
2023-05-26 22:31:21 +03:00
Bananymous
80d9f6131b
Kernel/LibC: move file offset back to kernel
...
This makes keeping track of offsets easier and more proper
2023-05-26 22:31:21 +03:00
Bananymous
e0a72defa2
Kernel: Add argc and argv to process entry
2023-05-16 00:27:49 +03:00
Bananymous
e0a7e242f8
Kernel: Add MMUScope
...
This disables interrupts and loads specified mmu for the
scope it lives in
2023-05-16 00:26:39 +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
177b205c48
BuildSystem: userspace has cmake target
2023-05-11 16:19:53 +03:00
Bananymous
729ff267d7
LibC: add function declarations to sys/stat.h
2023-05-11 15:11:33 +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
f1667b398a
Kernel: FixedWidthAllocator operates on MMU
...
Instead of Process* we use MMU& in FixedWidthAllocator since it is
everything it actually needs :)
2023-05-08 00:06:56 +03:00
Bananymous
b0ec0f1a1a
Kernel: We add FixedWidthAllocators on demand
...
On SYS_ALLOC we will add a new FixedWidthAllocator if the old ones
are already full or we don't have one with proper size. This allows
arbitary number of allocations as long as you have enough memory
available :)
Next I will be writing a general allocator for allocations larger
than 4096 bytes which should make SYS_ALLOC syscall complete :)
2023-05-07 23:57:01 +03:00
Bananymous
12e42f40c5
Kernel/LibC: add free function for FixedWidthAllocator
...
I have to rework the syscall API and allocators in process. For
now this works well enough :)
2023-05-07 01:21:50 +03:00
Bananymous
890aa9aa15
BuildSystem: linker -O2 doesn't do anything? hopefully
2023-05-06 19:58:08 +03:00
Bananymous
bcfd838131
Kernel: Add basic fixed width allocator for userspace
...
We have to move process stacks to the general heap and maybe map
kernel to higher half.
2023-05-06 19:58:08 +03:00
Bananymous
9c07add00f
Kernel: Invalid physical addresses from heap are specified now by 0
2023-05-06 17:34:22 +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
3c5d3eb8ad
Kernel: TTY input process is now single instance
...
Process sends key events to the active (currently only) tty
2023-04-30 16:11:14 +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
9d7530662f
Kernel: dprintln file name is now relative
...
This makes file names much shorter
2023-04-28 14:43:19 +03:00
Bananymous
a22caa38d2
Kernel: Scheduler updates tss stack on thread execution
2023-04-25 14:49:50 +03:00
Bananymous
dc0f8b383f
Kernel: Usespace threads now have an interrupt stack
2023-04-25 14:49:18 +03:00
Bananymous
f1a0625b61
Kernel: TSS stack can be set after initialization
2023-04-25 14:48:12 +03:00
Bananymous
02b961fd7e
Kernel: Stack pointer out of bounds now panics with a message
2023-04-25 13:40:55 +03:00
Bananymous
6e01e04922
Kernel: Fix bug in Process::create_userspace()
...
We used to write more than we needed to. This could lead to unwanted
page faults
2023-04-25 13:21:28 +03:00
Bananymous
b7c2ea8d46
Kernel: Fix possible dead lock in Process::read()
2023-04-23 14:46:18 +03:00
Bananymous
cd74b2167d
LibC: Write mostly functioning stdio
2023-04-23 14:32:37 +03:00
Bananymous
9b2a577fc3
Kernel: Add ASSERTion to Process::exit()
...
This is just so I don't forget that exit can currently only
be called on the executing thread itself
2023-04-22 19:05:27 +03:00
Bananymous
2dd09163e6
Kernel: Process can now load 32 bit elf files on i386
...
We are page faulting on process exit but I'm investigating
the reason.
2023-04-22 19:03:30 +03:00
Bananymous
fb6add2b4a
Kernel: Fix 32 bit MMU
2023-04-22 18:22:39 +03:00
Bananymous
48445f12ac
Kernel: More proper paging in Elf loading
2023-04-22 18:17:44 +03:00
Bananymous
792fad2a03
Kernel: d{print,warn,error}ln(...) now has a spinlock
2023-04-22 17:58:51 +03:00
Bananymous
cc04990ce3
Kernel: Process now frees up its pages on destruction
2023-04-22 16:54:46 +03:00
Bananymous
7530482cc2
Kernel: Cleanup process creation for userspace
2023-04-22 16:51:50 +03:00
Bananymous
33d8c518e9
Kernel: Fix some deadlocks in the Process
2023-04-22 16:19:57 +03:00
Bananymous
e0ce2394fe
Kernel: Remove obsolete userspace stuff from kernel
2023-04-22 15:38:45 +03:00
Bananymous
fadce063a7
Kernel: Usespace programs are now ran through ELF files
...
only 64 bit elf files are supported for now.
2023-04-22 15:35:32 +03:00
Bananymous
26fe6ad898
Kernel: kmalloc does not dump stack trace
...
dump_stack_trace() page faults and i dont feel like debugging this
now :)
2023-04-21 13:45:13 +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
c26529ae86
Kernel: kmalloc will always print debug on failed alloc
2023-04-19 18:05:01 +03:00
Bananymous
e8a0df54b1
Kernel: ATAController will fail to initialize in native mode
2023-04-19 17:29:36 +03:00
Bananymous
33393335c8
Kernel: PCI devices now report their prog_if
2023-04-19 16:43:05 +03:00
Bananymous
c5b02bb9f5
Kernel: Shell fix file reading
...
We were reading 8 bytes at a time instead of the 1024 we were
supposed to :DD
2023-04-19 14:09:23 +03:00
Bananymous
a1047918d2
Kernel: Shell now has exit() command
2023-04-19 12:53:09 +03:00
Bananymous
fd81e31050
Kernel: Fix Process::exit() and where it is called from
...
cksum doesn't seem to work anymore on big files. I have to look
into this. It locks up after couple of seconds...
2023-04-19 12:52:21 +03:00
Bananymous
dcce18799f
Kernel: We now launch Shell again on boot
...
Adding this just before push :D
2023-04-19 00:41:24 +03:00
Bananymous
a9a15ea2c0
Kernel: init2 is now launched as a process instead of thread
...
Also only process can now add threads to scheduler. Nobody should
have raw access to scheduler and everything should be through
Process::current() or irqs (reschedules)
2023-04-19 00:39:06 +03:00
Bananymous
d63716db96
Kernel: Process is not reference counted any more
...
This was not necessary and it made things needlessly complicated
2023-04-19 00:34:18 +03:00
Bananymous
96ac072166
Kernel: Heap allows us to take free pages.
...
The API is kinda weird and will probably be reworked in near future
but this will work for now :)
2023-04-18 10:18:15 +03:00
Bananymous
295a27f16a
Kernel: Panic wont print stacktrace if it has already paniced
...
This prevents stack trace dump to panic and loop
2023-04-18 10:18:15 +03:00
Bananymous
88f60b5e41
Kernel: Map all ACPI tables on initialization
...
This makes their usage much easier and less error prone
They won't mapped be processes when we get to there, so this won't be
a problem
2023-04-18 10:18:15 +03:00
Bananymous
d23604b0d5
Kernel: Handle some Heap edge cases
2023-04-18 10:18:15 +03:00
Bananymous
c5347e6707
Kernel: Reorder boot initialization
...
We now create the TTY as soon as possible so we can show console
output without serial port.
2023-04-18 10:18:15 +03:00
Bananymous
bf0c7b9ae8
Kernel: Heap implementation can now give free pages from all of RAM
2023-04-18 10:18:15 +03:00
Bananymous
0374b68fa1
Kernel: Remove unused file
2023-04-18 10:18:15 +03:00
Bananymous
633929629c
Kernel: Start working on heap
2023-04-18 10:18:15 +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
998ae511a3
LibELF: Start implementing elf library
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
34358b8471
Kernel: Scheduler can now terminate processes threads
2023-04-12 17:49:04 +03:00
Bananymous
5b1af4ec47
Kernel: Debug::dump_stack_trace now 'detects' repeating function
2023-04-12 01:32:41 +03:00
Bananymous
071d7af58a
Kernel: kmalloc does not check for corruptiong unless it cannot allocate
...
We 'don't care' if kmalloc is corrupted unless it prevents us from
allocating memory. Scheduler should be catching stack overflows either
way and is much more efficient
2023-04-12 00:24:02 +03:00
Bananymous
3201c3654e
Kernel: Threads now use only 4 KiB stack :)
2023-04-12 00:22:08 +03:00
Bananymous
6ed3023725
Kernel: Fix TTY spinlock usage
2023-04-12 00:20:04 +03:00
Bananymous
892a63aec5
Kernel: Shell TTY_PRINT is now function instead of macro
...
This makes functions uses way less stack
2023-04-12 00:18:58 +03:00
Bananymous
3fe889d4a4
BuildSystem: GCC will now complain on functions with 1 KiB stack
2023-04-12 00:18:06 +03:00
Bananymous
cafd546ce8
Kernel: kmalloc now detects corruption
...
Kmalloc checks if its nodes have corrupted. This was happening
because of stack overflow.
2023-04-11 23:36:46 +03:00
Bananymous
5810a77cbf
Kernel: Mark Scheduler::start() as noreturn as appropriate
2023-04-11 23:33:20 +03:00
Bananymous
6f7045ead2
Kernel: kernel doesn't allocate large blocks of data on stack
...
We used to allocate 1 KiB blocks on multiple places on stack. This
is a problem, since kernel stack shouldn't have to be too big
2023-04-11 23:31:58 +03:00
Bananymous
40f9a42c00
Kernel: Scheduler will panic if it encounters stack overflow
2023-04-11 23:29:21 +03:00
Bananymous
9abe1f27bb
Kernel: Process now locks the mutex while modifying open files
...
This allows processes to be actually removed from the list instead
of dead locking
2023-04-11 23:28:16 +03:00
Bananymous
aa2aee684b
Kernel: remove message from BAN::Error
...
We don't store the error message anymore in BAN::Error.
Instead we store a error code that can be mapped into a string.
This allows BAN::Error to only take 4 bytes instead of 128.
We should also make some kernel initialization just panic instead
of returning errors since they are required for succesfull boot
anyway.
2023-04-11 23:25:21 +03:00
Bananymous
cfa025acae
BAN: Move RefPtr to its own file and create New.h
...
New.h contains definitions for placement new operators and
BAN::allocator and BAN::dealloctor
2023-04-10 21:07:25 +03:00
Bananymous
781cc78a1f
BuildSystem: Fix header copying to sysroot
...
We used to copy all headers everytime to sysroot which caused
rebuild of the whole os. Now we use the cmake command
'copy_directory_if_different' which seemed to fix this issue :)
2023-04-10 21:07:25 +03:00
Bananymous
f924ac9265
Kernel: Threads can now be terminated mid execution
2023-04-10 21:07:25 +03:00
Bananymous
df6e8a6562
Kernel: Add small wait in ATA driver before reading/writing
...
This allows bochs to boot again
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
3fbee2c835
BuildSystem: remove now obsolete include directories from kernel build
2023-04-07 02:25:47 +03:00
Bananymous
2a8dc58b6a
BuildSystem: Cleanup cmake code
...
The buildsystem is kind of a mess. I will be writingn build
instructions soon.
2023-04-06 20:31:10 +03:00
Bananymous
8a8793fd2d
BuildSystem: you can now build the toolchain with cmake
2023-04-06 00:23:02 +03:00
Bananymous
9e0b4132ee
Kernel: Shell now somewhat functions again
...
I will not be fixing the shell implementation until I get to
userspace
2023-04-05 11:37:41 +03:00
Bananymous
68158324f4
Kernel: Fix TTY echo and canonical flag behaviour
2023-04-05 11:35:19 +03:00
Bananymous
a420be6b20
Kernel: Fix ansi control sequence cursor movement
2023-04-05 03:07:52 +03:00
Bananymous
f281543255
Kernel: Add tty to process and make termios modifiable
2023-04-05 02:53:28 +03:00
Bananymous
dcf0969e2d
Kernel: TTY now supports clearing
2023-04-05 02:04:18 +03:00
Bananymous
4f522d337a
Kernel: Add partial support for shell
...
We don't handle arrow keys, and the tty does not know how to clear
the screeen :D
2023-04-05 01:30:58 +03:00
Bananymous
af0979ec32
Kernel: Process can now initialize stdio
...
This allows the use of the fds STD{IN,OUT,ERR}_FILENO
2023-04-05 01:10:25 +03:00
Bananymous
7f95444bb5
Kernel: Start work on making tty a file
...
TTY is now a file that you can read from/write to. I still have
to port shell to use this new interface
2023-04-05 00:56:09 +03:00
Bananymous
783842bac2
Kernel: add virtual write function to inode
2023-04-03 20:29:07 +03:00
Bananymous
e1534ad25b
Kernel: Fix keys in PS2Keymap
2023-04-03 20:25:23 +03:00
Bananymous
ee1f3623ce
Kernel: Fix typo
2023-04-03 19:56:55 +03:00
Bananymous
dffdb51713
BuildSystem: remove non-existent file from kernel CMakeLists.txt
2023-04-03 19:02:25 +03:00
Bananymous
b87dae7e7c
Kernel: Device dev and rdev number is done more properly
...
Also hd* partitions are now 1 indexed instead of 0
2023-04-03 11:43:16 +03:00
Bananymous
2ffee63889
Kernel: Cleaner partition parsing errors
2023-04-03 09:55:49 +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
46d65471d9
Kernel: ATA now uses irqs instead of polling
...
Reading is now much slower at ~500 kB/s it was around 3 MB/s.
This is probably mostly due semaphore blocking taking atleast
until next reschedule (1 ms itervals). This will be a problem
as long as we are using only single processor.
I could try to use {READ/WRITE}_MULTIPLE commands, but since
most of the disk reads are 2 sectors (inode block size) this
will at most double the speed.
Most efficient speed up would of course be caching disk access
data and inodes overall.
2023-04-03 00:03:38 +03:00
Bananymous
dcc174b62e
Kernel: Move ATADevice to its own file from ATAController
...
The API is kinda weird since device reads/writes go from
ATADevice -> ATAController -> ATADevice
but this is for now atleast necessary since ATAController has(?)
to keep all devices from using the disks at the same time
2023-04-02 18:26:19 +03:00
Bananymous
bdc7a99c59
Kernel: ATA controller waits now before read/write until disk is ready
...
Qemu used to freeze on disk writes but now it seems fine
2023-04-02 05:37:17 +03:00
Bananymous
2aad357c18
BuildSystem: building for 32-bit works now
2023-04-02 05:03:17 +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
cbb0f6be9a
Kernel: cleanup includes
...
I went quickly went through all files since I found some weird
includes :D
2023-04-01 02:14:49 +03:00
Bananymous
a60f8098ee
Kernel: Fix traversing back from mount points
2023-04-01 01:54:35 +03:00
Bananymous
8bffbf64b9
Kernel: Add inodes '.' and '..' to device manager
2023-04-01 01:33:04 +03:00
Bananymous
d91a5bccf4
Kernel: Reads return 0 bytes read at the end of device
...
We used to not have any idea if we where already at the end of device.
Also fixed couple of copy-paste errors from read->write
2023-04-01 00:55:07 +03:00
Bananymous
1ca0d3a3c1
Kernel: Shell cleanup cat command
2023-04-01 00:54:39 +03:00
Bananymous
653f688567
Kernel: Shell 'time' prints the time even if command fails
2023-04-01 00:30:33 +03:00
Bananymous
8b5d8d9f8a
Kernel: Process gets absolute paths for mount
2023-04-01 00:30:11 +03:00
Bananymous
c45ada6ccb
Kernel: fix ext2 failed creation memory leak
2023-04-01 00:22:03 +03:00
Bananymous
db65cfeb8a
Kernel: Cleanup ATA device initialization
2023-03-31 00:58:57 +03:00
Bananymous
a3ba6da6f3
Kernel: Move DeviceManager to its own file
2023-03-30 22:39:45 +03:00
Bananymous
b048630e5b
Kernel: Improve locking in Process, VFS and ATAController
...
We used to block on all process access. This meant that shell
reading the keyboard input would block all VFS access making disk
accesses practically impossible. We now block only when it is
necessary :)
2023-03-30 22:02:16 +03:00
Bananymous
dcee92a6bc
Kernel: Thread is no longer RefCounted
...
This makes developement with Scheduler much easier against compiler
optimizations. I could now remove the pragma GCC optimize stuff.
2023-03-30 19:16:51 +03:00
Bananymous
c2e3b422cc
Kernel: Add Semaphore to block threads
2023-03-30 18:46:33 +03:00
Bananymous
d4c03d3939
Kernel: root partition is now passed from the commandline
2023-03-30 18:46:19 +03:00
Bananymous
8e68d2e3ea
Kernel: Shell can now mount partitions
2023-03-30 15:06:41 +03:00
Bananymous
30c33b55e3
Kernel: Inode::Mode is now a struct so we can have functions in it
2023-03-30 14:41:15 +03:00
Bananymous
e2791e5260
Kernel: StorageDevices and Controllers are now devices
2023-03-30 14:22:15 +03:00
Bananymous
88a8bd659d
Kernel: Add IFBLK, IFLNK, IFSOCK to Inode::Mode
2023-03-30 13:15:46 +03:00
Bananymous
f9cc114907
Kernel: All devices have atime, mtime, ctime at their creation
2023-03-30 13:15:46 +03:00
Bananymous
9a4d603a62
Kernel: Remove the mount test from VFS
2023-03-30 11:43:24 +03:00
Bananymous
78ea4b2207
Kernel: fix stat command and device numbers
2023-03-30 10:43:08 +03:00
Bananymous
ab3cdea548
Kernel: Rewrite mounting code
2023-03-29 21:34:48 +03:00
Bananymous
dd84a2175f
Kernel: Move Partition out of StorageDevice and rename functions
2023-03-29 13:23:01 +03:00
Bananymous
ae05ad3f38
Kernel: Shell commands 'ls' and 'stat' recognize character devices
2023-03-29 11:56:33 +03:00
Bananymous
62fb233eb1
Kernel: DeviceManager is now a 'FileSystem' so it can expose devices
...
Shell reads keyboard through /dev/input :)
2023-03-29 11:50:46 +03:00
Bananymous
426b1482dd
Kernel: Fix keymap numlock behaviour
2023-03-29 03:18:22 +03:00
Bananymous
16d9d29971
Kernel: Remove obsolete KeyboardLayout/
...
This was used by the old input system. Currently keyboard layout is
hardcoded to finnish. But it will be reworked as something read from
the filesystem
2023-03-29 03:09:14 +03:00
Bananymous
fa8e921ee8
Kernel: Rework the whole input system
...
We now use Device abstraction that will allow us to provide devices
to userspace through /dev. Currently Shell reads from first and only
device (it being PS/2 Keyboard).
2023-03-29 03:05:16 +03:00
Bananymous
ea900ad744
Kernel: ACPI unmap_header does not do anything
...
We have to work with MMU mapping/unmapping to be user friendly
2023-03-28 02:56:44 +03:00
Bananymous
c7286396d8
Kernel: Move ACPI to its own file
2023-03-27 17:30:45 +03:00
Bananymous
666051fd34
Kernel/BAN: move unix time conversion to BAN and add stat to Shell
2023-03-27 00:49:58 +03:00
Bananymous
e55860eb6b
Kernel: Rework processes and VFS so we don't expose inodes
...
Everything is now done through a file descriptor.
2023-03-26 04:30:57 +03:00
Bananymous
1fade1aa9e
Kernel: Process::working_directory() is now thread safe
...
I realized you cannot return a stirng view and it to be thread safe
2023-03-24 01:46:25 +02:00
Bananymous
814f0b215d
Kernel: Create RecursiveSpinLock and add it to Process
...
We now lock every function within Proccess, just to be sure.
Recursive lock allows us to use lock from the same thread even if
we already have the spinlock locked
2023-03-24 01:32:35 +02:00
Bananymous
5fd26b4ea8
Kernel: Lock process functions instead of the ata controller
...
Process has to use locks at least on some functions so multithreaded
disk io is safe. This seemed to fix corrupted reads from disk
2023-03-24 01:17:39 +02:00
Bananymous
e5eab8bae4
Kernel: Ext2FS now does allocations better
...
We only have to allocate at the beginning of the all functions and
can properly exit before any disk reads if we run out of memory.
This makes development little bit 'harder' since the {read,write}_block
user must allocate a buffer of atleast block_size bytes.
I also made disk access to cause kernel panic on error since the error
handling during file write is something I don't want to think now.
The filesystem can easily corrupt so, I feel like when disk io starts
to fail I'll come back to this.
2023-03-23 23:22:31 +02:00
Bananymous
75c4f35e85
Kernel: Add possibiliity to create empty files on Ext2
...
Big rewrite for Ext2 for more easy and optimized code
2023-03-23 22:26:06 +02:00
Bananymous
633414bd20
Kernel: Remove block group descriptor cache from ext2fs
...
This will make improving the fs easier since we need to only update
the values on the disk
2023-03-23 18:52:58 +02:00
Bananymous
7ca6cd61be
Kernel: Move get_unix_time to RTC namespace
2023-03-23 18:14:51 +02:00
Bananymous
3ef72e8a7b
BAN: Modify Span constructors to keep constness correctly
2023-03-23 14:26:03 +02:00
Bananymous
9b56801c3d
Kernel: StorageDevice and Ext2 "support" writing
2023-03-23 13:04:13 +02:00
Bananymous
5f6c58ffd2
Kernel: Shell now prints unix time with 'date' command
2023-03-23 11:13:51 +02:00
Bananymous
74949401bd
Kernel: Cleanup GPT parsing code
2023-03-23 11:13:14 +02:00
Bananymous
4ffc69a6e4
Kernel: TTY buffer is resized on font size change
...
Shell also has better line wrapping. You still can't visually go
back to previous line, but atleas we now write from the beginning
of the line
2023-03-22 02:09:22 +02:00
Bananymous
61ac9833be
Kernel: Reading from fd verifies that file is opened for reading
2023-03-22 01:55:58 +02:00
Bananymous
dbf7d9f19e
Kernel: Ext2 directory functions now fail on invalid blocks
...
Invalid blocks should only happen while writing to a file and
I think in that case we should just bail out instead of giving
you incomlete inode list or search result.
2023-03-22 01:55:57 +02:00
Bananymous
a6e5a0b704
Kernel: cksum uses now a different crc32_table to match linux 'cksum'
2023-03-22 01:55:21 +02:00
Bananymous
337463ec16
Kernel: Ext2 can now read from non-block-size aligned offsets
2023-03-21 19:19:17 +02:00
Bananymous
072954480d
Kernel: Remove obsolete Ext2FS::ext2_root_inode()
...
This was not used by anyone and the cast was wrong anyway
2023-03-21 18:19:48 +02:00
Bananymous
3652d11059
Kernel: Remove for_each_block from Ext2
2023-03-21 18:14:02 +02:00
Bananymous
54824aec74
Kernel: Cleanup font parsing
...
We use now the LittleEndian<> wrapper for PSF2 header and no more
magic constants in code
2023-03-20 19:48:08 +02:00
Bananymous
75e85def83
Kernel: prefs font does not allocate extra buffer
2023-03-20 19:48:01 +02:00
Bananymous
f9ae1f0023
Kernel: Fix PC Screen font parsing
...
I had misread the format and the parsing code was incorrect. I also
changed fonts to store unicode codepoints as 32 bit integers, so
every character can be represented
2023-03-20 14:52:42 +02:00
Bananymous
896b4c280c
Kernel: Font parsing uses Spans now
2023-03-20 13:35:54 +02:00
Bananymous
e4bcd98904
Kernel: Add basic mounting to VFS.
2023-03-19 05:51:25 +02:00
Bananymous
3570764448
Kernel: Add comparison operator for inodes
2023-03-19 03:34:23 +02:00
Bananymous
b41491e205
Kernel: Add cksum to Shell for file read testing
...
I also removed the 'using namespace BAN'
2023-03-18 03:50:24 +02:00
Bananymous
8236598f9d
Kernel: Optimize Ext2 disk reads
...
We used to read whole file until we reached the asked offset.
Now we can calculate the appropriate block and read just the asked data.
2023-03-18 03:47:59 +02:00
Bananymous
1a26a318a4
Kernel: Rework filesystem reading
...
We now read from a filesystem to user provided buffer.
Read sizes are determined by read call.
You should now get file descriptors and do reading through Process::current()
2023-03-17 21:18:41 +02:00
Bananymous
1f2ceeb329
Kernel: VFS caches currently open inodes
2023-03-16 15:31:33 +02:00
Bananymous
1b7625581d
Kernel: Add basic concept of Processes
...
We now create Shell as a process that has its own threads
2023-03-16 12:17:04 +02:00
Bananymous
c012822d49
BAN: Rename StringView suffix from _sv to sv
2023-03-16 12:15:16 +02: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
8dbece9119
Kernel: kmalloc minimum align is forced to s_kmalloc_min_align
2023-03-09 14:37:25 +02:00
Bananymous
8940ff8002
Kernel: You don't have to check whether VFS is initialized or not
...
VFS now returns Error when attempting to traverse inodes if it did
not find root partition
2023-03-09 02:31:24 +02:00
Bananymous
fc58baf54d
Kernel: if VFS initialization does not find root, we fail
2023-03-09 02:17:42 +02:00
Bananymous
2e6e0d0ef5
Kernel: FIX ubsan complaining about unaligned addresses for STDHeaders
2023-03-08 22:55:44 +02:00
Bananymous
371dfe8ef3
BAN: Formatter now uses perfect forwarding on its arguments
2023-03-08 21:31:26 +02:00
Bananymous
7458f68c38
BAN: Error can now be constructed from c_string or format string
...
If the resulting string would overflow, we just truncate it to fit
the error message buffer (128) bytes
2023-03-08 17:05:37 +02:00
Bananymous
d90aba0963
Kernel: Create CriticalScope and fix kmalloc
...
This disables interrupts for the current scope and restores them
after the scope. This is used in kmalloc, since scheduler might
call into kmalloc/kfree, but deadlock if some thread is currently
trying to allocate. This allows us to use kmalloc in Scheduler.
2023-03-08 13:55:53 +02:00
Bananymous
a068d828fe
Kernel: ATA reads go through the ata controller and not only device
2023-03-08 03:26:25 +02:00
Bananymous
1dabe7a222
Kernel: More rework on Scheduler
2023-03-08 03:26:25 +02:00
Bananymous
e7a577f54a
Kernel: fix includes
2023-03-08 03:26:25 +02:00
Bananymous
23b3028e15
Kernel: Rename RefCounted -> RefPtr and implement RefCounted
2023-03-08 03:26:25 +02:00
Bananymous
f7ebda3bf1
Kernel: Move interrupt related functions to InterruptController
2023-03-08 03:16:51 +02:00
Bananymous
b5673278c4
Kernel: Disable color after Debug::dump_stack_trace
2023-03-08 02:41:44 +02:00
Bananymous
0b62729887
Kernel: Scheduler sleeping is working
...
We have to disable optimization for one function, but I'm working
on a fix
2023-03-08 02:41:44 +02:00
Bananymous
b8ee77eb78
Kernel: Initial work on new scheduler with queues
...
Sleeping is definately broken
2023-03-08 02:41:44 +02:00
Bananymous
a9acf1f6dc
Kernel: PCIDevice is now class with getters and constructor
2023-03-08 02:41:44 +02:00
Bananymous
42c33ebfb3
Kernel: kmalloc aligns size to s_kmalloc_min_align
...
We don't get unaligned memory anymore from kmalloc
2023-03-08 02:41:44 +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
8a52c0f9d7
Kernel: Cleanup RSDP parsing code
2023-03-07 00:41:13 +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
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