【问题标题】:shmat for attaching shared memory segment用于附加共享内存段的 shmat
【发布时间】:2012-10-26 05:40:09
【问题描述】:

当我浏览 shmat 的手册页时。它被描述为API的原始功能是将与shmid关联的内存段附加到调用进程的地址空间

我的问题如下。

  • attach 这个词在我看来很笼统。我很难理解附加所指的基础活动是什么。?
  • 映射一段内存是什么意思?

【问题讨论】:

    标签: c linux ipc shared-memory


    【解决方案1】:

    这里有一个很好的解释:http://www.makelinux.net/alp/035

    “在Linux下,每个进程的虚拟内存被分割成页。每个进程都维护着一个从它的内存地址到这些虚拟内存页的映射,其中包含了实际的数据。即使每个进程都有自己的地址,但多个进程的映射可以指向同一个页面,允许共享内存”

    【讨论】:

    • 似乎他们弄错了(相反)。每个进程都有自己的虚拟地址空间,并维护着从虚拟空间到数据所在物理内存中页框的映射。
    【解决方案2】:

    将其用作char *ptr=shmat(seg_id,NULL,0); 它通过函数shmget()将创建的段ID附加到包含上述代码的进程中。

    seg_id是新建段的段id NULL 表示操作系统将代表用户处理段的起始地址 0read/write 两者的标志

    当一个进程附加到共享内存时,它必须被分离,以便另一个进程可以通过附加到该段来访问它(如果存在资源锁定机制。)

    分离:shmdt(ptr);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-01
      • 2014-04-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多