shm与mmap区别
1 mmap
mmap共享内存原理:
是将进程虚拟地址空间映射到磁盘上的一个普通文件,这样每个进程访问时会通过pagefault机制分配各自不同的物理内存。
优点:储存量可以很大(多于主存),重启数据不会丢失;
缺点:进程读写速度要比主存的要慢。
2 shm
shm共享内存原理:
是将进程虚拟地址空间映射到tmpfs虚拟内存文件系统上的一个临时文件,而tmpfs的存储空间是物理内存或swap分区,所以每个进程最终访问的是同一块物理内存。
优点:进程间访问速度(读写)比磁盘要快;
缺点:储存量不能非常大(多于主存),重启数据会丢失。
使用上看:如果分配的存储量不大,那么使用shm;如果存储量大,那么使用mmap。相对于shm来说,mmap更加简单,调用更加方便,所以这也是大家都喜欢用的原因。
mmap是共享了文件,shm是共享了内存。
3 dma-buf
mmap和shm共享内存的使用者都是进程,所以为解决不同drivers之间也可以共享内存引入了dma-buf软件框架。
dma-buf共享内存原理:
是将设备地址空间映射到同一块物理内存,并将这块物理内存与file关联,通过传递fd实现不同drivers访问同一块共享物理内存。