Commit Graph

36 Commits

Author SHA1 Message Date
712f4f5e51 KernelHeap: Add more debug logging 2022-10-20 18:49:33 +02:00
92634048fc UserHeap: some nice improvements 2022-10-17 18:49:19 +02:00
64f5078494 Kernel, libc: Implement fork()
This time for real.

Also, add a new per-user-task virtual address allocator (UserHeap), so that mmap'ed pages are in user range and can be copied.
2022-10-17 18:43:35 +02:00
682be58d97 AddressSpace: copy instead of linking 2022-10-17 17:24:33 +02:00
68403dc029 Kernel: Make AddressSpaces reference-counted 2022-10-15 17:40:33 +02:00
1c3377fc98 Prepare for cloning address spaces, not there yet 2022-10-14 18:17:57 +02:00
26211bd49f It (almost) works now
The only thing doing weird stuff is exec(), so that's commented out and throws ENOSYS right now.

But we have two user tasks running in parallel, isolated from each other!
2022-10-14 16:46:00 +02:00
24272c57ef Almost there! 2022-10-13 21:55:51 +02:00
ee712432bd Some more multiple address space stuff
This page-faults. This is because the memory where the ELF should be is all zeroes, which the CPU tries to interpret.
2022-10-13 21:14:39 +02:00
229b06c63b Add basic address space infrastructure 2022-10-13 19:19:51 +02:00
83e6b8cd21 VMM: Fix naming convention 2022-10-13 18:42:53 +02:00
57482e4e93 VMM: Make it even nicer 2022-10-13 18:15:52 +02:00
b360307f41 VMM: Make it so much gooder
There are still some fixes to be made, but I think this is already way cleaner than before.
2022-10-13 17:58:13 +02:00
69a9f7f06a Kernel: Move VMM from a class to a namespace
Also, rename the ugly Paging::VirtualMemoryManager name to just 'VMM'. Which is now used instead of kernelVMM.
2022-10-12 20:02:25 +02:00
97eacc027e Kernel: Use PAGE_SIZE in more places 2022-10-12 13:05:57 +02:00
abcf1b6118 Define PAGE_SIZE as 4096 and use it everywhere instead of using 4096 as a magic number 2022-10-08 14:52:28 +02:00
594d79143e Kernel: enable -Wconversion 2022-10-06 17:13:34 +02:00
952d8fa294 Be more strict with warnings 2022-10-05 17:34:22 +02:00
8f310dd307 PMM: Map the page bitmap to kernel heap once the PMM and VMM are both initialized 2022-10-04 18:36:09 +02:00
e769cb45a7 MemoryManager: add get_page_at and get_pages_at functions to map any physical memory at a fixed virtual address (inverse of get_mapping and get_mappings) 2022-10-01 12:12:50 +02:00
522d74b65d Add is_user_address and is_kernel_address functions 2022-09-29 19:30:42 +02:00
a078a11dde Move PMM and VMM initialization into MemoryManager::init 2022-09-25 17:38:17 +02:00
704a23d0ad Sanity checks 2022-09-24 23:09:39 +02:00
6bd3529f32 Port liballoc to get proper kmalloc/kcalloc/krealloc/kfree functions.
Yes, that's not completely-from-scratch.
But let's be honest, am I going to do everything from scratch? Probably not. I'm not making my own bootloader.
And making a proper smaller-than-4-KB allocator is not something I want to do.
Plus, liballoc works perfectly in this rewrite, seeing as the MM code actually works, instead of leaking all your poor memory
And liballoc_{lock, unlock} can be actually defined, since we have spinlocks here!
2022-09-24 22:40:59 +02:00
3891d0c52e Rename KernelMemoryManager to MemoryManager
Kind of a more catchy name, isn't it?
2022-09-24 21:45:13 +02:00
46b7dab847 Remove RangeAllocator and make a PMM namespace 2022-09-24 21:27:45 +02:00
c3e5251687 Some more userland and font failing 2022-09-23 16:41:43 +02:00
11dd165a8e Scheduler: add proper support for user tasks (still faults though) 2022-09-22 08:14:04 +02:00
543fe2885f Add support for user pages 2022-09-22 07:57:30 +02:00
b4484e951d LOTS MORE LOGGING. which is great, of course. 2022-09-07 19:41:08 +02:00
1820286d8b stuff 2022-09-07 10:33:22 +02:00
bd0a24097f Add a KernelMemoryManager namespace to wrap PMM + VMM 2022-09-06 18:08:15 +02:00
0fbc68ca88 Finish VMM 2022-09-06 13:49:17 +02:00
8bff2ee0f5 Add a RangeAllocator which serves as a physical memory allocator 2022-09-06 13:21:54 +02:00
6a6be3292d Memory::get_system and Memory::get_usable 2022-09-05 17:13:12 +02:00
1b727a66ea Ready. Set. Go! 2022-09-05 16:13:51 +02:00