繁体   English   中英

mmap的用例

[英]Use cases of mmap

我目前正在研究OS决赛。 在某些论文中,老师简短地提到了mmap函数(内存图)。

据我了解( 如果我错了 ,请纠正我 ),mmap用于将某些文件从物理内存加载到RAM(在默认页面之后)。 问题在于,除了使访问该文件的时间更快之外,我看不到任何实际的原因。

我对么? mmap仅用于此吗?

“ mmap”有很多用途:

  1. 映射文件以实现更快的读/写访问肯定是一种用途

  2. 共享内存(例如,用于进程间通信)是另一个

  3. mmap还用于映射I / O端口地址以进行低级设备通信

mmap用于将某些文件从物理内存加载到RAM(在默认页面后)

加载缺少的页面 也可以用相同的方式将修改内容写入磁盘!

  • 性能(不必加载整个文件),如果您具有随机访问权限,则效果很好。
  • 它可以使您的代码更紧凑,而您不必担心文件I / O。
  • 操作系统可以处理内存管理,确定要保留在内存中的页面以及要丢弃的页面。

除了@ paulsm4的答案:

  1. ...
  2. ...
  3. ...
  4. 大多数现代的malloc(3)实现都使用mmap(2)管理私有进程内存。
  5. 动态链接加载器ld.so(8)使用它来映射共享库。

mmap在很大程度上将内存管理从程序员的手中解放了出来,并将其交给操作系统。

这是关于使用虚拟内存子系统从磁盘到物理内存的需求分页。

因此,要查看文件的第11111个字节,可以查找并使用数组索引,而不是查找和读取。 操作系统会将周围的数据保留在其“缓冲区高速缓存”(实际上是页面高速缓存)中。

这是一个示例: http : //stromberg.dnsalias.org/~strombrg/pbmonherc.html

该示例有点混乱,因为它是在Linux内核中支持mmap的时候编写的,但是C库尚未有调用它的存根。 但是您几乎可以忽略mmap.c。 该示例使用mmap通过单色显示适配器设置像素的开和关。

另一个合理的用途是使用布隆过滤器: http//stromberg.dnsalias.org/~strombrg/drs-bloom-filter/

...但是在32位OS上,mmap的内存区域的最大大小有点麻烦。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM