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 的用例的主要内容,如果未能解决你的问题,请参考以下文章

Linux文件系统的用例建模

pytest 用例编写规则命令行执行用例用例执行的先后顺序

HttpRunner 跳过用例录制生成用例用例分层机制

设计模式 用例图之二

python之web自动化测试框架

用例图