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.
1.1 KiB
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.