Virtual memory basics
To recap, Linux configures the memory management unit (MMU) of the CPU to present a virtual address space to a running program that begins at zero and ends at the highest address, 0xffffffff
, on a 32-bit processor. This address space is divided into pages of 4 KiB (there are rare examples of systems using other page sizes).
Linux divides this virtual address space into an area for applications, called user space, and an area for the kernel, called kernel space. The split between the two is set by a kernel configuration parameter named PAGE_OFFSET
. In a typical 32-bit embedded system, PAGE_OFFSET
is 0xc0000000
, giving the lower 3 gigabytes to user space and the top gigabyte to kernel space. The user address space is allocated per process so that each process runs in a sandbox, separated from the others. The kernel address space is the same for all processes: there is only one kernel.
Pages in this virtual address space are mapped to physical addresses by the MMU, which...