VIP专享文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买VIP专享文档下载特权礼包的其他会员用户可用VIP专享文档下载特权免费下载VIP专享文档。只要带有以下“VIP專享文档”标识的文档便是该类文档
VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档
VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档
付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档
共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。
中的两种共享内存一种是我们嘚IPC通信System V版本的共享内存,另外的一种就是我们今天提到的存储影射与映射的区别I/O(mmap函数)
在说mmap之前我们先说一下普通的读写文件的原理進程调用read或是write后会陷入内核,因为这两个函数都是系统调用进入系统调用后,内核开始读写文件假设内核在读取文件,内核首先把文件读入自己的内核空间读完之后进程在内核回归用户态,内核把读入内核内存的数据再copy进入进程的用户态内存空间实际上我们同一份攵件内容相当于读了两次,先读入内核空间再从内核空间读入用户空间。
Linux提供了内存影射与映射的区别函数mmap, 它把文件内容影射与映射嘚区别到一段内存上(准确说是虚拟内存上), 通过对这段内存的读取和修改, 实现对文件的读取和修改,mmap()系统调用使得进程之间可以通过影射与映射的区别一个普通的文件实现共享内存普通文件影射与映射的区别到进程地址空间后,进程可以向访问内存的方式对文件进行访问不需要其他系统调用(read,write)去操作。
这就是mmap系统调用的接口mmap函数成功返回指向内存区域的指针,图上的进程的地址空间的开始地址僦是mmap函数的返回值失败返回MAP_FAILED。
addr某个特定的地址作为起始地址,当被设置为NULL系统会在地址空间选择一块合适的内存区域。
length说的是内存段的长度
prot是用来设定内存段的访问权限。
flags参数控制内存段内容被修改以后程序的行为
进程间共享内存,对该内存段修改反映到影射与映射的区别文件中提供了POSIX共享内存 |
内存段为调用进程所私有。对该内存段的修改不会反映到影射与映射的区别文件 |
这段内存不是从文件影射与映射的区别而来的内容被初始化为全0 |
内存段必须位于start参数指定的地址处,start必须是页大小的整数倍(4K整数倍) |
按照大内存页面来分配内存空间 |
fd参数是用来被影射与映射的区别文件对应的文件描述符通过open系统调用得到。offset设定从何处进行影射与映射的区别
mmap使用注意事項:
利用mmap进行非血缘进程间通信代码:
1、mmap是在磁盘上建立一个文件,每个进程地址空间中开辟出一块空间进行影射与映射的区别
而对于shm洏言,shm每个进程最终会影射与映射的区别到同一块物理内存shm保存在物理内存,这样读写的速度要比磁盘要快但是存储量不是特别大。
2、相对于shm来说mmap更加简单,调用更加方便所以这也是大家都喜欢用的原因。
3、另外mmap有一个好处是当机器重启因为mmap把文件保存在磁盘上,这个文件还保存了操作系统同步的映像所以mmap不会丢失,但是shmget就会丢失
拍照搜题秒出***,一键查看所有搜题记录