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.
21 lines
1.1 KiB
Markdown
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.
|