kern/doc/i386/memory.md
fef 3fee893f21
x86: begin preparations for amd64 support
This is a huge commit, but it mainly just moves
some files around and doesn't change their
contents much.
A lot of stuff works the same on amd64 as it does
on i386, so i'm moving the parts that are specific
to the latter into separate subdirectories while
the rest can be shared with the amd64 codebase.
2021-10-21 05:27:42 +02:00

1.1 KiB

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.