OK6410A 开发板 (八) 105 linux-5.11 OK6410A 进程通信机制2 共享内存

共享内存 posix 提供一套 , XSI(systemv) 提供一套

共享内存的实现 有很多种
	1.posix mmap && open mmap
		共享文件映射mmap(/dev/shm/xxx) 也用到了 shmem_vm_ops ,封装出了 posix 共享内存
		// 共享匿名映射 用到了 shmem_vm_ops 
		// 共享文件映射mmap(/dev/zero) 也用到了 shmem_vm_ops ,封装出了 posix 共享内存
	2.XSI(systemv)
	3.memfd_create和fd跨进程共享
	4.dma-buf

共享内存实现方案有多种,posix共享内存是其中的一种
posix共享内存是一种通信方式,其基于 mmap 和 (文件系统shmem)

内存文件系统shmem 	提供 fd 和 tmpfs 所有文件共享的 file_operations // tmpfs 被 挂载到 /dev/shm
mmap 				提供 访问 fd 对应的 内存 的 技术  // 参数填充 符合 "共享文件映射"
————————————————
版权声明:本文为CSDN博主「__pop_」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u011011827/article/details/120163067

mmap(do_mmap) 																	/dev/shm/xxx

get_unmapped_area & mmap_region中的 file->f_op->mmap 							file_operations中的shmem_get_unmapped_area&shmem_mmap 

do_fault中do_read_fault() do_share_fault()调用的 vma->vma_ops->fault()		shmem_fault

// shmem_mmap 中设置了 vma->vm_ops = &shmem_vm_ops; // shmem_vm_ops 的fault成员为 shmem_fault

// 在 不定义 CONFIG_TMPFS,不定义 CONFIG_SHMEM 的时候,不支持挂载,可以支持 共享匿名映射和SYSV共享内存,不支持 posix共享内存
// 在 不定义 CONFIG_TMPFS ,定义 CONFIG_SHMEM 的时候,不支持挂载,可以支持 共享匿名映射和SYSV共享内存,不支持 posix共享内存
// 在 定义 CONFIG_TMPFS  的时候 , 支持挂载, 必须挂载了才支持 posix共享内存 . 不管挂不挂载 都支持 共享匿名映射和SYSV共享内存
————————————————
版权声明:本文为CSDN博主「__pop_」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u011011827/article/details/120164707

// CONFIG_SYSVIPC 的设置 决定是否支持 sysv 共享内存

tmpfs
mmap
共享内存探讨
  • 基于 CONFIG_SHMEM=n & CONFIG_TMPFS=n 配置下的 tmpfs
file_operations ramfs_file_operations
	.get_unmapped_area  = ramfs_mmu_get_unmapped_area,
	.mmap       = generic_file_mmap,
		vma->vm_ops = &generic_file_vm_ops;
			.fault      = filemap_fault,
				page = find_get_page(mapping, offset);
				vmf->page = page;
			.map_pages  = filemap_map_pages
				alloc_set_pte(vmf, page)
  • 基于 CONFIG_SHMEM=y & CONFIG_TMPFS=n 配置下的 tmpfs
file_operations shmem_file_operations
	.get_unmapped_area = shmem_get_unmapped_area,  
	.mmap       = shmem_mmap
		vma->vm_ops = &shmem_vm_ops;
			.fault      = shmem_fault,
				shmem_getpage_gfp
			.map_pages  = filemap_map_pages,
				alloc_set_pte(vmf, page)
  • 基于 CONFIG_SHMEM=y & CONFIG_TMPFS=y 配置下的 tmpfs
与 基于 CONFIG_SHMEM=y & CONFIG_TMPFS=n 配置下的 tmpfs 一致
总结
共享内存 会用到  shmem_vm_ops
shmem_vm_ops 会 根据 tmpfs 的配置不同 重定位到 shmem_vm_ops 或者 generic_file_vm_ops

扩展
/dev/zero  和 共享匿名映射 也会用到 shmem_vm_ops
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值