System V IPC 中对密钥的需求
Posted
技术标签:
【中文标题】System V IPC 中对密钥的需求【英文标题】:The need for a key in System V IPC 【发布时间】:2016-03-14 16:02:36 【问题描述】:在学习信号量,特别是 System V 信号量时,我继续阅读有关 System V IPC 密钥的内容,但无法理解对此类标识符的需求。
把它带回信号量,如果关键标识符的目的是:
"为了方便不同进程获取标识符 来自他们需要共享的对象(高级 UNIX 编程,第 2 版,第 429 页)"
为什么我们不能只使用信号量 id 作为可能被不同进程使用的标识符?
附: This 回答谈到了密切的主题,但没有具体提到所谓的使用对象 id 作为标识符(而不是键)的可能性。
【问题讨论】:
因为它是 IPC 的工作原理。 【参考方案1】:也许你应该尝试回答以下问题:
您将如何组织一组进程以使用相同的信号量进行同步?
进程(以及运行或配置这些进程的人员)没有 一种通过 id 识别信号量的简单方法。 此值是运行内核的内部值,并且在下次启动时可能不存在从一次内核启动中获知的值。因此,给定一个键作为(外部)标识符,您可以轻松地将内部内核对象与外部已知名称相关联。
SysV IPC XXget() 方法可以将外部密钥与内部对象相关联(使用适当的参数,即 IPC_CREATE 标志)
【讨论】:
从引导到引导具有固定标识符的重要性是什么?在文件路径名中,我想这只是为了易于使用。和 IPC 对象一样吗? IPC id 类似于文件的 inode,而 key 类似于路径。您通常对文件的 inode 不感兴趣,但您可能提前知道路径(即使尚未创建文件)【参考方案2】:当几个独立的进程需要共享某个资源时,它们需要知道如何访问该资源。例如,文件是共享资源,文件名说明如何访问该资源。这是相当笼统的想法。
当您从独立应用程序访问 System V IPC 资源时,您需要一种方法来识别它们。当你想打开文件时,你需要知道它的名字。当你想检查信号量时,你也需要知道它的名字。在 System V 中,这些名称采用数字键的形式(内核更容易操作)。这就是密钥的来源。信号标识符可以是任何东西——比如文件描述符——但密钥是一成不变的。
【讨论】:
【参考方案3】:键就像路径名,在机器上是唯一的,并且可以从任何进程访问。标识符就像文件描述符,在给定进程中用于索引打开的资源。您通过将路径名传递给 open(2) 来访问文件,然后使用 open(2) 返回的 fd 在读/写/关闭中引用它。您通过将队列的键传递给 msgget(2) 来访问队列,并使用 msgget 调用返回的 id 在 msg* 函数中引用它。
【讨论】:
以上是关于System V IPC 中对密钥的需求的主要内容,如果未能解决你的问题,请参考以下文章