1d0dd8fa93
Use KernelVM in kmalloc() and friends
...
Much better now!!
2022-12-05 21:02:05 +01:00
ba758bcef8
Initialize the KernelVM
2022-12-05 21:01:18 +01:00
6c3024d4ee
Heap: Count the heap blocks' size in the size required for an allocation
2022-12-05 21:01:06 +01:00
0edabd6d87
Heap: Add a new block to the end of the linked list
...
*facepalm*
This was causing page faults when having two blocks and the first one (oldest one) being freed first.
2022-12-05 21:00:21 +01:00
d445b29477
Add a virtual memory allocator for the kernel
2022-12-05 20:36:24 +01:00
a63a8b32b5
Make new and delete noexcept and return nullptr on failure
2022-12-05 13:45:32 +01:00
891320f7d3
Heap: Make const
2022-12-05 13:41:58 +01:00
ea7893ba71
Make CHECK_PAGE_ALIGNED use expect() instead of check()
2022-12-05 13:28:36 +01:00
55a30ac487
Make CHECK_PAGE_ALIGNED use expect() instead of check()
2022-12-05 13:26:50 +01:00
bfd4647467
Rename largest_free -> largest_free_entry
2022-12-05 13:26:09 +01:00
d9fc50f1ea
Make MemoryMapEntry have private fields with public getters
2022-12-05 13:23:01 +01:00
58ecf11424
Make all refs to the bootboot structure const
2022-12-05 13:04:01 +01:00
3b77ba6b04
EVERYTHING IS CONSTANT IN THIS UNIVERSE
...
Here's one advantage of Rust over C++:
Immutability by default. In Rust, you have to mark a variable as mutable, whereas in C++ you have to mark it as immutable.
What's the problem here? Usually, most variables don't need mutability. Thus we end up with const all over the place.
2022-12-05 12:49:01 +01:00
af96db3641
Remove bootboot declaration from MemoryManager now that it's MemoryMapIterator's job to walk the mmap
2022-12-04 15:56:25 +01:00
77e64d74a0
Remove unused header
2022-12-04 15:55:52 +01:00
766804b3a0
Use get_blocks_from_size instead of +1
2022-12-04 15:52:56 +01:00
0d10c98477
SImplify init_physical_frame_allocator() even more
2022-12-04 15:50:21 +01:00
5f6c48bd12
Use a friendlier way of iterating over the memory map
2022-12-04 15:45:13 +01:00
5aa2d1fa18
Add a Bitmap class to provide common functionality and use that in the MemoryManager
2022-12-04 15:14:07 +01:00
ee76bdf84d
Add sanity check
2022-12-04 13:41:14 +01:00
bde3d55eb2
Remove escape from comment
2022-12-04 13:38:48 +01:00
f8120e01c0
Panic in delete as well
2022-12-04 12:58:37 +01:00
22019ac6b2
Print the error instead
2022-12-04 12:57:43 +01:00
96b32f5a93
Please use make<T> and destroy<T> instead of new and delete
...
Those are there only for common stuff (in the Luna library) that needs an environment-agnostic way of allocating memory.
new and delete are standard, thus we should use those.
2022-12-04 12:55:32 +01:00
adb2c2ab41
Add kernel-side new and delete
2022-12-04 12:52:49 +01:00
c7ab6bc2d3
Reorganize the luna/ directory so that headers aren't in the top level include path
2022-12-04 12:42:43 +01:00
bed29e71af
Replace some uses of check() with expect()
2022-12-04 12:25:16 +01:00
985d45ddfb
Switch to logging functions everywhere
2022-11-30 17:16:36 +01:00
d2856d8812
Provide meaningful error numbers
2022-11-30 17:13:59 +01:00
fe47e0d5cb
Clean init() up
2022-11-30 16:30:42 +01:00
ff952fa2e4
Confirm alignment when calculating an offset to split at
2022-11-20 18:04:29 +01:00
29defdf54d
Add a debug function to dump heap usage
2022-11-20 16:33:54 +01:00
d54c882c63
Add new/delete-like functions but with Results
2022-11-20 15:48:08 +01:00
caf6d1563c
Kernel: Add a heap memory allocator
...
This is the first time I've actually dropped liballoc in favor of writing my own implementation.
Usually, malloc() and such looked so complicated that I preferred to let a nice external library do the job.
But I've decided to try writing my own allocator, and now we have heap memory without any 3rd party code!
2022-11-20 15:15:26 +01:00
cb88630d86
Bugfix: Make alloc_at return the start of the virtual memory range instead of the end
2022-11-20 15:11:53 +01:00
af267772f0
Rename MemoryManager::map to map_frames_at
...
To make it clearer that this API is only intented for mapping contiguous frames of physical memory (for MMIO perhaps?)
2022-11-19 22:32:48 +01:00
1b41a3e9cf
Introduce a few helpers to allocate/map/unmap several pages, which wrap around the MMU functionality
2022-11-19 22:28:45 +01:00
c886669d56
Break down operations to make protect_kernel_sections() more readable
2022-11-19 22:27:59 +01:00
d96cb73995
Rename physical "pages" to "frames"
...
AFAIK, this is the proper naming scheme. "Pages" are virtual, and "frames" physical.
2022-11-19 22:27:08 +01:00
847f2b4f4c
Replace more usage of stdint.h types with Luna's Types.h
2022-11-19 22:25:03 +01:00
047f445651
Kernel: Add helpers to validate memory addresses
2022-11-19 18:38:47 +01:00
70c6b78e35
Organize source tree
2022-11-19 17:59:49 +01:00
cf758fdfdc
Initial commit :)
2022-11-13 10:09:09 +01:00
37bb3273ce
Kernel: Add a C interface to the logging system
2022-11-12 18:12:18 +01:00
58fb422161
Kernel: Return a Result in MemoryManager and strdup_from_user
2022-11-12 11:56:40 +01:00
662afad426
Kernel: Add a Result class
2022-11-12 11:30:28 +01:00
1ea216dfd1
Kernel: Rename assert.h to ensure.h
...
The macro is named "ensure", the header file should reflect that.
2022-11-09 15:28:35 +01:00
98da473fdc
Run clang-format
2022-11-08 19:07:43 +01:00
6f72f92493
Kernel: Start preparing for recursive paging
2022-11-08 17:12:59 +01:00
b78f6f269d
Kernel: Omit displaying KernelHeap's buffer location in the log
2022-11-05 11:59:00 +01:00