Linux 上的信号量数组是什么?

Linux 上的信号量数组是什么?

我明白信号量,但是这些信号量数组在我的 Linux 机器上用来做什么呢?

$ ipcs

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status      
0x00000000 327681     root      644        80         2                       
0x00000000 360450     root      644        16384      2                       
0x00000000 393219     root      644        280        2                       
...

------ Semaphore Arrays --------
key        semid      owner      perms      nsems     
0x4172d4f4 290914305  lazer     660        104       
0x3b87b970 291045378  lazer     660        104       
0xa97eb380 293928963  lazer     660        104       
0x1fde2040 294191108  lazer     660        104       

------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages    

$

此外,操作系统资源他们在守卫吗?

答案1

ipcs -i <SEMID> -s将为您提供有关特定 sem 阵列的更多信息。例如

[me@home]$ ipcs -i 32769 -s

Semaphore Array semid=32769
uid=537  gid=85  cuid=537        cgid=85
mode=0600, access_perms=0600
nsems = 1
otime = Mon Sep 19 12:18:53 2011
ctime = Mon Sep 19 12:07:11 2011
semnum     value      ncount     zcount     pid
0          1          0          0          7548

使用 pid 来查明谁在使用它。

答案2

是的,我对此感到困惑。

信号量数组是 SysV 为用户进程提供的内核信号量的替代品。

它们有点复杂:

  • 它们使用一个值数组来通过一个信号量保护多个资源。因此,Linux 内核信号量具有“up”/“down”操作来增加/减少结构的值,而 sem_arrays 具有编辑其数组中任何值的操作。

  • 它们具有可撤销的操作。如果进程意外终止,则可以允许内核回滚操作。

另外,他们守护着哪些操作系统资源?

因为它们用于用户模式进程,所以我认为它们不会保护任何操作系统资源。

更多信息:《理解Linux内核》-第19章

相关内容