Module meta

Source
Expand description

Metadata management of frames.

You can picture a globally shared, static, gigantic array of metadata initialized for each frame. Each entry in this array holds the metadata for a single frame. There would be a dedicated small “heap” space in each slot for dynamic metadata. You can store anything as the metadata of a frame as long as it’s Sync.

§Implementation

The slots are placed in the metadata pages mapped to a certain virtual address in the kernel space. So finding the metadata of a frame often comes with no costs since the translation is a simple arithmetic operation.

Modules§

mapping 🔒
The metadata of each physical page is linear mapped to fixed virtual addresses in FRAME_METADATA_RANGE.

Macros§

impl_frame_meta_for
Makes a structure usable as a frame metadata.
mark_ranges 🔒

Structs§

KernelMeta
The metadata of physical pages that contains the kernel itself.
MetaPageMeta
The metadata of frames that holds metadata of frames.
MetaSlot 🔒
ReservedMemoryMeta
Reserved memory metadata. Maybe later used as I/O memory.
UnusableMemoryMeta
Unusable memory metadata. Cannot be used for any purposes.

Enums§

GetFrameError
The error type for getting the frame from a physical address.

Constants§

FRAME_METADATA_MAX_ALIGN
The maximum alignment in bytes of the metadata of a frame.
FRAME_METADATA_MAX_SIZE
The maximum number of bytes of the metadata of a frame.
META_SLOT_SIZE 🔒
REF_COUNT_MAX 🔒
REF_COUNT_UNIQUE 🔒
REF_COUNT_UNUSED 🔒

Traits§

AnyFrameMeta
All frame metadata types must implement this trait.

Functions§

add_temp_linear_mapping 🔒
Adds a temporary linear mapping for the metadata frames.
alloc_meta_frames 🔒
get_slot 🔒
Gets the reference to a metadata slot.
init 🔒
Initializes the metadata of all physical frames.
is_initialized 🔒
Returns whether the global frame allocator is initialized.
mark_unusable_ranges 🔒

Type Aliases§

FrameMetaVtablePtr 🔒