я понимаю семафоры, но что это за массивы семафоров, которые используются в моем 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 имеют операции «вверх» / «вниз» для увеличения / уменьшения значения структуры, в sem_arrays есть операции для редактирования любого из значений в его массиве.
У них есть отменяемые операции. Процесс может позволить ядру откатить операцию, если она неожиданно завершится.
Кроме того, какой ресурс ОС они охраняют?
Поскольку они предназначены для процессов пользовательского режима, я бы не подумал, что они охраняют какие-либо ресурсы ОС.
Для получения дополнительной информации: «Понимание ядра Linux» - Глава 19.