共享内存:key和id有什么区别?

4

当调用 ipcs -a 命令时,key 列和 id 列之间有什么区别?

下面是 ipcs 命令的一个示例输出:

ipcs -a

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status      
0x00000000 0          ybaumes    600        393216     2          dest         
0x00000000 65537      ybaumes    700        8124648    2          dest         
0x00000000 3932163    ybaumes    700        169376     2          dest         
0x00000000 3604485    ybaumes    600        393216     2          dest         
2个回答

5
首先,在共享内存中,“id”列是指特定处理程序对共享内存区域的引用。如果未获取共享内存区域,则返回负值。因此,“id”基本上是由系统生成的,用户无法控制。
而ipcs命令中的“key”列是指与进程间通信资源(如共享内存、消息队列和信号量)相关联的值。“键只是一个key_t类型的整数”。此外,key参数是与信号量ID关联的访问值。它可以是简单的整数号码,例如34562,可以在使用相关的get函数创建这些资源时传递。需要键的位置接受一个特殊的参数IPC_PRIVATE。在这种情况下,系统将生成一个唯一的键,并保证没有其他进程会有相同的键。
如果在需要键的地方请求IPC_PRIVATE资源,则该进程将为该资源接收一个唯一的键。由于该资源被识别为一个唯一的对外不知的键,其他进程将无法共享该资源,因此,请求进程保证是独占拥有和访问该资源。
当在消息队列方面使用时,这个概念更加清晰,其中一个消息被生成并发送时具有特定的键值。只有当接收端匹配给定的键时,接收端才能接收到相同的消息。因为也返回值给出了消息id,该id是根据相应的键值计算出来的,主要是用于检查资源的唯一性。

3
请参阅shmget(2)的文档。在创建时,密钥为IPC_PRIVATE或0。 shmid是返回该特定共享内存段的值,以便其他进程或系统调用可以引用该段。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接