美文网首页
快速了解内存映射文件

快速了解内存映射文件

作者: M_lear | 来源:发表于2024-02-03 18:02 被阅读0次

一、虚拟内存

1.1 什么是虚拟内存

虚拟内存让每个进程都好像在使用一个连续的、独占的内存空间,实际上这些空间可能是分散存储在物理内存和硬盘上的。

1.2 虚拟内存的实现原理

虚拟内存的实现除了需要操作系统的支持外,还需要硬件的支持。硬件中最关键的部分是内存管理单元(Memory Management Unit, MMU),它负责虚拟地址到物理地址的转换过程。MMU是CPU架构的一部分,它通过使用页表(page tables)来维护虚拟地址和物理地址之间的映射关系

页表存储在物理内存中,每当程序访问一个虚拟地址时,MMU会查找页表以确定相应的物理地址。如果找到了相应的映射,那么访问就会被重定向到正确的物理内存位置。如果没有找到映射(即发生了页面错误),操作系统会介入处理,可能会从硬盘的交换空间中加载所需的页面到物理内存中,并更新页表以反映新的映射。

1.3 用户空间、内核空间

虚拟内存分为用户空间和内核空间。

内核空间是操作系统专用的内存空间,操作系统在这个空间内,管理硬件资源、执行进程调度、内存管理、输入输出操作等任务。每个进程有自己完整的虚拟内存,每个进程的虚拟内存中,用户空间是独立的、互不干扰,内核空间是共享的(系统只有一个)。

举例说明,内核空间是如何共享的:
32位地址空间下,所有进程(无论用户进程还是系统进程)的虚拟内存大小都是4GB,其中地址空间中的0到3GB是用户空间,3GB到4GB是内核空间。所有进程的0到3GB部分在页表中有独立的映射(每个进程有自己的映射),而所有进程的3GB到4GB在页表中共用一个映射,这就是所谓的共享内核空间。

二、页缓存

页缓存,也称磁盘缓存。是对磁盘文件页的内存缓存。操作系统在进行磁盘文件IO时,优先读写页缓存,页缓存未命中才进行真正的磁盘IO。

页缓存属于虚拟内存的一部分,位于虚拟内存中的内核空间。所有进程共享一份页缓存。

三、内存映射文件

内存映射文件(如通过mmap()创建的映射)和普通的文件IO(如read()和write())使用不同的系统调用。

两者都通过页缓存优化硬盘访问。但对于普通的文件IO来说,由于页缓存位于内核空间,数据需要在用户空间和内核空间之间拷贝。这个过程涉及用户态到内核态的切换,以及数据在两个空间之间的物理拷贝。而内存映射文件通过设置页表项,将存储内存映射文件的这部分页缓存直接映射到用户空间,这种直接映射减少了上下文切换和数据拷贝的开销。

所以内存映射文件在处理大文件时可以提供更好的性能。

相关文章

  • 25用户态内存映射

    mmap 将虚拟地址空间映射到物理内存 匿名映射,即虚拟内存和物理内存直接映射文件映射,将文件映射到虚拟内存ima...

  • mmap 一定比普通读写快吗?

    原理 : 文件磁盘地址映射到内存中 ,是文件地址映射。不是文件内容映射。通过缺页中断将文件内容加载到内存中。缺页中...

  • Eclipse下以Jetty运行时锁定文件解决办法

    原因是Jetty会使用内存映射文件来缓存静态文件,其中包括js、css文件。在Windows下面,使用内存映射文件...

  • java nio学习笔记(2)之内存映射文件

    概念 内存映射文件是将文件(部分)内容映射到内存中,读写操作都在内存中完成,最后再写回文件 示例 该程序是将文件整...

  • APP优化 —— MMAP内存映射

    mmap 一种内存映射文件的方法 mmap将一个文件或者其它对象映射进内存。文件被映射到多个页上,如果文件的大小不...

  • mmap原理

    即memory map(内存映射)。内存映射减少了文件从内核空间copy到用户空间,但是增加了文件映射到用户空间的...

  • 内存映射文件

    在同一个可执行或者DLL的多个实例间共享静态数据 默认情况下,同一个exe或DLL的多个实例不会共享全局或静态数据...

  • 内存映射文件

    创建内存映射文件 CreateFileMapping 将上述真正存在的文件(物理文件) hFile映射成为一个虚拟...

  • 内存映射文件

    传统的文件i/o是通过用户进程发布read()和write()系统调用来传输数据的。为了在内核空间与系统空间之间移...

  • MongoDB如何存储数据

    Memeory-Mapped Files 内存映射文件是OS通过mmap在内存中创建一个数据文件,这样就把文件映射...

网友评论

      本文标题:快速了解内存映射文件

      本文链接:https://www.haomeiwen.com/subject/enjxadtx.html