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?