SysV IPC 包括 Semaphore、Shared Memory 和 Message Queue 这 3 类进程间通信手段,虽然 POSIX.1-2001 实时接口标准规定了另一套提供相同手段但更一致化的接口(POSIX IPC),但 SysV IPC 仍然有相当数量的用户。
通过调整一些内核参数,可以更改 SysV IPC 对数据的固有限制,相关参数对应的控制文件可在 /proc/sys/kernel/
目录下找到,也可以通过 sysctl
更改,现罗列如下:
控制文件路径 | 内核参数(通过 sysctl 更改时使用) | 含义 |
---|---|---|
/proc/sys/kernel/shmmax |
kernel.shmmax |
共享内存中最大内存块尺寸(byte),默认为 33554432,即 32MB |
/proc/sys/kernel/shmall |
kernel.shmall |
整个系统中共享内存的最大尺寸,以页(4KB)为单位,默认为 2097152,即 2M 个页,共计 8GB |
/proc/sys/kernel/shmmni |
kernel.shmmni |
整个系统中共享内存块的最大数量,默认为 4096 |
/proc/sys/kernel/msgmax |
kernel.msgmax |
消息队列中单条消息的最大尺寸(byte),默认为 8192 |
/proc/sys/kernel/msgmnb |
kernel.msgmnb |
默认的每个消息队列的最大尺寸(byte),默认为 16384 |
/proc/sys/kernel/msgmni |
kernel.msgmni |
整个系统中消息队列的最大数量,默认为 16 |
/proc/sys/kernel/sem |
kernel.sem |
信号量的 4 个控制参数,从前向后分别是:单个信号量集合中容纳的最大信号量数量(默认为 250)、整个系统中信号量的最大数量(默认为 32000)、每个 semop 调用中允许的最大操作数量(默认为 32)、整个系统中信号量集合的最大数量(默认为 128) |
以上参数及含义都可以从 linux kernel 源码树的 ipc/
子目录下 SysV IPC 对应的实现文件中找到,其相关宏定义在 include/linux/
子目录下的相关头文件中。