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
8f2308c80d
Kernel: Implement mmap-able device files (regular files are not mmap-able yet)
2022-11-02 20:24:07 +01:00
c604c074a1
Kernel: Rename ASSERT() to ensure()
...
Doesn't get stripped on release builds, so it shouldn't be named assert.
2022-11-02 19:38:15 +01:00
e5cf32c7b3
Kernel: Introduce page ownership
...
Some pages, such as framebuffer pages, are not physical memory frames reserved for the current process.
Some, such as the framebuffer, may be shared between all processes.
Yet, on exit() or on exec(), a process frees all frames mapped into its address spaces.
And on fork(), it copies all data between frames. So how could we map framebuffers.
Simple: we use one of the bits in page table entries which are available to the OS, and mark whether that page is owned by the current process.
If it is owned, it will be:
- Freed on address space destruction
- Its data will be copied to a new page owned by the child process on fork()
If it is not owned, it will be:
- Left alone on address space destruction
- On fork(), the child's virtual page will be mapped to the same physical frame as the parent
This still needs a bit more work, such as keeping a reference of how many processes use a page to free it when all processes using it exit/exec.
This should be done for MAP_SHARED mappings, for example, since they are not permanent forever,
unlike the framebuffer for example.
2022-11-02 19:32:28 +01:00
22740e69bf
Kernel: Add support for the NX bit
...
Not support, actually. We now REQUIRE it.
2022-11-02 18:34:57 +01:00
712f4f5e51
KernelHeap: Add more debug logging
2022-10-20 18:49:33 +02:00
9d0dfbaedf
PMM: Log invalid frees
2022-10-20 18:49:12 +02:00
7e9744419e
sh: Improve it
2022-10-19 20:16:21 +02:00
b035795eb3
Kernel: Move errno.h and (k)assert.h out of the main include directory
...
This is mostly so IDEs don't pick them up instead of the userspace headers :)
2022-10-19 17:41:23 +02:00
755242719c
VMM: Add a few memsets
...
This seems to fix exec() making weird page tables!!
2022-10-19 07:56:08 +02:00
671f2a2de3
Kernel, libc: Implement waitpid()
...
FIXME: exec() is now doing weird page table stuff. But at least it works, no panics :)
2022-10-18 21:30:52 +02:00
34fc6996b0
UserHeap: allocate needed memory in request_virtual_pages
2022-10-17 18:52:11 +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
b334e1cd50
VMM: check if the entry is already present
2022-10-17 17:26:16 +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