共享内存机制与实现详解

共享内存机制与实现详解

源码路径rk3588/kernel-6.1/ipc/shm.c
文档目录linuxDoc/ipc/


目录


一、原理

SysV 共享内存同一物理页 映射到多个进程地址空间:

  • shmget:按 key 创建段,指定 size(只增不减)
  • shmat:attach,指定地址/标志(SHM_RDONLY 等)
  • shmdt:detach
  • shmctl:IPC_RMID、STAT、锁定/解锁(SHM_LOCK)等

自动同步读写,需应用自配信号量或其它同步。


二、数据结构

结构 说明
struct shmid_kernel kern_ipc_perm + shm_file + shm_nattch + 段大小
struct shm_file_data 关联 shm id、ns、vm 列表

shm_ids(ns)ipc_namespace->ids[IPC_SHM_IDS]


三、实现要点

3.1 文件与 VMA

  • 段对应 特殊 shmem 文件shm_file_operations
  • shmatdo_shmat:创建 mmap VMA,shm_vm_opsshm_open/shm_close/shm_fault
  • 支持 HugeTLB 变体(shm_file_operations_huge

3.2 生命周期

  • shm_nattch 计数;IPC_RMID 后若 attach 仍为 0 才真正销毁
  • shm_rmid_forced sysctl:强制 RMID 行为(孤儿段清理 shm_destroy_orphaned
  • 进程退出:exit_shm 遍历 detach

3.3 限额

字段 sysctl
shm_ctlmax shmmax 单段最大
shm_ctlall shmall 页总数上限
shm_ctlmni shmmni 段数量

shm_tot 跟踪已用页。


四、与内存子系统交互

  • 实际页面由 shmem/tmpfs 回退机制分配(见 linuxDoc/mm 中 shmem)
  • shm_fault:缺页填充
  • mempolicyshm_set_policy / shm_get_policy
  • RK3588 编解码:大缓冲区更常用 DMA-BUF / ion;SysV shm 多见于遗留 IPC

五、系统调用

syscall 说明
shmget ksys_shmget
shmat / shmdt 兼容 COMPAT 地址
shmctl old_shmctl 兼容旧结构

附录

相关01 ID 管理linuxDoc/mm

文章互动

阅读 --

留言

0 条留言

正在加载留言…