Какие массивы семафоров в 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
$
Кроме того, какой ресурс ОС они охраняют?
2 ответа
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