buddy_system_allocator

buddy_system_allocator Ă© um crate de terceiros que implementa um alocador bĂĄsico de sistema buddy. Ele pode ser usado tanto para LockedHeap implementando GlobalAlloc para que vocĂȘ possa usar o crate padrĂŁo alloc (como vimos antes), ou para alocar outro espaço de endereço. Por exemplo, podemos querer alocar espaço MMIO para os BARs PCI:

use buddy_system_allocator::FrameAllocator;
use core::alloc::Layout;

fn main() {
    let mut allocator = FrameAllocator::<32>::new();
    allocator.add_frame(0x200_0000, 0x400_0000);

    let layout = Layout::from_size_align(0x100, 0x100).unwrap();
    let bar = allocator
        .alloc_aligned(layout)
        .expect("Failed to allocate 0x100 byte MMIO region");
    println!("Allocated 0x100 byte MMIO region at {:#x}", bar);
}
  • Os BARs PCI sempre tĂȘm alinhamento igual ao seu tamanho.
  • Execute o exemplo com cargo run em src/bare-metal/useful-crates/allocator-example/. (NĂŁo executarĂĄ no Playground por causa da dependĂȘncia do crate).