For 32 bit Linux, the virtual memory layout of a process:
Kernel Virtual Memory Address Range: 0xc0000000 - 0xffffffff
Process Virtual Memory Address Range: 0x00000000 - 0xbfffffff
Process specific data structures (Different for each process) |
|
Physical memory (Identical for each process) |
|
0xc0000000 ___ | Kernel code
and data (Identical for each process) |
User stack | |
(Unmapped) | |
Memory mapped region for shared libraries |
|
brk ___ | (Unmapped) |
Run-time heap (via malloc) | |
Uninitalized data (.bss) | |
Initialized data (.data) | |
0x08048000__ | Program text (.text) |
0x00000000___ | (Unmapped) |
How can multiple process ALL exist with their program text, stack, etc. at the same virtual addresses?