【Linux】Linux编程之 mmap解析

article/2025/10/23 10:26:37

前言

虚拟内存系统通过将虚拟内存分割为称作虚拟页(Virtual Page,VP)大小固定的块,一般情况下,每个虚拟页的大小默认是4096字节。同样的,物理内存也被分割为物理页(Physical Page,PP),也为4096字节。

一、mmap基本原理和分类

在LINUX中我们可以使用mmap用来在进程虚拟内存地址空间中分配地址空间,创建和物理内存的映射关系。
在这里插入图片描述

映射关系可以分为两种

1、文件映射
磁盘文件映射进程的虚拟地址空间,使用文件内容初始化物理内存。
2、匿名映射
初始化全为0的内存空间。

而对于映射关系是否共享又分为

1、私有映射(MAP_PRIVATE)
多进程间数据共享,修改不反应到磁盘实际文件,是一个copy-on-write(写时复制)的映射方式。
2、共享映射(MAP_SHARED)
多进程间数据共享,修改反应到磁盘实际文件中。

因此总结起来有4种组合

1、私有文件映射
多个进程使用同样的物理内存页进行初始化,但是各个进程对内存文件的修改不会共享,也不会反应到物理文件中
2、私有匿名映射
mmap会创建一个新的映射,各个进程不共享,这种使用主要用于分配内存(malloc分配大内存会调用mmap)。
例如开辟新进程时,会为每个进程分配虚拟的地址空间,这些虚拟地址映射的物理内存空间各个进程间读的时候共享,写的时候会copy-on-write。
3、共享文件映射
多个进程通过虚拟内存技术共享同样的物理内存空间,对内存文件 的修改会反应到实际物理文件中,他也是进程间通信(IPC)的一种机制。
4、共享匿名映射
这种机制在进行fork的时候不会采用写时复制,父子进程完全共享同样的物理内存页,这也就实现了父子进程通信(IPC).

这里值得注意的是,mmap只是在虚拟内存分配了地址空间,只有在第一次访问虚拟内存的时候才分配物理内存。

在mmap之后,并没有在将文件内容加载到物理页上,只上在虚拟内存中分配了地址空间。当进程在访问这段地址时,通过查找页表,发现虚拟内存对应的页没有在物理内存中缓存,则产生"缺页",由内核的缺页异常处理程序处理,将文件对应内容,以页为单位(4096)加载到物理内存,注意是只加载缺页,但也会受操作系统一些调度策略影响,加载的比所需的多。

二.mmap在write和read时会发生什么

1. write

  • 1.进程(用户态)将需要写入的数据直接copy到对应的mmap地址(内存copy)
  • 2.若mmap地址未对应物理内存,则产生缺页异常,由内核处理
  • 3.若已对应,则直接copy到对应的物理内存
  • 4.由操作系统调用,将脏页回写到磁盘(通常是异步的)

因为物理内存是有限的,mmap在写入数据超过物理内存时,操作系统会进行页置换,根据淘汰算法,将需要淘汰的页置换成所需的新页,所以mmap对应的内存是可以被淘汰的(若内存页是“脏”的,则操作系统会先将数据回写磁盘再淘汰)。这样,就算mmap的数据大于物理内存,操作系统也能很好地处理,不会产生功能上的问题。

2.read

在这里插入图片描述

三、性能分析

1.写性能分析
场景:对2G的文件进行顺序写入

每次写入大小mmap 耗时write耗时
100 bytes2.84s22.86s
512 bytes2.51s5.43s
1024 bytes2.48s3.48s
2048 bytes2.47s2.34s
4096 bytes2.48s1.74s
8192 bytes2.45s1.67s
10240 bytes2.49s1.65s

可以看到mmap在100byte写入时已经基本达到最大写入性能,而write调用需要在4096(也就是一个page size)时,才能达到最大写入性能。
从测试结果可以看出,在写小数据时,mmap会比write调用快,但在写大数据时,反而没那么快。

2.读性能分析
场景:对2G的文件进行顺序读取(为了避免磁盘对测试的影响,2G文件都缓存在pagecache中)

每次读取大小mmap耗时read耗时
100 bytes86.4ms8100.9ms
512 bytes16.14ms1851.45ms
1024 bytes8.11ms992.71ms
2048 bytes4.09ms636.85ms
4096 bytes2.07ms558.10ms
8192 bytes1.06ms444.83ms
10240 bytes867.88µs475.28ms

由上可以看出,在read上面,mmap的性能还是非常好的。

四.总结

优点如下:

1、对文件的读取操作跨过了页缓存,减少了数据的拷贝次数,用内存读写取代I/O读写,提高了文件读取效率。

2、实现了用户空间和内核空间的高效交互方式。两空间的各自修改操作可以直接反映在映射的区域内,从而被对方空间及时捕捉。

3、提供进程间共享内存及相互通信的方式。不管是父子进程还是无亲缘关系的进程,都可以将自身用户空间映射到同一个文件或匿名映射到同一片区域。从而通过各自对映射区域的改动,达到进程间通信和进程间共享的目的。同时,如果进程A和进程B都映射了区域C,当A第一次读取C时通过缺页从磁盘复制文件页到内存中;但当B再读C的相同页面时,虽然也会产生缺页异常,但是不再需要从磁盘中复制文件过来,而可直接使用已经保存在内存中的文件数据。

4、可用于实现高效的大规模数据传输。内存空间不足,是制约大数据操作的一个方面,解决方案往往是借助硬盘空间协助操作,补充内存的不足。但是进一步会造成大量的文件I/O操作,极大影响效率。这个问题可以通过mmap映射很好的解决。换句话说,但凡是需要用磁盘空间代替内存的时候,mmap都可以发挥其功效。

缺点如下:

1.文件如果很小,是小于4096字节的,比如10字节,由于内存的最小粒度是页,而进程虚拟地址空间和内存的映射也是以页为单位。虽然被映射的文件只有10字节,但是对应到进程虚拟地址区域的大小需要满足整页大小,因此mmap函数执行后,实际映射到虚拟内存区域的是4096个字节,11~4096的字节部分用零填充。因此如果连续mmap小文件,会浪费内存空间。

2.对变长文件不适合,文件无法完成拓展,因为mmap到内存的时候,你所能够操作的范围就确定了。

3.如果更新文件的操作很多,会触发大量的脏页回写及由此引发的随机IO上。所以在随机写很多的情况下,mmap方式在效率上不一定会比带缓冲区的一般写快。


http://chatgpt.dhexx.cn/article/rtuayA5L.shtml

相关文章

讲一讲什么是 MMAP

1. mmap 基础概念 mmap 即 memory map,也就是内存映射。 mmap 是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。实现这样的映射关系后&#xff…

人工神经网络的应用有哪些方面,人工神经网络在生活中的应用

人工神经网络的应用 人工神经网络(Artificial Neural Network,简称ANN ),以数学模型模拟神经元活动,是基于模仿大脑神经网络结构和功能而建立的一种信息处理系统。人工神经网络具有自学习、自组织、自适应以及很强的非…

人工神经网络有哪些算法,神经网络都有哪些算法

人工神经网络分类方法 从20世纪80年代末期,人工神经网络方法开始应用于遥感图像的自动分类。 目前,在遥感图像的自动分类方面,应用和研究比较多的人工神经网络方法主要有以下几种:(1)BP(BackP…

深度学习-人工神经网络概述

人工神经网络 简述 很多术语听起来很唬人,“人工神经网络”就属于其中之一。在很多人看来,我们对人类的神经系统还没有研究透彻,这就来了一个“人工的”神经网络,人脑这样复杂,那么人工神经网络一定相当高深莫测。如果…

人工神经网络的应用实例,人工神经网络实际应用

神经网络算法实例说明有哪些? 在网络模型与算法研究的基础上,利用人工神经网络组成实际的应用系统,例如,完成某种信号处理或模式识别的功能、构作专家系统、制成机器人、复杂系统控制等等。 纵观当代新兴科学技术的发展历史&…

人工神经网络算法实战教程

神经网络(Artificial Neural Network,也称为人工神经网络,简称ANN)具有通过示例学习能力。ANN是受生物神经元系统启发的的信息处理模型,它由大量高度互联的处理元素组成,这些处理元素被称神经元&#xff0c…

人工神经网络的三个要素,神经网络三要素是指

一个完整的人工神经网络包括 人工神经网络主要架构是由神经元、层和网络三个部分组成。整个人工神经网络包含一系列基本的神经元、通过权重相互连接。神经元是人工神经网络最基本的单元。 单元以层的方式组,每一层的每个神经元和前一层、后-层的神经元连接&#x…

人工神经网络连接方式,全连接神经网络作用

人工神经元网络的拓扑结构主要有哪几种?谢谢大侠~~~ 神经网络的拓扑结构包括网络层数、各层神经元数量以及各神经元之间相互连接的方式。人工神经网络的模型从其拓扑结构角度去看,可分为层次型和互连型。 层次型模型是将神经网络分为输入层&#xff08…

神经网络算法的具体流程,人工神经网络算法步骤

神经网络 算法 思路?能否提供一个最简单的代码? 30 。 最基本的BP算法:1)正向传播:输入样本->输入层->各隐层(处理)->输出层注1:若输出…

人工神经网络的基本原理

1.1 人工神经网络原理 MeCulloch 和 Pitts 基于对大脑神经元的研究提 出了人工神经元模型(M-P 模型)。人工神经元模型如下图所示。 M-P模型把神经元看作n个的输入对应产生1个输出,该模型的函数的表达式如下: 该表达式中W[W1,W2,W3…

人工智能神经网络的应用,人工神经网络最新应用

人工智能在如今人们的现实生活中,都有哪些趣味十足的应用? 人工智能,也被称为AI。研究和开发模拟、扩展和扩展人类智能的理论、方法、技术和应用系统是一门新兴的技术科学。 人工智能是计算机科学的一个分支,它试图理解智能的本…

人工智能实验bp神经网络,BP人工神经网络模型

1、BP人工神经网络方法 (一)方法原理 人工神经网络是由大量的类似人脑神经元的简单处理单元广泛地相互连接而成的复杂的网络系统。理论和实践表明,在信息处理方面,神经网络方法比传统模式识别方法更具有优势。人工神经元是神经网…

介绍人工神经网络的两种常用结构

神经网络有哪些主要分类规则并如何分类? 神经网络模型的分类。 人工神经网络的模型很多,可以按照不同的方法进行分类。其中,常见的两种分类方法是,按照网络连接的拓朴结构分类和按照网络内部的信息流向分类。 1。 按照网络拓朴…

人工神经网络基本构成有哪些,常见的人工神经网络有哪几种

人工神经网络分类方法 从20世纪80年代末期,人工神经网络方法开始应用于遥感图像的自动分类。目前,在遥感图像的自动分类方面,应用和研究比较多的人工神经网络方法主要有以下几种: (1)BP(Back …

简述人工神经网络的基本框架

简述人工神经网络的结构形式 神经网络有多种分类方式,例如,按网络性能可分为连续型与离散型网络,确定型与随机型网络:按网络拓扑结构可分为前向神经网络与反馈神经网络。本章土要简介前向神经网络、反馈神经网络和自组织特征映射神经网络。 …

人工神经网络 神经网络区别_人工神经网络概述

人工神经网络 神经网络区别 Artificial neural networks (ANN) in machine learning (artificial intelligence) are complex compounds of algorithms that work in an organized manner to extract labels or results for a given set of data. It is believed that this tec…

人工神经网络的功能特点,人工神经网络的优缺点

人工神经网络的特点有哪些 人工神经网络的特点和优越性,主要表现在三个方面:第一,具有自学习功能。 例如实现图像识别时,只在先把许多不同的图像样板和对应的应识别的结果输入人工神经网络,网络就会通过自学习功能&a…

人工神经网络基本分类有,人工神经网络基本概念

1、神经网络有哪些主要分类规则并如何分类? 神经网络模型的分类 人工神经网络的模型很多,可以按照不同的方法进行分类。其中,常见的两种分类方法是,按照网络连接的拓朴结构分类和按照网络内部的信息流向分类。 1 按照网络拓朴结构…

人工神经网络模型定义,人工神经网络基本框架

人工神经网络评价法 人工神经元是人工神经网络的基本处理单元,而人工智能的一个重要组成部分又是人工神经网络。人工神经网络是模拟生物神经元系统的数学模型,接受信息主要是通过神经元来进行的。 首先,人工神经元利用连接强度将产生的信号…

人工神经网络概念及组成,人工神经网络发展史

BP神经网络的发展历史 人工神经网络早期的研究工作应追溯至上世纪40年代。下面以时间顺序,以著名的人物或某一方面突出的研究成果为线索,简要介绍人工神经网络的发展历史。 1943年,心理学家WMcculloch和数理逻辑学家WPitts在分析、总结神经…