Linux 中的信號量介紹

文章的翻譯是在課程開始前夕準備的 “管理員 Linux.Basic”.

Linux 中的信號量介紹

信號量是一種允許競爭進程和線程共享資源並幫助解決各種同步問題的機制,例如競爭、死鎖(互鎖)和行為不當的線程。

為了解決這些問題,內核提供了互斥鎖、信號量、信號和屏障等工具。

信號量分為三種類型:

  1. 二進制信號量
  2. Semaphores-counters(計數信號量)
  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 工具

在下面的例子中,參數 -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

Linux 中的信號量介紹

來源: www.habr.com

添加評論