# Virtual Memory Layout on i386 GayBSD's virtual memory map is loosely based on the one from FreeBSD. The size specifiers here are powers of two (1 KB = 1024 B). start address | offset | end address | size | description :-------------:|-----------:|:-----------:|-----------:|:----------------------- `00000000` | +0 | `7fffffff` | 2 GB | userland area `80000000` | -2 GB | `efffffff` | ~ 1.8 GB | linear physical memory `f0000000` | ~ -262 MB | `ffbfffff` | ~ 258 MB | kernel image `ffc00000` | ~ -12.2 MB | `ffffffff` | ~ 12.2 MB | recursive page table The linear physical memory is a direct mapping of physical RAM, which is required because `kmalloc()` needs to be able to allocate *physically* contiguous memory for DMA transfers. It is also used as the heap area. Unfortunately, because i don't have the resources to maintain it, the maximum supported memory size on i386 is around 1.8 GB. This is due to the required direct mapping and would require a fair bit of work to get fixed, and 32-bit support is likely to be dropped in the near future.