Commit Graph

195 Commits

Author SHA1 Message Date
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
52944ba5d8 Kernel/VMM: Add support for larger pages to getFlags() 2022-10-12 20:05:27 +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
3ac9fed23a ELFLoader: Add check_elf_image() and check_elf_image_from_filesystem()
These two functions validate an image, without actually loading it. Very useful for exec!
2022-10-12 18:37:00 +02:00
bbd9f1d187 VMM: Add FIXME 2022-10-12 14:35:34 +02:00
15f340dbbe VMM: Do not map recursively 2022-10-12 14:34:12 +02:00
eaea4603c6 MemoryManager: Fix logging when built with debug logging
That is to say, -DMM_DEBUG
2022-10-12 14:29:30 +02:00
4021cb3ac0 KernelHeap: do not crash the entire system
Previously, calling free_virtual_page(s) would cause an assertion fail if the address was not in the kernel heap range.
Now, we just return.
2022-10-12 14:28:48 +02:00
ad9c7af0bf VMM: add FIXME 2022-10-12 14:27:47 +02:00
950f4ef608 VMM: Add support for larger pages
getPhysical() now stops at a larger page, unmap() can unmap a larger page, but map() just transforms it into a normal page.
getFlags() larger pages support is still pending.

At least now we don't page fault because we're trying to free a larger page.
2022-10-12 14:27:26 +02:00
525d567af6 VMM: When unmapping a page, invalidate the TLB for that page 2022-10-12 14:24:34 +02:00
c9ebe89899 Kernel/KernelHeap: Add MODULE #define 2022-10-12 14:04:41 +02:00
97eacc027e Kernel: Use PAGE_SIZE in more places 2022-10-12 13:05:57 +02:00
d5f59b666a Kernel/Memory: Use %p in printf 2022-10-08 18:21:02 +02:00
533b7c9e71 Refactor ACPI::get_rsdt_or_xsdt()
Much better now.

Also, remove a FIXME in PMM.cpp, since we do map the page bitmap to virtual memory now.
2022-10-08 15:00:42 +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
028a1b1a3c libc: Enable even more warnings 2022-10-07 18:19:06 +02:00
b7ee746da3 Kernel: Enable even more warnings 2022-10-07 18:10:20 +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
f1a7138568 User mode (with a few syscalls)
IT ACTUALLY WORKS NOW.

Why wasn't it working? Oh, because I was not setting already present page tables's permissions to user mode. Just a little bug. THAT I SPENT DAYS TRYING TO FIND

Anyways, it works now. Such a relief...
2022-09-25 20:35:05 +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
2511b7d7a1 Add optional (compile-opt-in) debug logging to the MemoryManager (which helped catch the bug that got fixed in the previous commit) 2022-09-24 22:38:07 +02:00
a0af8fa432 QUICK BUGFIX: Shift PDE.Address to the left by 12 bits in VMM::getPhysical, to return the actual physical address 2022-09-24 22:35:19 +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
db4c8e96b8 commit 2022-09-14 17:55:24 +02:00
0cb59ee17f please work please 2022-09-11 08:23:32 +02:00
929962efc9 Fixed size counting in RangeAllocator
Which was displaying VERY wrong sizes beforehand. (Number of regions * 4096 instead of number of bytes)
2022-09-07 20:01:44 +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