2.3 KiB
page_frame.h
Physical memory management.
PFRAME_SIZE
- macro
The size of one page (4KB).
page_frame_manager_T
- struct
Name | Type | Description |
---|---|---|
free_memory | uint64_t | The amount of free/usable memory in bytes |
reserved_memory | uint64_t | The amount of reserved memory in bytes |
used_memory | uint64_t | The amount of memory used by noxos in bytes |
page_bitmap_index | uint64_t | The index to the first free page |
page_bitmap | bitmap_T | A huge bitmap, that stores, which pages are claimable and which are already in use |
blocked | bool | Thread safety guard |
pframe_manager_init()
- function (void)
Initializes the page frame manager, needs to be called once at kernel init.
pframe_reserve(address)
- function (void) [Thread Safe]
Blocks a page, so it can't be requested or anything else. If the page is already blocked by anything else, e.g. by a request, it won't be reserved.
pframe_reserve_multi(address, n)
- function (void) [Thread Safe]
Reserves the page at the given address, plus n pages after that page.
pframe_unreserve(address)
- function (void) [Thread Safe]
Unreserves a reserved page and makes it accessible again.
pframe_unreserve_multi(address, n)
- function (void) [Thread Safe]
Unreserves the page at the given address, plus n pages after that page.
pframe_request()
- function (void*) [Thread Safe]
Returns the physical address of a page.
This is kind of the low level version of memory_allocate
.
pframe_free(address)
- function (void) [Thread Safe]
Needs a valid page address produced by pframe_request() as argument.
Invalidates the address and frees it, so it can be requested again.
This is kind of the low level version of memory_free
.
pframe_free_multi(address, n)
- function (void) [Thread Safe]
Frees the page at the given address, plus n pages after that page.