进程地址空间中的共享内存?

时间:2014-07-12 13:50:35

标签: linux-kernel operating-system ipc shared-memory

我从操作系统概念书中读到,内存中的进程包括:文本部分,数据部分,堆栈和堆。

但我问的是,当创建此部分时,进程要求Kernel创建共享内存段?在堆?


另一个问题内核知道有关PCB格式的系统中每个进程的信息,并将此PCB保存在进程表中。

问题是:进程表双向链表是什么?

1 个答案:

答案 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 ]