ipc/ 进程间通信机制与原理详解

ipc/ 进程间通信机制与原理详解

源码路径rk3588/kernel-6.1/ipc/
内核版本:Linux 6.1(RK3588 / ARM64)
文档目录linuxDoc/ipc/

内核 IPC 子系统实现两类机制:System V IPC(信号量、消息队列、共享内存)与 POSIX 消息队列mqueue 文件系统)。现代应用更多使用 管道、Unix socket、memfd、io_uring,但 SysV/POSIX mq 仍广泛用于遗留服务、数据库与 容器命名空间隔离


目录


一、子系统职责

机制 用户 API 内核实现
信号量 semget semop semctl sem.c
消息队列 msgget msgsnd msgrcv msgctl msg.c + msgutil.c
共享内存 shmget shmat shmdt shmctl shm.c
旧接口 ipc(call, …) syscall.c(部分 arch 仍保留)
POSIX mq mq_open mq_timedsend mqueue.cmqueue fs)
隔离 unshare -i / Docker namespace.c + IPC_NS

二、架构关系

用户态ipc/其它子系统SysV APImq_* APIutil.c 公共 ID/权限sem.cmsg.cshm.cmqueue.cnamespace.cmm VMA 页缓存VFS mqueuefsLSM security_ipc

三、统一 ID 与权限模型

3.1 IPC ID 编码(util.h

  • index(低 15 位,或扩展模式 24 位)+ sequence(防 id 重用 UAF)
  • ipc_addid / ipc_rmid 管理 idripc_findkeyrhashtable

3.2 创建路径 ipcget

  1. IPC_PRIVATE:直接 getnew
  2. IPC_CREAT | keyipcget_public 查表或创建
  3. 权限ipcperms + LSM security_*_associate

3.3 锁(util.c 头注释)

  • RCU 查找 kern_ipc_perm
  • 每对象 kern_ipc_perm.lock 做修改类操作
  • ids->rwsem:创建/删除/遍历 id 集、/proc/sysvipc

四、与 RK3588 关系

  • 无平台补丁;ARM64 使用独立 syscall(semop 等),一般不依赖旧 ipc()
  • 嵌入式若裁掉 SYSVIPC 可缩小内核,但 glibc/部分中间件 可能仍需要
  • 容器/Android 命名空间 依赖 IPC_NS 时本目录为必需

详见 07


功能组专题

编号 文档
01 SysV-IPC公共框架与ID管理机制与实现详解.md
02 信号量机制与实现详解.md
03 SysV消息队列机制与实现详解.md
04 共享内存机制与实现详解.md
05 POSIX消息队列机制与实现详解.md
06 命名空间sysctl与兼容层机制与实现详解.md
07 RK3588平台关联与使用场景详解.md

文章互动

阅读 --

留言

0 条留言

正在加载留言…