Bananymous
86df258365
Kernel: rework the whole PageTable structure
...
We now have page table structure for kernel memory which is shared
between all processes.
2023-07-05 23:41:35 +03:00
Bananymous
0d620f3e0f
Kernel: Rewrite and optimize DiskCache
...
DiskCache now consists of PageCaches which are caches of contiguous
sectors. This allows the disk cache to be ordered and faster traversal.
We seem to have a problem somewhere during reading. The stack gets
corrupted.
2023-06-19 10:31:47 +03:00
Bananymous
5e123031aa
Kernel: kmalloc has now somewhat dynamic storage
...
Allocations bigger than PAGE_SIZE and those not forced to be identity
mapped are now done on a GeneralAllocator. This allows us to use kmalloc
for big allocations; bigger than the fixed 1 MiB storage.
This is still a hack and the whole kmalloc will have to be rewritten at
some point, but for now this does the job :D
2023-06-18 23:27:00 +03:00
Bananymous
388f530edd
Kernel: Add GeneralAllocator::paddr_of
...
Yoy can now query physical address of a virtual address for general
allocator allocation
2023-06-18 23:25:51 +03:00
Bananymous
d354cccd37
Kernel: Add enum for ISR name to number
2023-06-18 23:24:27 +03:00
Bananymous
714305ef56
Kernel: General allocator takes first valid vaddr as parameter
2023-06-17 22:23:34 +03:00
Bananymous
f83ae1e9c6
Kernel: Move print during boot
2023-06-12 23:45:36 +03:00
Bananymous
32e1473c94
Kernel: Make disk IO blocking thread safe
...
This was causing a lot of deadlocks on vms without kvm accel
2023-06-12 18:57:47 +03:00
Bananymous
bf617036c7
Kernel: Rework syscall calling
...
I removed the intermediate function when calling syscalls. Now syscall
handler calls the current process automatically. Only exception is
sys_fork, since it needs a assembly trampoline for the new thread.
2023-06-12 14:16:48 +03:00
Bananymous
ce55422a24
Kernel: Remove Shell from kernel
...
This is now obsolete since we have a userspace Shell.
2023-06-12 02:04:52 +03:00
Bananymous
0f63cfa43f
Kernel/LibC: add SYS_{SET,GET}_PWD and chdir, getpwd
2023-06-12 02:02:52 +03:00
Bananymous
537780ee1e
Kernel: allocate thread stacks from 0x300000 onwards
...
I had a problem where thread stack was overlapping with elf loading
2023-06-12 01:02:19 +03:00
Bananymous
4ca99fcb4e
Kernel: Fix bug in elf loading
...
We were allocating one extra page
2023-06-12 00:59:19 +03:00
Bananymous
b254ade69b
Kernel: Add SYS_GET_{,E}{UID,GID}
2023-06-11 22:37:00 +03:00
Bananymous
ef4ebaa969
Kernel: Add syscalls for set{,e,re}{uid,gid}
2023-06-11 22:37:00 +03:00
Bananymous
51eb44bf40
Kernel/Userspace: Add basic init process
...
This process parses /etc/passwd and promps login screen.
When an username is entered, it will launch that users shell
2023-06-11 22:37:00 +03:00
Bananymous
c62e820bcf
Kernel: Add basic Credentials for the system
...
Now filesystem access/open, etc confirm that you have access for rwxs
2023-06-11 20:06:06 +03:00
Bananymous
46c34db6cb
Kernel: GeneralAllocator and FixedWidth allocator invalidate TLB caches
...
We were getting random exceptions when reallocating same addressess and
this fixes that problem :)
2023-06-11 15:57:48 +03:00
Bananymous
8be28012ee
LibC: Reorder some syscalls
2023-06-11 03:29:22 +03:00
Bananymous
5aed186827
Kernel: Add SYS_OPENAT
2023-06-11 03:29:22 +03:00
Bananymous
91f812e17f
Kernel: Exceptions will now enable interrupts before calling exit()
...
this allows scheduler verification on reschedule() not panic
2023-06-11 03:29:22 +03:00
Bananymous
52c4eebd77
Kernel: Implement SYS_FSTAT
2023-06-11 03:29:22 +03:00
Bananymous
825ec221b7
Kernel: we don't panic anymore on unrecognized syscall
2023-06-11 00:18:48 +03:00
Bananymous
e31080bce3
Kernel: allow open() call with O_SEARCH
2023-06-11 00:18:34 +03:00
Bananymous
7a5d5cabad
Kernel: Add syscall for reading directory entries
2023-06-11 00:18:08 +03:00
Bananymous
e209ca7c82
Kernel: Rewrite directory listing so it can be integrated to libc
2023-06-11 00:17:18 +03:00
Bananymous
db49cbd6e2
Kernel: We now store the processes exit code
2023-06-10 17:31:56 +03:00
Bananymous
97c7fc42d1
Kernel: SpinLocks now reschedule if they cannot aquire the lock
...
This allows us to not actually spin doing nothing while waiting for
another (not executing) to release the lock. This api won't probably
work when we get to SMP
2023-06-09 00:53:32 +03:00
Bananymous
7da0627f8e
Kernel: Process::exit() now uses the new Scheduler::reschedule()
...
We use this new function while waiting for all blocking threads to
resume execution
2023-06-09 00:49:19 +03:00
Bananymous
27cef23823
Kernel: Scheduler now has reschedule()
...
This can be called from anywhere and just causes the scheduler to
schedule the next thread. This is more efficient and verbose version
of Scheduler::set_current_thread_sleeping(0), since we don't have
to wake other threads or do other verifications.
2023-06-09 00:47:17 +03:00
Bananymous
b7fc2dc3d0
Kenrel: Rename Scheduler::reschedule -> Scheduler::timer_reschedule
2023-06-09 00:41:43 +03:00
Bananymous
8af390e0f6
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
96d6453ea8
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
2b9900e56e
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
86f58f60cb
LibC: implement setenv, unsetenv, putenv
2023-06-05 22:51:02 +03:00
Bananymous
064ce568c2
Kernel: add basic support for environment variables
...
exec functions will search files from PATH
2023-06-05 22:51:02 +03:00
Bananymous
0b1b4d8f7e
Kernel: exec now has better posix errors
2023-06-05 21:12:08 +03:00
Bananymous
b0e9ab0519
Kernel/LibC: pass environ pointer to process
2023-06-05 21:12:08 +03:00
Bananymous
668517a723
Kernel: TTY now actually flushes on ^D
2023-06-05 20:21:46 +03:00
Bananymous
649f08ec78
Kernel: verify that loaded elfs are executable
2023-06-05 19:29:32 +03:00
Bananymous
5425394880
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
9d64dbd5c2
Kernel/LibC: add SYS_STAT and stat(), lstat()
2023-06-05 14:37:14 +03:00
Bananymous
b68d5a5833
Kernel: Add SYS_WAIT
...
This syscall waits for a given pid.
2023-06-04 18:00:52 +03:00
Bananymous
94d2090777
Kernel: fork() now clones current thread
...
This is how posix specifies thread cloning during fork
2023-06-04 17:40:37 +03:00
Bananymous
e97585daf9
Kernel: Process FixedWidthAllocators come now in 4 sizes
2023-06-04 01:26:43 +03:00
Bananymous
924fc2118c
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
51f4c0c750
Kernel: make load_elf() its own function
2023-06-04 01:24:11 +03:00
Bananymous
37b93da650
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
35e739dcdd
Kernel: reorder process exit steps
2023-06-04 01:19:04 +03:00
Bananymous
8352392b38
Kernel: You can specify first vaddr for getting free pages
2023-06-04 01:15:48 +03:00
Bananymous
dc1aff58ed
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
9f75d9cfe5
Kernel: PageTable now has debug_dump
...
This dumps all the mapped pages and their flags
2023-06-03 20:08:13 +03:00
Bananymous
a42af7e973
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
a4cb5d8360
Kernel: Inode/Device detection is done with overridden bool functions
2023-06-03 13:28:15 +03:00
Bananymous
da7f09cf82
Kernel: Heap will return 0 if no free page is available
2023-06-03 02:55:31 +03:00
Bananymous
0166af472b
Kernel: DiskCache will try to shrink_to_fit after cache cleanup
2023-06-03 02:55:22 +03:00
Bananymous
884d986bd6
Kernel: DiskCache won't crash when running out of kmalloc memory
2023-06-03 02:36:20 +03:00
Bananymous
59b807189f
Kernel: add basic disk cache
...
ATADevices now add disk cache to themselves
2023-06-03 02:23:14 +03:00
Bananymous
fb1c7015b1
Kernel: Shell 'memory' now prints heap memory usage
2023-06-03 02:22:18 +03:00
Bananymous
9bd4d68f9c
Kernel: Shell ls and stat now properly show symlinks
2023-06-02 18:22:56 +03:00
Bananymous
633cb4f282
Kernel: VFS now has max link depth of 100
2023-06-02 12:50:40 +03:00
Bananymous
4d4d0e26a9
Kernel: Symlinks are now working
...
We still have to implement loop or depth detection
2023-06-02 11:43:46 +03:00
Bananymous
0ffd2a5c1d
Kernel: Shell can now list symlinks
2023-06-01 00:25:53 +03:00
Bananymous
232fdcb82c
Kernel: add basic support for symlinks
2023-06-01 00:24:45 +03:00
Bananymous
0ccc23d544
Kernel: Shell opens standard files
2023-05-31 23:14:15 +03:00
Bananymous
02f0239016
Kernel: Cleanup exec code
2023-05-31 22:36:05 +03:00
Bananymous
ab61b49aca
Kernel: Add SYS_EXEC syscall
2023-05-31 20:57:33 +03:00
Bananymous
4da1d6fd27
Kernel: Implement Process::exec()
2023-05-31 20:56:29 +03:00
Bananymous
909e847369
Kernel: Move userspace entry functions to Process instead of Thread
2023-05-31 19:31:10 +03:00
Bananymous
eafa09fecf
Kernel: boot.S maps GiB as single pdpte
2023-05-31 00:51:15 +03:00
Bananymous
8175348284
Kernel: Fix comment
2023-05-31 00:51:15 +03:00
Bananymous
b2832cb47a
Kernel: PageTable destructor works now
...
we are successfully booting higher half kernel now :)
2023-05-31 00:44:14 +03:00
Bananymous
9f499991c8
Kernel: PageTable::create_userspace() now works
2023-05-31 00:44:14 +03:00
Bananymous
9a416e8ae8
Kernel: kmalloc free error prints the pointer
2023-05-31 00:34:56 +03:00
Bananymous
911922c6a3
Kernel: RSDP location is now done with virtual addresses
2023-05-31 00:34:21 +03:00
Bananymous
1f2fd59ad5
Kernel: Physical range now calculates RAM with physical addresses
2023-05-31 00:33:44 +03:00
Bananymous
708d401d2c
Kernel: Heap gets multiboot pointer with P2V
2023-05-30 23:57:44 +03:00
Bananymous
ed0dcacab3
Kernel: Move V2P and P2V to Memory/Types.h
2023-05-30 23:57:03 +03:00
Bananymous
e86050f343
Kernel: PageTable::map_range_at maps correctly the last page
2023-05-30 23:56:07 +03:00
Bananymous
57f7da6ce1
Kernel: Booting with higher half kernel gets to Heap initialization
2023-05-30 22:21:12 +03:00
Bananymous
93e6455171
Kernel: start work on higher half kernel
2023-05-30 08:00:17 +03:00
Bananymous
265fe9c62e
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
3b9d60d7cb
Kernel: Remove unused includes of CriticalScope
2023-05-29 21:15:55 +03:00
Bananymous
278b873e89
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
e640344d7a
Kernel: Rename MMU to PageTable
...
This is more descriptive name for what it actually represents
2023-05-29 21:06:09 +03:00
Bananymous
7151bb86a8
Kernel/LibC: opening standard files is done in libc
2023-05-29 20:21:19 +03:00
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
0c316ebfb2
Kernel: Add SYS_SLEEP
2023-05-28 22:34:48 +03:00
Bananymous
282bf24f65
Kernel: fork() now copies allocations through FixedWidthAllocator
2023-05-28 21:34:35 +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
636c308993
Kernel: fork() now copies allocation done through GeneralAllocator
2023-05-28 20:37:39 +03:00
Bananymous
6fdbe6f9c2
Kernel: Add bareboness fork() function
2023-05-28 18:08:49 +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
0129619d9a
Kernel: Processes and Threads use VirtualRange memory allocations
2023-05-28 17:48:34 +03:00
Bananymous
e0479b291d
Kernel: Move PhysicalRange to its own file and add VirtualRange
2023-05-28 17:48:34 +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
fed690a7f2
Kernel: Directory listing is working again
2023-05-26 22:31:21 +03:00