2012-11-06 19 views
5

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

我的问题如下。

  • 该术语附加看起来通用于我。我发现在理解连接涉及到的底层活性时有困难。
  • 这是什么意思映射一段内存

回答

1

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

“在Linux中,每个进程的虚拟内存被分为网页每个进程从内存中的地址保持映射到这些虚拟内存页面,其中包含实际数据虽然,每个进程都有自己的地址,多进程的映射可以指向同一个页面,允许的内存共享”

+0

好像他们错了(反过来)。每个进程都有自己的虚拟地址空间,并维护从虚拟空间到数据所在物理内存中页面帧的映射。 –

2

使用它作为char *ptr=shmat(seg_id,NULL,0); 它通过功能shmget()与包含此过程中高度重视创建的段ID以上代码。

seg_id是新建段的段ID NULL意味着操作系统将负责该段的起始地址的用户的代表 0read/write

每当一个过程附加到共享内存标志那么它必须被拆卸以便使其他进程可以通过附连到该段访问它

以分离(如果资源的锁定机构是存在的。):shmdt(ptr);