我正在攻读我的 OS 决赛。一些论文中的老师简要提到mmap
函数(记忆图)。
据我所知(纠正我,如果我错了),mmap用于将一些文件从物理内存加载到RAM(页面默认后)。问题是我没有看到任何其他实际原因,以便更快地访问该文件。
我说错了吗? mmap只用于此吗?
答案 0 :(得分:5)
“mmap”有很多用途:
映射文件以获得更快的读/写访问权当然是一种用途
共享内存(例如,用于进程间通信)是另一个
mmap还用于映射I / O端口地址以进行低级设备通信
答案 1 :(得分:3)
mmap用于将一些文件从物理内存加载到RAM(页面默认后)
加载缺少的页面。也可以用同样的方法将修改写入磁盘!
答案 2 :(得分:3)
答案 3 :(得分:1)
mmap在很大程度上将内存管理从程序员手中夺走,并将其交给操作系统。
这是关于使用虚拟内存子系统从磁盘到物理内存的请求分页。
因此,要查看文件的第11111个字节,而不是查找和读取,您可以mmap并使用数组索引。操作系统会将环绕数据保留在其“缓冲区缓存”(页面缓存中)。
这是一个例子: http://stromberg.dnsalias.org/~strombrg/pbmonherc.html
这个例子有点乱,因为它是在Linux在其内核中支持mmap的时候编写的,但是C库还没有用于调用它的存根。但你几乎可以忽略mmap.c.该示例使用mmap使用单色显示适配器打开和关闭像素。
另一个合理用途是布隆过滤器: http://stromberg.dnsalias.org/~strombrg/drs-bloom-filter/
...但是在32位操作系统上,mmap内存区域的最大大小有点伤害。