我从操作系统概念书中读到,内存中的进程包括:文本部分,数据部分,堆栈和堆。
但我问的是,当创建此部分时,进程要求Kernel创建共享内存段?在堆?
另一个问题内核知道有关PCB格式的系统中每个进程的信息,并将此PCB保存在进程表中。
问题是:进程表双向链表是什么?
答案 0 :(得分:7)
我想你的问题是关于进程内存布局。 如果是这样,Linux和Solaris进程具有以下部分:
Text
Data
BSS
Heap
MMS (memory mapping segment)
Stack
Heap和Stack之间的内存数组,即所谓的内存映射段,负责共享内存映射。而且不仅如此。共享库,打开的文件也映射到该部分内存中。
您可以通过 pmap 命令检查Linux上的进程内存布局,或者阅读进程映射文件 / proc // maps 。 下面是pmap实用程序在Linux机器上检查的DB2进程内存布局的一个片段(查看堆栈和shmid,共享内存ID,条目):
0000000000400000 52K r-x-- /opt/ibm/db2/bin/db2vend
000000000060d000 4K rwx-- /opt/ibm/db2/bin/db2vend
000000000c33e000 132K rwx-- [ anon ]
0000000200000000 35520K rwxs- [ shmid=0x57a58007 ]
000000323f200000 112K r-x-- /lib64/ld-2.5.so
and more more more shared libraries
00002b55bb45b000 4K r-x-- /lib64/libnss_files-2.5.so
00002b55bb45c000 4K rwx-- /lib64/libnss_files-2.5.so
00002b55bb45d000 39252K rwxs- [ shmid=0x57a50006 ]
00002b55bdab2000 1152K rwx-- [ anon ]
00007ffffaf35000 84K rwx-- [ stack ]
ffffffffff600000 8192K ----- [ anon ]