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 by default. If 4 KiB pages are too small for your application, then you can configure the kernel to use HugePages, reducing the amount of system resources needed to access page table entries and increasing the Translation Lookaside Buffer (TLB) hit ratio.
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...