เบเบฒเบ™เปเบ™เบฐเบ™เปเบฒเบเปˆเบฝเบงเบเบฑเบš Semalt เปƒเบ™ Linux

เบเบฒเบ™โ€‹เปเบ›โ€‹เบžเบฒโ€‹เบชเบฒโ€‹เบ‚เบญเบ‡โ€‹เบšเบปเบ”โ€‹เบ„เบงเบฒเบกโ€‹เป„เบ”เป‰โ€‹เบ–เบทเบโ€‹เบเบฐโ€‹เบเบฝเบกโ€‹เปƒเบ™โ€‹เบชเบฐโ€‹เบกเบฒเบ”โ€‹เบชเบฐโ€‹เบกเบฒเบ”โ€‹เบ‚เบญเบ‡โ€‹เบเบฒเบ™โ€‹เป€เบฅเบตเปˆเบกโ€‹เบ•เบปเป‰เบ™โ€‹เบ‚เบญเบ‡โ€‹เบงเบดโ€‹เบŠเบฒโ€‹เบเบฒเบ™ "เบœเบนเป‰เป€เบšเบดเปˆเบ‡เปเบเบ‡เบฅเบฐเบšเบปเบš Linux.Basic".

เบเบฒเบ™เปเบ™เบฐเบ™เปเบฒเบเปˆเบฝเบงเบเบฑเบš Semalt เปƒเบ™ Linux

Semaphore เปเบกเปˆเบ™เบเบปเบ™เป„เบเบ—เบตเปˆเบญเบฐเบ™เบธเบเบฒเบ”เปƒเบซเป‰เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เปเบ‚เปˆเบ‡เบ‚เบฑเบ™เปเบฅเบฐเบเบฐเบ—เบนเป‰เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบฎเปˆเบงเบกเบเบฑเบ™เปเบฅเบฐเบŠเปˆเบงเบเปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒ synchronization เบ•เปˆเบฒเบ‡เป†เป€เบŠเบฑเปˆเบ™เป€เบŠเบทเป‰เบญเบŠเบฒเบ”, deadlocks เปเบฅเบฐ thread misbehavior.

เป€เบžเบทเปˆเบญเปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰, เปเบเปˆเบ™เบกเบตเป€เบ„เบทเปˆเบญเบ‡เบกเบทเป€เบŠเบฑเปˆเบ™ mutexes, semaphores, เบชเบฑเบ™เบเบฒเบ™เปเบฅเบฐเบชเบดเปˆเบ‡เบเบตเบ”เบ‚เบงเบฒเบ‡.

เบกเบตเบชเบฒเบกเบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡ semaphores:

  1. เบ„เบนเปˆเบชเบญเบ‡
  2. เบเบฒเบ™เบ™เบฑเบš semaphore
  3. เบญเบฒเป€เบฃ Semaphore (เบŠเบธเบ” semaphore)

เป€เบšเบดเปˆเบ‡เบชเบฐเบ–เบฒเบ™เบฐ 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

เบญเบฒเป€เบฃ semaphore เป€เบ„เบทเปˆเบญเบ™เป„เบซเบง

เบชเบฐเปเบ”เบ‡เบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบš array semaphore เบ—เบตเปˆเปƒเบŠเป‰เบงเบฝเบ.

# 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 เบชเบฐโ€‹เปเบ”เบ‡โ€‹เบ„เบงเบฒเบกโ€‹เบŠเบปเบ‡โ€‹เบˆเปเบฒโ€‹เบ—เบตเปˆโ€‹เปเบšเปˆเบ‡โ€‹เบ›เบฑเบ™โ€‹, semaphore เปเบฅเบฐโ€‹เบ‚เปเป‰โ€‹เบˆเปเบฒโ€‹เบเบฑเบ”โ€‹เบ‚เปเป‰โ€‹เบˆเปเบฒโ€‹เบเบฑเบ”โ€‹.

# 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

เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เป‰เบฒเบ‡เบฅเบธเปˆเบกเบ™เบตเป‰, เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบต -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

เป€เบกเบทเปˆเบญเบเบฒเบ™เบšเปเบฅเบดเบเบฒเบ™เบ–เบทเบเบขเบธเบ”, Semalt เปเบฅเบฐเบžเบฒเบเบชเปˆเบงเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ—เบตเปˆเปƒเบŠเป‰เบฎเปˆเบงเบกเบเบฑเบ™เบ•เป‰เบญเบ‡เบ–เบทเบเบฅเบถเบšเบ–เบดเป‰เบก. เบ–เป‰เบฒเบžเบงเบเป€เบ‚เบปเบฒเบšเปเปˆเป„เบ”เป‰เบ–เบทเบเป‚เบเบเบเป‰เบฒเบ, เบ™เบตเป‰เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰เป‚เบ”เบเปƒเบŠเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡ ipcrm, เบœเปˆเบฒเบ™เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบงเบฑเบ”เบ–เบธ IPC.

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

เบ—เปˆเบฒเบ™เบเบฑเบ‡เบชเบฒเบกเบฒเบ”เบ›เปˆเบฝเบ™เบ‚เบตเบ”เบˆเปเบฒเบเบฑเบ”เบ‚เบญเบ‡ Semalt เป‚เบ”เบเปƒเบŠเป‰ sysctl.

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

เบเบฒเบ™เปเบ™เบฐเบ™เปเบฒเบเปˆเบฝเบงเบเบฑเบš Semalt เปƒเบ™ Linux

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™