内存映射文件在操作系统中如何工作?

内存映射文件在操作系统中如何工作?

在操作系统概念中,它指出: 内存映射文件,允许部分虚拟地址空间与文件逻辑关联

我的理念是:

通常,当进程使用标准系统调用 open() read() write() 读取磁盘上的文件时,对于每个文件访问都会有一个系统调用和磁盘访问。这需要时间,因为我们正在访问磁盘。

在这种情况下我们可以使用内存映射文件

在此我们使用虚拟内存技术并将文件映射到进程的虚拟地址空间。

内存映射文件

在此过程中,进程将向内核指定文件描述符以及它想要映射文件块或块的虚拟内存区域中的位置(这是堆和堆栈之间的区域)

共享内存映射

之后内核会将特定文件映射到进程的虚拟地址,文件将被分为页面。对文件的访问将按需求分页进行。当CPU生成页面的虚拟地址时,文件被映射到进程虚拟内存中,最初该页面将发生故障,文件页面将从文件系统加载到空闲内存帧和进程的页表将使用页表条目中的帧号进行更新。之后,进程可以读取和写入文件,而无需访问磁盘,而是使用通常的内存访问例程。

对内存中映射文件的写入不是立即写入磁盘中的文件。某些操作系统会定期检查页表条目的脏位。当文件关闭时,所有内存映射数据都将写回磁盘并从进程的虚拟内存中删除。

多个进程还可以使用页面共享并在彼此之间共享内存映射文件。

他们所要做的就是将虚拟地址映射到映射文件的物理地址。

这就是内存映射文件的工作原理吗?

相关内容