pub struct BuddyAllocator {
    bins: [BTreeSet<PAddr>; 13],
}

Fields§

§bins: [BTreeSet<PAddr>; 13]

The bins of free blocks, where bin i contains blocks of size BASE_SIZE * (2^i). Uses BTreeSet to store the blocks in each bin, for efficient buddy location. Each block is stored as the physical address of the start of the block. The actual frames can be constructed for each block using the start address and the order of the block.

Implementations§

source§

impl BuddyAllocator

source

pub fn new() -> BuddyAllocator

source

pub fn add_range(&mut self, range: Range<Frame>)

Add a range of Frames to this allocator, marking them free to allocate.

source

pub fn available_bytes(&self) -> Bytes

source

pub fn allocate_n(&mut self, block_size: Bytes) -> Option<PAddr>

Allocate a block of block_size bytes from this allocator. Returns None if the allocator can’t satisfy the allocation.

source

pub fn free_n(&mut self, start: PAddr, block_size: Bytes)

Free a block starting at start of block_size bytes. block_size must be a valid size of a whole block.

source

fn allocate_block(&mut self, order: usize) -> Option<PAddr>

Tries to allocate a block of the given order. If no blocks of the correct size are available, tries to recursively split a larger block to form a block of the requested size.

source

fn free_block(&mut self, start: PAddr, order: usize)

Free a block starting at start of order order.

source

fn buddy_of(block_start: PAddr, order: usize) -> PAddr

Finds the starting frame of the block that is the buddy of the block of order order, starting at block_start.

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> Downcast for Twhere T: Any,

source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<dyn Any>. Rc<dyn Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Anydyn Any. This is needed since Rust cannot generate &Anydyn Any’s vtable from &Trait’s.
source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Anydyn Any. This is needed since Rust cannot generate &mut dyn Any’s vtable from &mut Trait’s.
source§

impl<T> DowncastSync for Twhere T: Any + Send + Sync,

source§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Convert Arc<Trait> (where Trait: Downcast) to Arc<dyn Any>. Arc<dyn Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.