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

21 lines
1.1 KiB
Markdown

# 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.