当前位置:网站首页>mmap() 的作用和使用
mmap() 的作用和使用
2022-08-05 16:42:00 【梦想是优秀社畜】
作用
1.进程间通信的方式(内存映射)
2.文件读写
原理
将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。实现这样的映射关系后,进程就可以采用指针的方式读写操作这一段内存,而系统会自动回写脏页面到对应的文件磁盘上,而不必再调用read,write等系统调用函数。
优点:
相对于传统的write/read 系统调用, 必须先把数据从磁盘拷贝至到内核缓冲区中,再把数据拷贝至用户进程。解决了数据在内核态与用户态之间拷贝的问题
相比于消息队列和管道,两个进程可以直接通过修改共享内存直接通信,不存在用户态与内核态之间拷贝的开销
大致过程
mmap(memory map)过程:
在当前进程中找一段空闲的虚拟地址空间
通过文件描述符链接到该文件的文件结构体,内核mmap函数通过inode定位文件磁盘物理地址,再建立虚拟地址与文件地址的映射关系
进程发起映射空间的访问,引发缺页异常,实现文件内容到内存的拷贝
使用
#include <sys/mman.h>
int fd = open("./xxx/xxx", O_RDONLY);
// #include <sys/mman.h>
void* address = mmap(NULL, 0, PROT_READ, MAP_PRIVATE, fd, 0);
// void *_addr:选定进程空间起始地址,NULL让系统自己选定
// size_t _len:映射到进程地址空间的字节数
// int _prot:共享内存访问权限,PROT_READ / PROT_WRITE / PROT_EXEC / PROT_NONE
// int _flags:
// MAP_FIXED 如果参数start所指的地址无法成功建立映射时,则放弃映射,不对地址做修正。通常不鼓励用此
// MAP_SHARED 对映射区域的写入数据会复制回文件内,而且允许其他映射该文件的进程共享。
// MAP_PRIVATE 对映射区域的写入操作会产生一个映射文件的复制,即私人的“写入时复制”(copy on write)对此区域作的任何修改都不会写回原来的文件内容。
// MAP_ANONYMOUS 建立匿名映射。此时会忽略参数fd,不涉及文件,而且映射区域无法和其他进程共享。
// MAP_DENYWRITE 只允许对映射区域的写入操作,其他对文件直接写入的操作将会被拒绝。
// MAP_LOCKED 将映射区域锁定住,这表示该区域不会被置换(swap)。
// int _fd:要映射到内存中的文件的文件描述符
// off_t _offset:文件映射偏移量,必须是分页大小的整数倍
// 返回值:映射内存地址溜了溜了~~
边栏推荐
- 如何打造HR无法拒绝的简历?
- 纽约金价反弹 广州黄金产品热销
- SystemVerilog Randomization点点滴滴
- laravel 子查询
- WPF 截图控件之移除控件(九)「仿微信」
- High Numbers_Prove_Uniqueness of Limits
- EasyCVR calls the stop real-time recording interface, how to solve the problem that the recording address is not returned?
- C语言之链表简单操作(亲测可用)
- 单液压缸(Single-Acting Hydraulic Cylinder)数学模型和PID闭环控制(PLC比例流量阀控制)
- 西气东输年输气量首超千亿立方米,图扑助力管道监控
猜你喜欢

Geoffery Hinton:深度学习的下一个大事件

一个案例搞懂工厂模式和单例模式

eureka服务单节点搭建以及集群的搭建

【案例】animation动画曲线之steps的使用
![[Case] The use of steps in animation animation curve](/img/b0/2831f9318ce28d8732fb5ba87431bd.png)
[Case] The use of steps in animation animation curve

企业如何进行企业文档管理?提供3种新思路

即时通讯开发长连接网关技术:WebSocket实时推送网关技术

【Case】Animation animation

Instant messaging development long connection gateway technology: WebSocket real-time push gateway technology
Registered less than a week for data security in the British parliament TikTok dispute the substance is discontinued
随机推荐
今年考研?七夕顺便把心形线复习一下
Stored Procedure && Trigger
EasyCVR calls the stop real-time recording interface, how to solve the problem that the recording address is not returned?
CEO对今天的CIO们真正的要求是什么?
图像边缘检测——一阶微分算子 Roberts、Sobel、Prewitt、Kirsch、Robinson
左益豪:用代码创造一个新世界|OneFlow U
ECMAscript modules in browsers
[Case] A rotating circle in 3d transformation
小型企业CIO为大型企业IT负责人提供的重要经验
微信公众号之微信认证
Install a specific specified version of the r package with a lower version r package downgrade
注册不足一周 英国议会因数据安全争议停用TikTok
The high number of _ _ the most value theorem
详解Oracle DELETE和TRUNCATE 的区别
求先序排列
流行的 Web 框架安全性比较
解决FileZilla 报错“无法和 SFTP 服务器建立 FTP 连接,请选择合适的协议”
这个「令人上头」的赛道,俞敏洪、高瓴都入了,红杉和腾讯会来吗?
同业存单指数基金有风险吗?安不安全啊?
面向动态图的极低时延 GNN 在线推理采样服务