复杂度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 |