复杂度3/5
机密度3/5
最后更新2021/04/21
每个进程都有自己的有效地址空间。这个地址空间有些段已经预先被分配或占用(共享),有些等待进程自己进行分配。对进程来说,有2个参数4种组合:
32位或64位程序
内核态进程或者用户态进程
32位用户态进程的有效地址内存段分配方案如下:
段 |
用途 |
属性 |
0 |
AIX kernel |
共享,只读 |
1 |
用户进程 |
共享,只读 |
2 |
Data, BSS, stack, Ublock, uthread, heap |
私有,读写 |
3-C |
共享数据(shmat/mmap),3-A可做heap |
共享,读写 |
D |
Shared Library加载空间 |
共享,只读 |
E |
mmap/shmat空间 |
共享,读写 |
F |
Shared Library数据 |
私有,读写 |
由于几乎没有使用实例,32位内核态进程的分配方案就不介绍了。
64位进程模式下,可用地址段大大增加,而且用户态程序和内核态程序分配方案相同。
段 |
用途 |
0x0000_0000_0 |
System call tables, kernel text |
0x0000_0000_1 |
Reserved for system use |
0x0000_0000_2 |
Reserved for user mode loader (process private segment) |
0x0000_0000_3 - 0x0000_0000_C |
Shmat or mmap use |
0x0000_0000_D |
Reserved for user mode loader |
0x0000_0000_E |
shmat or mmap use |
0x0000_0000_F |
Reserved for user mode loader |
0x0000_0001_0 - 0x06FF-FFFF_F |
Application text, data, BSS and heap |
0x0700_0000_0 - 0x07FF_FFFF_F |
Default application shmat and mmap area |
0x0800_0000_0 - 0x08FF_FFFF_F |
Application explicit module load area |
0x0900_0000_0 - 0x09FF_FFFF_F |
Shared library text and per-process shared library data |
0x0A00_0000_0 - 0x0EFF_FFFF_F |
Reserved for future use |
0x0F00_0000_0 - 0x0FFF_FFFF_F |
Application primary thread stack |
0x1000_0000_0 - 0XEFFF_FFFF_F |
Reserved for future use |
0xF000_0000_0 - 0xFFFF_FFFF_F |
Additional kernel segments |