程序设计(续)"/>
并发程序设计(续)
十二、共享内存
一、内存映射的基本使用
(一)内存映射的概念
1、共享内存的概念
1)使用一个磁盘文件与内存中的一个缓冲区映射
2)可以像访问普通内存一样对文件访问
3)不需要read,write函数
2、优点
使用内存映射后:
1)访问硬碟磁盘是毫秒级别,访问内存是纳秒级别,可以提高访问效率,差距很大,提高速度
2)文件的映射可以是一部分
(二)内存映射使用
1、mmap函数
参数:
1)addr:要映射的内存,一般为空,os自动选择合适的(内存管理一般是os来做,程序员不干预)
2)length:从头开始,映射多大
3)prot:共享内存访问权限,可读,可写,可执行,不可访问
4)flags:属性
进程间通讯必选共享的
在访问动态链接库,动态内存空间时,一个进程频繁的操作内存空间,也可以用内存映射,防止多次写磁盘
匿名管道参数:血缘关系进程
5)fd:映射文件,匿名-1
6)offset:文件偏移,一般从头0开始
2、mmap函数返回值:成功返回映射区首地址
3、代码实现:
1、读操作
2、写操作
1)通过代码写入磁盘
2)直接在test文件中写
(三)内存映射注意事项
1、映射区权限<=文件的打开权限
只读打开:
读写映射:
报错:
解决:增加文件权限
2、总线错误
映射文件的大小必须大于0
touch了原始文件test后,需要在test用空格敲出大小,如果不写,映射文件的大小为0,总线错误会乱码
文件大小大于7,可以写入数据:
2、如果是私有操作,不会写入磁盘
二、内存映射使用注意事项
1、在创建映射区时,包含一次对映射区的写操作
2、对于私有权限
读操作可以:
写操作不行:不会保存到磁盘中
3、映射之前关闭文件,不能正确读写
映射成功后,关闭文件可以进行正常的读-写
4、映射的文件大小不能为0(空格),总线错误,指定0大小的创建映射区,非法参数
5、
6、映射位置必须从4的整数倍开始,因为内存分配是按页
非法参数:
7、申请内存超过4k会报错
1)申请2k,访问3k可以
2)申请2k,访问5k报错(超过4k)
8、
三、内存映射实现进程间的通信
1、写函数
2、读函数
实验结果
4、匿名映射-血缘进程
5、释放内存
四、systemV共享内存
(一)SYSTEM V概念
(二)使用步骤
1、IPC是进程间通信的缩写
更多推荐
并发程序设计(续)
发布评论