了解Linux中的信号量
时间:2020-03-05 15:29:25 来源:igfitidea点击:
信号量是一种机制,允许竞争过程或者线程来改变,监视查询和控制共享系统资源。
信号量是对多处理系统中的竞争条件的解决方案。
当多个进程尝试访问共享资源时,会发生种族条件。
如果应用程序需要多线程功能,那么它配备了一组问题,例如竞争条件,死锁和线程的不正确行为。
为了解决竞争条件,死锁,线程行为不正确,内核提供了一组工具,如互斥锁,信号,孤立在解决多线程多处理器问题中。
有三种类型的信号量
1)二进制信号量2)计数信号量3)信号量集
显示XSI间流程间通信
下面的命令显示XSI间流程间通信设施状态。
# 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
共享内存段
打印有关Active Shared Memory Seagments的信息。
# 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
列出创建者的ID
命令列出创建者的用户ID和组ID以及所有者的用户ID和组ID。
# 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
当我们停止所有服务时,必须删除信号量和共享内存段。
如果没有,我们将需要使用IPCS命令。
可以使用ipcrm
命令删除段ID。
# ipcs -a # ipcrm -s < sem id>
我们可以在Sysctl文件中增加信号量值。
# /sbin/sysctl -w kernel.sem=250