我理解信号量 ,但是我的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 $
另外,他们正在守卫哪些操作系统资源 ?
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来确定谁在使用它。
是的,我被这个困惑了。
信号量数组是用户进程的内核信号量的SysV替代品。
他们有点复杂:
他们使用一组值来保护一个信号量的多个资源。 因此,在Linux内核信号量具有“向上”/“向下”操作来增加或减less结构值的地方,sem_arrays有操作来编辑它的数组中的任何值。
他们有可撤销的操作。 一个进程可以允许内核回滚一个操作,如果它意外死亡。
另外,他们正在守卫哪些操作系统资源?
由于他们是用户模式的进程,我不认为他们守卫任何操作系统资源。
欲了解更多信息:“了解Linux内核” – 第19章