Linux内存映射
调用系统函数mmap()的进程,会在其虚拟地址空间中创建一个新的内存映射。
映射分为两类:
文件映射:将文件的部分区域映射入调用进程的虚拟内存。映射一旦完成,对文件映射内容的访问则转化为对相应内存区域的字节操作。映射页面会按需自动从文件中加载。
相映成趣的是并无文件与之相对应的匿名映射,其映射页面的内容会被初始化为0.
由某一进程所映射的内存可以与其他进程的映射共享。达成共享的方式有两种:一是两处进程都针对某一文件的相同部分加以映射,二是由fork()创建的子进程自父进程处继承映射。当两个或多个进程共计享的页面相同时,进程之一对页面内容的改动是否为其他进程所见呢?这取决于创建映射时所传入的标志参数。若传入标志为私有,则某进程对映射内容的修改对于其他进程是不可见的,而且这些改动也不会真实地落实到文件上;若传入标志为共享,对映射内容的修改就会为其它进程所见,并且这些修改也会造成对文件的改动。内存映射用途很多,其中包括:以可执行文件的相应段来初始化进程的文本段、内存(内容填充为0)分配、文件IO(即映射内存I/O)以及进程间通信(通过共享映射)。
相关推荐
viplinux 2010-12-10
bluecarrot 2020-09-17
jackadmi 2020-02-09
喝咖啡的IT羊 2011-04-11
学峰的学习笔记 2011-04-08
vickytong0 2011-02-23
ChasingChasing 2011-02-12
何超杰 2019-11-03
学峰的学习笔记 2011-09-22
一叶梧桐 2018-09-18
LinuxCard 2015-05-07
farwang 2014-09-03
MoRenYaoJing 2011-03-02
Coohx 2013-10-16
TimelessFaith 2009-12-16
jaminliu0 2019-07-01
acaoye 2019-06-30
yypiao 2014-12-02
柳岸花明 2014-10-30