gpt4 book ai didi

linux - 内存映射文件系统调用 - linux

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:21:49 25 4
gpt4 key购买 nike

当我们将文件映射到内存时,需要进行系统调用。后续对文件的访问是否需要系统调用,或者进程的虚拟内存页是否映射到内存中的实际页缓存?

更新:我还想知道的是,如果多个进程正在通过 mmap 访问同一个文件。他们将访问相同的物理内存部分写入。

最佳答案

当您映射文件时,Linux 会在 MMU(内存管理单元)中创建条目。 MMU 监视 CPU 对实际 RAM 的所有读写操作。这样,它就知道您何时访问 mmap() 返回的内存部分。读取不在真实 RAM 中的部分将导致页面错误。 MMU 将捕获它们并调用内核例程将文件的正确部分加载到某处的 RAM 中,然后它将更新 MMU 表中的条目,因此看起来数据现在位于 mmap( ) 给了你。事实上,它将在其他地方,但 MMU 将使这完全透明。

当您写入内存时,MMU 会将修改的页面标记为“脏”。当它们被刷新时(因为您访问了更多的文件或因为您调用了 munmap()),然后更改将被写入磁盘。

所以每次发生页面错误和脏页刷新时,都会发生系统调用。但由于页面为 4 或 8KB,所以这些情况很少发生。此外,内核将一次加载多个页面,因此再次减少了系统调用的次数。最后,相同的代码用于实现交换,因此非常优化。

所有这些效果使 mmap 如此高效。

关于linux - 内存映射文件系统调用 - linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1754451/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com