Назад | Перейти на главную страницу

Что такое массивы семафоров в 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    

$

Кроме того, который Ресурс ОС они охраняют?

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.