Linux DMA ====== DMA Zone ====== Reference: http://www.makelinux.net/books/lkd2/ch11lev1sec2 Because of hardware limitations, the kernel cannot treat all pages as identical. Some pages, because of their physical address in memory, cannot be used for certain tasks. Because of this limitation, the kernel divides pages into different zones. The kernel uses the zones to group pages of similar properties. In particular, Linux has to deal with two shortcomings of hardware with respect to memory addressing: Some hardware devices are capable of performing DMA (direct memory access) to only certain memory addresses. Some architectures are capable of physically addressing larger amounts of memory than they can virtually address. Consequently, some memory is not permanently mapped into the kernel address space. Because of these constraints, there are three memory zones in Linux: * ZONE_DMA This zone contains pages that are capable of undergoing DMA. * ZONE_NORMAL This zone contains normal, regularly mapped, pages. * ZONE_HIGHMEM This zone contains "high memory," which are pages not permanently mapped into the kernel's address space. These zones are defined in <**linux/mmzone.h**>.