我目前正在为我的操作系统决赛而学习。一些论文中的老师简单地提到了mmap
函数(内存映射)。
据我了解(如果我错了,请纠正我),mmap 用于将一些文件从物理内存加载到 RAM(在页面默认值之后)。问题是我没有看到任何实际原因,否则可以加快对该文件的访问时间。
我对么?mmap 仅用于此目的吗?
我目前正在为我的操作系统决赛而学习。一些论文中的老师简单地提到了mmap
函数(内存映射)。
据我了解(如果我错了,请纠正我),mmap 用于将一些文件从物理内存加载到 RAM(在页面默认值之后)。问题是我没有看到任何实际原因,否则可以加快对该文件的访问时间。
我对么?mmap 仅用于此目的吗?
“mmap”有很多用途:
映射文件以实现更快的读/写访问当然是一种用途
共享内存(例如用于进程间通信)是另一个
mmap 还用于映射 I/O 端口地址以进行低级设备通信
mmap 用于将一些文件从物理内存加载到 RAM 中(页面默认后)
加载丢失的页面。也可以以相同的方式将修改写入磁盘!
mmap 在很大程度上将内存管理从程序员手中拿了出来,交给了 OS。
它是关于使用虚拟内存子系统从磁盘到物理内存的需求分页。
因此,要查看文件的第 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 内存区域的最大大小有点疼。