Certain parts of the kernel require IO buffers. For example:
- ISA DMA
- Bus Mastering DMA
- Virtio
In general, IO buffers have certain requirements
- They need to be below 32MB physical RAM
- They need to be 64KB aligned
When writing device drivers, it's important to program the physical hardware with physical RAM addresses, not virtual addresses. Therefore, CosmOS stores IO buffers in physical RAM below 1MB which is identity mapped.
IO Buffers uses a bitmap-based allocator to provide IO buffers to devices