torvalds/linux
IPC (System V)
Purpose
ipc/ implements the System V IPC primitives: message queues (msgget/msgsnd/msgrcv), semaphores (semget/semop), and shared memory (shmget/shmat). It also implements POSIX message queues (mq_open, mq_send, mq_receive).
This is a small directory by code volume but historically important. Modern code uses other primitives (futex, eventfd, pipe, file-backed mappings, shm_open).
Directory layout
ipc/
├── Makefile
├── util.{c,h} # Common idr / shared init
├── ipc_sysctl.c # /proc/sys/kernel/* knobs (msgmax, semmsl, shmmax, …)
├── msg.c # SysV msgqueues
├── msgutil.c # Message helper
├── sem.c # SysV semaphores
├── shm.c # SysV shared memory (uses shmem.c under mm)
├── mqueue.c # POSIX message queues
├── mq_sysctl.c # POSIX mq sysctls
├── compat.c # 32-bit compat shims
├── namespace.c # IPC namespace lifecycle
└── syscall.c # The IPC multiplex syscall on archs that have itKey abstractions
| Symbol | File | Purpose |
|---|---|---|
struct ipc_namespace |
include/linux/ipc_namespace.h |
Per-namespace tables (msg, sem, shm). |
struct kern_ipc_perm |
include/linux/ipc.h |
Common header (uid/gid/mode/key) for IPC objects. |
struct shmid_kernel |
ipc/shm.c |
A SysV shared memory segment. |
struct msg_queue |
ipc/msg.c |
A SysV message queue. |
struct sem_array |
ipc/sem.c |
A SysV semaphore set. |
How it works
graph LR
APP[User app] -->|msgget/semget/shmget| IPC[ipc/*.c]
IPC -->|namespace| NS[ipc_namespace]
IPC -->|allocate id| IDR[idr]
APP -->|shmat/shmdt| SHM[ipc/shm.c]
SHM --> SHMEM[mm/shmem.c]
APP -->|mq_send/mq_receive| MQ[ipc/mqueue.c]
MQ --> VFS[fs/]- SysV objects are addressed by integer IDs, allocated in an
idrper namespace. Theirkern_ipc_permcarries akey(IPC_PRIVATEor user-supplied). - SysV shared memory is implemented on top of
tmpfs/shmem(mm/shmem.c).shmatmaps the underlying file into the caller's address space. - POSIX message queues (
mq_*) are exposed through a separatemqueuefilesystem mounted at/dev/mqueue. - Sysctls in
/proc/sys/kernel/(msgmax, msgmnb, msgmni, semmsl, semopm, sem*, shmmax, shmall, shmmni) are owned here.
Integration points
- kernel/: namespaces, sysctl.
- mm/: SysV shm uses shmem.
- fs/: POSIX mqueue is its own filesystem.
- security/: LSM hooks for ipc_perm checks.
Key source files
| File | Purpose |
|---|---|
ipc/util.c |
Shared id allocation, lookup, init. |
ipc/shm.c |
SysV shared memory. |
ipc/sem.c |
SysV semaphores. |
ipc/msg.c |
SysV message queues. |
ipc/mqueue.c |
POSIX mqueues. |
ipc/namespace.c |
IPC namespace lifecycle. |
ipc/ipc_sysctl.c |
sysctl knobs. |
Entry points for modification
- Most modification here is bug fixes, namespace fixes, or adding new sysctls. New SysV primitives are not added; the modern primitives (
futex,pipe,memfd,io_uring) are preferred.
Related pages
- Memory management — shmem backs SysV shm.
- Filesystems — POSIX mqueue is a filesystem.
- Kernel core — namespaces.
Built by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.