Π’ΠΎΠ²Π΅Π΄ Π²ΠΎ сСмафори Π²ΠΎ Линукс

ΠŸΡ€Π΅Π²ΠΎΠ΄ΠΎΡ‚ Π½Π° ΡΡ‚Π°Ρ‚ΠΈΡ˜Π°Ρ‚Π° Π΅ ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²Π΅Π½ Π²ΠΎ прСсрСт Π½Π° ΠΏΠΎΡ‡Π΅Ρ‚ΠΎΠΊΠΎΡ‚ Π½Π° курсот β€žΠΠ΄ΠΌΠΈΠ½ΠΈΡΡ‚Ρ€Π°Ρ‚ΠΎΡ€ Linux.Basicβ€œ.

Π’ΠΎΠ²Π΅Π΄ Π²ΠΎ сСмафори Π²ΠΎ Линукс

Π‘Π΅ΠΌΠ°Ρ„ΠΎΡ€ΠΎΡ‚ Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·Π°ΠΌ кој ΠΈΠΌ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π½Π° ΠΊΠΎΠ½ΠΊΡƒΡ€Π΅Π½Ρ‚Π½ΠΈΡ‚Π΅ процСси ΠΈ нишки Π΄Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ со сподСлСни рСсурси ΠΈ ΠΏΠΎΠΌΠ°Π³Π° Π²ΠΎ Ρ€Π΅ΡˆΠ°Π²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ со ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡ˜Π°Ρ‚Π°, ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ сС Ρ‚Ρ€ΠΊΠΈ, ΡœΠΎΡ€-сокак ΠΈ нСсоодвСтно ΠΎΠ΄Π½Π΅ΡΡƒΠ²Π°ΡšΠ΅ Π½Π° Π½ΠΈΡˆΠΊΠΈΡ‚Π΅.

Π—Π° Π΄Π° сС Ρ€Π΅ΡˆΠ°Ρ‚ ΠΎΠ²ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ, ΠΊΠ΅Ρ€Π½Π΅Π»ΠΎΡ‚ содрТи Π°Π»Π°Ρ‚ΠΊΠΈ ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ сС мутСкси, сСмафори, сигнали ΠΈ Π±Π°Ρ€ΠΈΠ΅Ρ€ΠΈ.

ΠŸΠΎΡΡ‚ΠΎΡ˜Π°Ρ‚ Ρ‚Ρ€ΠΈ Ρ‚ΠΈΠΏΠ° Π½Π° сСмафори:

  1. Π‘ΠΈΠ½Π°Ρ€Π΅Π½ сСмафор
  2. Π‘Π΅ΠΌΠ°Ρ„ΠΎΡ€ Π·Π° Π±Ρ€ΠΎΠ΅ΡšΠ΅
  3. Низи ΠΎΠ΄ сСмафори (сСт Π½Π° сСмафори)

ΠŸΠΎΠ³Π»Π΅Π΄Π½Π΅Ρ‚Π΅ Π³ΠΎ статусот Π½Π° IPC

Π‘Π»Π΅Π΄Π½ΠΈΠ²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° сС користат Π·Π° Π΄Π° сС Π΄ΠΎΠ±ΠΈΡ˜Π°Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π·Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»Π½Π°Ρ‚Π° ΡΠΎΡΡ‚ΠΎΡ˜Π±Π° Π½Π° мСѓупроцСсната ΠΊΠΎΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° (IPC).

# ipcs
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 65536 root 600 393216 2 dest
0x00000000 98305 root 600 393216 2 dest
0x00000000 131074 root 600 393216 2 dest
0x00000000 163843 root 600 393216 2 dest
0x00000000 196612 root 600 393216 2 dest
0x00000000 229381 root 600 393216 2 dest
0x00000000 262150 root 600 393216 2 dest
0x00000000 294919 root 600 393216 2 dest
0x00000000 327688 root 600 393216 2 dest
------ Semaphore Arrays --------

key semid owner perms nsems

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

Активни сСмафор Π½ΠΈΠ·ΠΈ

ΠŸΡ€ΠΈΠΊΠ°ΠΆΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π·Π° Π°ΠΊΡ‚ΠΈΠ²Π½ΠΈΡ‚Π΅ Π½ΠΈΠ·ΠΈ Π½Π° сСмафори.

# ipcs -s
------ Semaphore Arrays --------
key semid owner perms nsems

Π‘Π΅Π³ΠΌΠ΅Π½Ρ‚ΠΈ Π·Π° сподСлСна ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π°

ΠŸΡ€ΠΈΠΊΠ°Π· Π½Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π·Π° Π°ΠΊΡ‚ΠΈΠ²Π½ΠΈΡ‚Π΅ сподСлСни мСмориски сСгмСнти.

# ipcs -m
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 65536 root 600 393216 2 dest
0x00000000 98305 root 600 393216 2 dest

Π“Ρ€Π°Π½ΠΈΡ†ΠΈ

Π’ΠΈΠΌ ipcs -l ΠΏΡ€ΠΈΠΊΠ°ΠΆΡƒΠ²Π° сподСлСна ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π°, сСмафор ΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΡƒΠ²Π°ΡšΠ° Π·Π° ΠΏΠΎΡ€Π°ΠΊΠΈ.

# ipcs -l
------ Shared Memory Limits --------
max number of segments = 4096
max seg size (kbytes) = 4194303
max total shared memory (kbytes) = 1073741824
min seg size (bytes) = 1

------ Semaphore Limits --------
max number of arrays = 128
max semaphores per array = 250
max semaphores system wide = 32000
max ops per semop call = 32
semaphore max value = 32767

------ Messages: Limits --------
max queues system wide = 16
max size of message (bytes) = 65536
default max size of queue (bytes) = 65536

Π—Π°Π΅Π΄Π½ΠΈΡ‡ΠΊΠ° ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π°

ΠšΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° ΠΏΠΎΠ΄ΠΎΠ»Ρƒ ја ΠΏΡ€ΠΈΠΊΠ°ΠΆΡƒΠ²Π° сподСлСната ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π°.

# ipcs -m
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 65536 root 600 393216 2 dest
0x00000000 98305 root 600 393216 2 dest
0x00000000 131074 root 600 393216 2 dest
0x00000000 163843 root 600 393216 2 dest
0x00000000 196612 root 600 393216 2 dest
0x00000000 229381 root 600 393216 2 dest
0x00000000 262150 root 600 393216 2 dest
0x00000000 294919 root 600 393216 2 dest
0x00000000 327688 root 600 393216 2 dest

ΠšΡ€Π΅Π°Ρ‚ΠΎΡ€ΠΈ Π½Π° рСсурси

ΠšΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° Π³ΠΈ ΠΏΡ€ΠΈΠΊΠ°ΠΆΡƒΠ²Π° корисникот ΠΈ Π³Ρ€ΡƒΠΏΠ°Ρ‚Π° Π½Π° сопствСникот ΠΈ ΠΊΡ€Π΅Π°Ρ‚ΠΎΡ€ΠΎΡ‚ Π½Π° рСсурсот.

# ipcs -m -c

------ Shared Memory Segment Creators/Owners --------
shmid perms cuid cgid uid gid
65536 600 root root root root
98305 600 root root root root
131074 600 root root root root
163843 600 root root root root
196612 600 root root root root
229381 600 root root root root
262150 600 root root root root
294919 600 root root root root
327688 600 root root root root

ΠšΠΎΡ€ΠΈΡΡ‚Π΅ΡšΠ΅ Π½Π° IPC Tools

Π’ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΡ‚ ΠΏΠΎΠ΄ΠΎΠ»Ρƒ, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€ΠΎΡ‚ -u ΠŸΡ€ΠΈΠΊΠ°ΠΆΡƒΠ²Π° Ρ€Π΅Π·ΠΈΠΌΠ΅ Π½Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°Ρ‚Π° Π½Π° ситС IPC Π°Π»Π°Ρ‚ΠΊΠΈ.

# ipcs -u

------ Shared Memory Status --------
segments allocated 9
pages allocated 864
pages resident 477
pages swapped 0
Swap performance: 0 attempts 0 successes

------ Semaphore Status --------
used arrays = 0
allocated semaphores = 0

------ Messages: Status --------
allocated queues = 0
used headers = 0
used space = 0 bytes

Кога услугитС сС ΠΏΡ€Π΅ΠΊΠΈΠ½Π°Ρ‚ΠΈ, сСмафоритС ΠΈ сСгмСнтитС Π½Π° сподСлСната ΠΌΠ΅ΠΌΠΎΡ€ΠΈΡ˜Π° исто Ρ‚Π°ΠΊΠ° ΠΌΠΎΡ€Π° Π΄Π° сС ΠΈΠ·Π±Ρ€ΠΈΡˆΠ°Ρ‚. Ако Ρ‚ΠΈΠ΅ Π½Π΅ сС отстранат, ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ со помош Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ‚Π° ipcrm, ΠΏΡ€Π΅Π½Π΅ΡΡƒΠ²Π°Ρ˜ΡœΠΈ Π³ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΡ‚ Π½Π° ΠΎΠ±Ρ˜Π΅ΠΊΡ‚ΠΎΡ‚ IPC.

# ipcs -a
# ipcrm -s < sem id>

ΠœΠΎΠΆΠ΅Ρ‚Π΅ исто Ρ‚Π°ΠΊΠ° Π΄Π° Π³ΠΈ ΠΌΠ΅Π½ΡƒΠ²Π°Ρ‚Π΅ Π³Ρ€Π°Π½ΠΈΡ†ΠΈΡ‚Π΅ Π½Π° сСмафорот ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ sysctl.

# /sbin/sysctl -w kernel.sem=250

Π’ΠΎΠ²Π΅Π΄ Π²ΠΎ сСмафори Π²ΠΎ Линукс

Π˜Π·Π²ΠΎΡ€: www.habr.com

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€