命名空间、sysctl 与兼容层机制与实现详解

命名空间、sysctl 与兼容层机制与实现详解

源码路径rk3588/kernel-6.1/ipc/namespace.cipc_sysctl.cmq_sysctl.ccompat.csyscall.c
文档目录linuxDoc/ipc/


目录


一、IPC 命名空间

1.1 创建与克隆

1
2
3
4
5
6
7
struct ipc_namespace *copy_ipcs(unsigned long flags,
struct user_namespace *user_ns, struct ipc_namespace *ns)
{
if (!(flags & CLONE_NEWIPC))
return get_ipc_ns(ns);
return create_ipc_ns(user_ns, ns);
}

create_ipc_ns 顺序:mq_init_ns → sysctl → msg_init_nssem_init_nsshm_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_namespacesucount 限制每用户 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_msgctlold_semctlcompat msgrcv
  • semtimedop_time32mq_*_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

文章互动

阅读 --

留言

0 条留言

正在加载留言…