Inleiding tot semaforen in Linux

De vertaling van het artikel is gemaakt aan de vooravond van de start van de cursus "Beheerder Linux.Basic".

Inleiding tot semaforen in Linux

Een semafoor is een mechanisme dat concurrerende processen en threads in staat stelt bronnen te delen en helpt bij verschillende synchronisatieproblemen zoals races, impasses (wederzijdse sloten) en zich misdragende threads.

Om deze problemen op te lossen, biedt de kernel hulpmiddelen zoals mutexen, semaforen, signalen en barrières.

Er zijn drie soorten semaforen:

  1. Binaire semaforen
  2. Semaforen-tellers (semafoor tellen)
  3. Arrays van semaforen (semafoorset)

IPC-status bekijken

De volgende opdrachten geven informatie over de huidige status van communicatie tussen processen (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

Actieve arrays van semaforen

Geef informatie weer over actieve semafoorarrays.

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

Gedeelde geheugensegmenten

Bekijk informatie over actieve gedeelde geheugensegmenten.

# 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

Grenzen

Team ipcs -l geeft gedeeld geheugen, semafoor en berichtlimieten weer.

# 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

Gedeelde herinnering

De onderstaande opdracht geeft het gedeelde geheugen weer.

# 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

Resource makers

De opdracht geeft de gebruiker en groep van de eigenaar en maker van de bron weer.

# 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 gebruiken

In het onderstaande voorbeeld is de parameter -u geeft een overzicht weer van het gebruik van alle IPC-tools.

# 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

Wanneer services worden gestopt, moeten ook semaforen en gedeelde geheugensegmenten worden verwijderd. Als ze niet worden verwijderd, kan dit worden gedaan met behulp van de opdracht ipcrm, waarbij de identifier van het IPC-object wordt doorgegeven.

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

U kunt de semafoorlimieten ook wijzigen met behulp van sysctl.

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

Inleiding tot semaforen in Linux

Bron: www.habr.com

Voeg een reactie