mmap 的用例
Posted
技术标签:
【中文标题】mmap 的用例【英文标题】:Use cases of mmap 【发布时间】:2012-04-18 21:32:58 【问题描述】:我目前正在为我的 OS 期末考试而学习。老师在一些论文中简要提到了mmap
函数(内存映射)。
据我了解(如果我错了请纠正我),mmap 用于将一些文件从物理内存加载到 RAM(在页面默认值之后)。问题是我没有看到任何实际的理由来缩短对该文件的访问时间。
我说的对吗? mmap 是否仅用于此目的?
【问题讨论】:
计算机可用于进行大量的数值计算。问题是,除了加快计算速度之外,我没有看到任何实际原因。 "从物理内存到 RAM" - 通常使用 "物理内存" 和 "RAM" 是同义词。 【参考方案1】:“mmap”有很多用途:
映射文件以实现更快的读/写访问当然是一种用途
共享内存(例如用于进程间通信)是另一个
mmap 还用于映射 I/O 端口地址以进行低级设备通信
【讨论】:
感谢您输入@paulsm4。最后一件事,你有一个使用 mmap 的具体例子吗(真的只是出于好奇)。【参考方案2】:mmap 用于将一些文件从物理内存加载到 RAM(页面默认后)
加载缺少的页面。也可以用相同的方式将修改写入磁盘!
性能(您不必加载整个文件),如果您有随机访问权限,效果会非常好。 它可以让您的代码更加紧凑,您不必担心文件 I/O。 操作系统可以处理内存管理,决定将哪些页面保留在内存中以及丢弃哪些页面。【讨论】:
感谢您输入@Karoly Horvath。最后一件事,你有一个使用 mmap 的具体例子吗(真的只是出于好奇)。【参考方案3】:除了@paulsm4 的回答:
-
...
...
...
大多数现代
malloc(3)
实现使用mmap(2)
来管理私有进程内存。
动态链接加载器ld.so(8)
使用它来映射共享库。
【讨论】:
【参考方案4】: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'd 内存区域的最大大小有点疼。
【讨论】:
谢谢!这些文章很棒。以上是关于mmap 的用例的主要内容,如果未能解决你的问题,请参考以下文章