Linux 共享内存实现原理
1、共享内存的实现采用了内存映射技术
2、共享内存主要集中3个内核函数,do_shmat、sys_shmat、sys_shmdt
3、sys_shmat调用do_shmat实现内存共享的attach
4、sys_shmdt实现内存共享的detach和destroy,首先查找相应的vma,如果找到执行ummap操作
do_shmat原理
当系统提出attach或创建共享内存时,内核会为每一个共享内存段提供一个shmid_kernel的数据结构:
struct file定义参考如下:
1、该数据结构中最重要的字段就是shm_file,它指向了共享内存对应的虚拟文件
2、shm_file中的f_mapping指向了该内存段使用的页面(物理内存)
3、当进程创建或attach共享内存时,在用户态先向虚拟内存系统申请各自的vma_struct, 内部成员vm_file指向shm_file
4、这样就完成了虚拟内存, 共享内存(文件系统)和物理内存的连接