命名空间、sysctl 与兼容层机制与实现详解
源码路径:
rk3588/kernel-6.1/ipc/namespace.c、ipc_sysctl.c、mq_sysctl.c、compat.c、syscall.c
文档目录:linuxDoc/ipc/
目录
一、IPC 命名空间
1.1 创建与克隆
1 | struct ipc_namespace *copy_ipcs(unsigned long flags, |
create_ipc_ns 顺序:mq_init_ns → sysctl → msg_init_ns → sem_init_ns → shm_init_ns。
1.2 销毁
- 引用计数归零时删除所有 SysV 对象、mqueue 挂载
put_ipc_ns/free_ipc_ns:与 pid namespace、user namespace 协同
1.3 配置
CONFIG_IPC_NS:默认 y(需 SYSVIPC 或 POSIX_MQUEUE)inc_ipc_namespaces:ucount 限制每用户 NS 数量
二、sysctl
2.1 ipc_sysctl.c(SysV)
| procname | 绑定字段 | 作用 |
|---|---|---|
shmmax / shmall / shmmni |
shm | 共享内存限额 |
msgmax / msgmni / msgmnb |
msg | 消息队列 |
sem |
sem_ctls[4] |
SEMMSL 等 |
shm_rmid_forced |
强制清理孤儿 shm |
ipc_mni / ipc_mni_shift:扩展 IPC ID index 位数(需 SYSVIPC_SYSCTL)。
2.2 mq_sysctl.c
每 NS 的 fs.mqueue* 限额,与 mq_queues_count 协同。
三、syscall 与 compat
3.1 旧 ipc() 多路复用(syscall.c)
在 __ARCH_WANT_SYS_IPC 的架构上,SYSCALL_DEFINE6(ipc) 按 call 分派 SEM/MSG/SHM 子命令;ARM64 通常直接实现独立 syscall,此文件可能不参与链接。
3.2 compat.c / CONFIG_SYSVIPC_COMPAT
- 32 位用户态:
old_msgctl、old_semctl、compat msgrcv等 semtimedop_time32、mq_*_time32在各自文件
四、init_ipc_ns
msgutil.c:
1 | struct ipc_namespace init_ipc_ns = { ... }; |
初始命名空间;容器创建新 NS 时复制/新建限额默认值。
附录
| 操作 | 用户命令 |
|---|---|
| 新 IPC NS | unshare --ipc / docker run |
| 查看 NS | /proc/<pid>/ns/ipc |
相关:07 RK3588
正在加载留言…