buddy_system_allocator
buddy_system_allocator
es un crate de terceros que implementa un asignador básico del sistema buddy. Se puede utilizar tanto para LockedHeap
implementando GlobalAlloc
, de forma que puedas usar el crate alloc
estándar (tal y como vimos antes), o para asignar otro espacio de direcciones. Por ejemplo, podríamos querer asignar espacio MMIO para los registros de dirección base (BAR) de 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); }
- Los BAR de PCI siempre tienen una alineación igual a su tamaño.
- Ejecuta el ejemplo con
cargo run
ensrc/bare-metal/useful-crates/allocator-example/
. (No se ejecutará en el playground debido a la dependencia del crate).