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

Mah*_*mam 2 operating-system ipc shared-memory linux-kernel

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

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


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

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

小智 7

我想你的问题是关于进程内存布局.如果是这样,Linux和Solaris进程具有以下部分:

Text
Data
BSS
Heap
MMS (memory mapping segment)
Stack
Run Code Online (Sandbox Code Playgroud)

堆和堆栈之间的存储器阵列(所谓的存储器映射段)负责共享存储器映射.而且不仅如此.共享库,打开的文件也映射到该部分内存中.

您可以通过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 ]
Run Code Online (Sandbox Code Playgroud)