【问题标题】:Shared memory in process address space?进程地址空间中的共享内存?
【发布时间】:2014-07-12 13:50:35
【问题描述】:

通过阅读操作系统概念书,我知道内存中的进程包括:文本部分、数据部分、堆栈和堆。

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


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

问题是:进程表是双向链表吗?

【问题讨论】:

  • 是的,它是双向链表(struct list_head tasks;)但是CFS调度器使用RB-tree来维护runqueue

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


【解决方案1】:

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

Text
Data
BSS
Heap
MMS (memory mapping segment)
Stack

Heap 和 Stack 之间的内存数组,也就是所谓的Memory Mapping Segment,负责共享内存映射。而且不仅如此。共享库、打开的文件也映射到那段内存中。

您可以通过 pmap 命令或读取进程映射文件 /proc//maps 来检查 Linux 上的进程内存布局。 这是 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 ]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-08
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    相关资源
    最近更新 更多