400 028 6601

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

怎样解析Mmap原理和使用方式

这篇文章将为大家详细讲解有关怎样解析Mmap原理和使用方式,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

十年的天台网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。全网整合营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整天台建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联从事“天台网站设计”,“天台网站推广”以来,每个客户项目都认真落实执行。

一、传统的读写文件

一般来说,修改一个文件的内容需要如下3个步骤:

过程如图 1 所示:

怎样解析Mmap原理和使用方式

如果使用代码来实现上面的过程,代码如下:

read(fd, buf, 1024);  // 读取文件的内容到buf ...                   // 修改buf的内容 write(fd, buf, 1024); // 把buf的内容写入到文件

从图 1 中可以看出,页缓存(page cache) 是读写文件时的中间层,内核使用 页缓存 与文件的数据块关联起来。所以应用程序读写文件时,实际操作的是  页缓存。

二、使用 mmap 读写文件

从传统读写文件的过程中,我们可以发现有个地方可以优化:如果可以直接在用户空间读写 页缓存,那么就可以免去将 页缓存  的数据复制到用户空间缓冲区的过程。

那么,有没有这样的技术能实现上面所说的方式呢?答案是肯定的,就是 mmap。

使用 mmap 系统调用可以将用户空间的虚拟内存地址与文件进行映射(绑定),对映射后的虚拟内存地址进行读写操作就如同对文件进行读写操作一样。原理如图 2  所示:

怎样解析Mmap原理和使用方式

前面我们介绍过,读写文件都需要经过 页缓存,所以 mmap 映射的正是文件的 页缓存,而非磁盘中的文件本身。由于 mmap 映射的是文件的  页缓存,所以就涉及到同步的问题,即 页缓存 会在什么时候把数据同步到磁盘。

Linux 内核并不会主动把 mmap 映射的 页缓存 同步到磁盘,而是需要用户主动触发。同步 mmap 映射的内存到磁盘有 4 个时机:

三、mmap的使用方式

下面我们介绍一下怎么使用 mmap,mmap 函数的原型如下:

void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset);

下面介绍一下 mmap 函数的各个参数作用:

介绍完 mmap 函数的原型后,我们现在通过一个简单的例子介绍怎么使用 mmap:

int fd = open(filepath, O_RDWR, 0644);                           // 打开文件 void *addr = mmap(NULL, 8192, PROT_WRITE, MAP_SHARED, fd, 4096); // 对文件进行映射

在上面例子中,我们先通过 open 函数以可读写的方式打开文件,然后通过 mmap 函数对文件进行映射,映射的方式如下:

mmap 函数会返回映射后的内存地址,我们可以通过此内存地址对文件进行读写操作。我们通过图 3 展示上面例子在内核中的结构:

怎样解析Mmap原理和使用方式

关于怎样解析Mmap原理和使用方式就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。


新闻标题:怎样解析Mmap原理和使用方式
网页网址:http://mzwzsj.com/article/pssogc.html

其他资讯

让你的专属顾问为你服务