← All compilation units

Flyology_Allocators.Allocation_Algorithms.Buddy_Kernel

Description

Provides variable-size allocation inside a fixed caller-owned relocatable region. The stored buddy tree contains only fixed-width states and generations. Allocation and reclamation are serialized across views by one persisted nonblocking guard; immediate allocation reports contention and timed overloads yield between attempts. Payload access does not acquire that metadata guard: the application or receiving data structure must exclude release of a handle from reads, writes, and copies using it. A dead metadata-guard owner leaves the arena locked. An independently authorized supervisor may poison the arena after establishing owner death and whole-arena quiescence; exclusive reinitialization is the only recovery. @exclude

Attach

procedure Attach
  (Item          : out View;
   Region        : Region_View;
   Location      : Region_Offset;
   Configuration : Buddy_Kernel.Configuration;
   Instance_ID   : Interfaces.Unsigned_64)
Parameters
Item
Region
Location
Configuration
Instance_ID

Attach_Allocation

procedure Attach_Allocation (Region : in out Region_View; Item : View; Value : Allocation_Handle)
Parameters
Region
Item
Value

Block_Capacity

function Block_Capacity (Item : View; Value : Allocation_Handle) return Byte_Count
Parameters
Item
Value
Return value

Configuration

type Configuration is record
   Usable_Capacity    : Positive;
   Minimum_Block_Size : Positive;
end record;
Record fields
Usable_Capacity
Minimum_Block_Size

Configuration_Minimum_Block_Size

function Configuration_Minimum_Block_Size (Value : Configuration) return Positive
Parameters
Value
Return value

Configuration_Usable_Capacity

function Configuration_Usable_Capacity (Value : Configuration) return Positive
Parameters
Value
Return value

Copy

procedure Copy
  (Item          : View;
   Source        : Allocation_Handle;
   Source_Offset : Byte_Count;
   Target        : Allocation_Handle;
   Target_Offset : Byte_Count;
   Length        : Byte_Count)
Parameters
Item
Source
Source_Offset
Target
Target_Offset
Length

Create_Or_Attach

procedure Create_Or_Attach
  (Item          : out View;
   Region        : Region_View;
   Location      : Region_Offset;
   Configuration : Buddy_Kernel.Configuration;
   Instance_ID   : Interfaces.Unsigned_64;
   Result        : out Open_Result)
Parameters
Item
Region
Location
Configuration
Instance_ID
Result

Current_Metadata

function Current_Metadata (Item : View) return Metadata
Parameters
Item
Return value

Destroy

procedure Destroy (Item : in out View)
Parameters
Item

Detach

procedure Detach (Item : in out View)
Parameters
Item

Initialize

procedure Initialize
  (Item          : out View;
   Region        : Region_View;
   Location      : Region_Offset;
   Configuration : Buddy_Kernel.Configuration;
   Instance_ID   : Interfaces.Unsigned_64)
Parameters
Item
Region
Location
Configuration
Instance_ID

Is_Attached

function Is_Attached (Item : View) return Boolean
Parameters
Item
Return value

Is_Poisoned

function Is_Poisoned (Item : View) return Boolean
Parameters
Item
Return value

Minimum_Block_Limit

Minimum_Block_Limit : constant Positive := 16;

Poison

procedure Poison (Region : Region_View; Location : Region_Offset)
Parameters
Region
Location

Release

procedure Release (Item : in out View; Value : Allocation_Handle)
Parameters
Item
Value

Release

procedure Release (Item : in out View; Value : Allocation_Handle; Timeout : Wait_Timeout)
Parameters
Item
Value
Timeout

Required_Storage

function Required_Storage (Configuration : Buddy_Kernel.Configuration) return Byte_Count
Parameters
Configuration
Return value

Try_Allocate

procedure Try_Allocate
  (Item           : in out View;
   Requested_Size : Positive;
   Value          : out Allocation_Handle;
   Result         : out Allocation_Result)
Parameters
Item
Requested_Size
Value
Result

Try_Allocate

procedure Try_Allocate
  (Item           : in out View;
   Requested_Size : Positive;
   Timeout        : Wait_Timeout;
   Value          : out Allocation_Handle;
   Result         : out Allocation_Result)
Parameters
Item
Requested_Size
Timeout
Value
Result

View

type View is limited private;