4

我了解 mmap 的用法。考虑对文件的简单读/写操作,涉及到,打开文件,分配缓冲区,读取[需要上下文切换,],然后缓冲区中可供用户使用的数据,缓冲区的变化不会反映除非明确写入文件。

相反,如果我们使用 mmap,直接写入缓冲区只不过是写入文件。

问题:

1)文件在硬盘里,mmaped进进程,每次写入mmaped内存,是不是直接写入文件?. 在这种情况下,它不需要任何上下文切换,因为更改是直接在文件本身中完成的。如果 mmap 比传统文件访问更快,我们在哪里看到节省时间?

请解释。如果我也错了,请纠正我。

4

1 回答 1

6

对文件的更新不会立即在磁盘中可见,但在调用之后unmap或之后可见msync。因此,更新期间没有系统调用,不涉及内核。但是,由于文件是按需要逐页延迟读取的,因此操作系统可能需要在您跨页边界时读入文件的某些部分。内存映射最明显的优点是它消除了内核空间到用户空间的数据副本。系统调用也不需要寻找文件中的特定位置。

于 2012-11-23T06:19:42.873 回答