操作系统:图文详解 内存映射


前言

  • 内存映射 在 Linux操作系统中非常重要,因为其涉及到高效的跨进程通信 & 文件操作
  • 今天,我将详细讲解操作系统中核心概念:内存映射

目录

示意图


1. 定义

关联 进程中的1个虚拟内存区域 & 1个磁盘上的对象,使得二者存在映射关系

  1. 上述的映射过程 = 初始化该虚拟内存区域
  2. 虚拟内存区域被初始化后,就会在交换空间中换你来还去
  3. 被映射的对象称为:共享对象(普通文件 / 匿名文件)

2. 作用

若存在上述映射关系,则具备以下特征

  • 在多个进程的虚拟内存区域 已和同1个共享对象 建立映射关系的前提下
  • 若 其中1个进程对该虚拟区域进行写操作
  • 那么,对于 也把该共享对象映射到其自身虚拟内存区域的进程 也是可见的

示意图如下

  1. 假设进程1、2的虚拟内存区域同时映射到同1个共享对象;
  2. 当进程1对其虚拟内存区域进行写操作时,也会映射到进程2中的虚拟内存区域

示意图


3. 实现过程

  • 内存映射的实现过程主要是通过Linux系统下的系统调用函数:mmap()
  • 该函数的作用 = 创建虚拟内存区域 + 与共享对象建立映射关系
  • 其函数原型、具体使用 & 内部流程 如下

/*** 函数原型*/
void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset);/*** 具体使用(用户进程调用mmap())* 下述代码即常见了一片大小 = MAP_SIZE的接收缓存区 & 关联到共享对象中(即建立映射)*/mmap(NULL, MAP_SIZE, PROT_READ, MAP_PRIVATE, fd, 0);/*** 内部原理* 步骤1:创建虚拟内存区域* 步骤2:实现地址映射关系,即:进程的虚拟地址空间 ->> 共享对象* 注: *    a. 此时,该虚拟地址并没有任何数据关联到文件中,仅仅只是建立映射关系*    b. 当其中1个进程对虚拟内存写入数据时,则真正实现了数据的可见*/

4. 特点

  • 提高数据的读、写 & 传输的时间性能

    1. 减少了数据拷贝次数
    2. 用户空间 & 内核空间的高效交互(通过映射的区域 直接交互)
    3. 用内存读写 代替 I/O读写
  • 提高内存利用率:通过虚拟内存 & 共享对象

5. 应用场景

Linux系统下,根据内存映射的本质原理 & 特点,其应用场景在于:

  1. 实现内存共享:如 跨进程通信
  2. 提高数据读 / 写效率 :如 文件读 / 写操作

6. 实例讲解

下面,我将详细讲解 内存映射应用在跨进程通信 & 文件操作的实例

6.1 文件读 / 写操作

  • 传统的Linux系统文件操作流程如下

示意图

  • 使用了内存映射的 文件读 / 写 操作

示意图

从上面可看出:使用了内存映射的文件读/写 操作方式效率更加高、性能最好!

6.2 跨进程通信

  • 传统的跨进程通信

示意图

  • 使用了内存映射的 跨进程通信

示意图

从上面可看出:使用了内存映射的跨进程通信 效率最高、性能最好!


7. 总结

  • 本文全面讲解了 Linux操作系统中的内存映射

  • 下面我将继续讲解 编程开发的基础知识,有兴趣可以继续关注Carson_Ho的开发笔记

操作系统:图文详解 内存映射相关推荐

  1. Dell计算机装Win8,戴尔笔记本用U盘重装原版win8操作系统图文详解

    戴尔笔记本用U盘重装原版win8操作系统图文详解.戴尔商务台式.商务笔记本为超大型及中小企业提供专业产品及技术支持笔记本电脑是方便的便携式计算机,广受经常出差.喜欢在咖啡店学习的人群的欢迎,而重视节约 ...

  2. Win7 + VirtualBox安装Mac OS X雪豹操作系统图文详解

    由于工作需要,我需要同时使用Windows和Mac OS X操作系统,虽然公司可以配置两台机器,但是出于发热量,空间占用,操作系统互通等原因,我还是更倾向于在虚拟机环境里工作.由于在大部分工作还是在W ...

  3. ubuntu 10.10 + VirtualBox 4 安装Mac OS X 10.6 雪豹操作系统图文详解

    参考http://blog.zhaojie.me/2010/09/how-to-install-mac-os-x-snow-leopard-on-virtualbox.html 只不过系统换成了 ub ...

  4. xp系统本地服务器环境配置,Windows XP安装Apache环境图文详解Windows服务器操作系统 -电脑资料...

    本文章来简单的介绍Windows XP安装Apache环境图文方法,有需要了解的朋友可参考参考, 双击 apache_2.2.8-win32-x86-no_ssl.msi 文件,开始安装 Apache ...

  5. 面渣逆袭:Redis连环五十二问,图文详解,这下面试稳了

    大家好,我是老三,面渣逆袭系列继续,这节我们来搞定Redis--不会有人假期玩去了吧?不会吧? 基础 1.说说什么是Redis? Redis是一种基于键值对(key-value)的NoSQL数据库. ...

  6. 大数据学习系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集群搭建 图文详解

    引言 在之前的大数据学习系列中,搭建了Hadoop+Spark+HBase+Hive 环境以及一些测试.其实要说的话,我开始学习大数据的时候,搭建的就是集群,并不是单机模式和伪分布式.至于为什么先写单 ...

  7. linux ghost系统安装教程,GHOST 使用方法图文详解 PDF

    Ghost是一个备份软件 它能将一个分区内所有文件 通常我们是将系统盘C盘 制作成一个"压缩文件" 存放在电脑其它安全的分区内 再在系统出现任意已知或未知的问题时候 再启动GHOS ...

  8. 使用阿里云服务器三分钟搭建网站教程(详细图文详解)

    使用阿里云服务器快速搭建网站教程,先为云服务器安装宝塔面板,然后在宝塔面板上新建站点,阿里云服务器网以搭建WordPress网站博客为例,来详细说下从阿里云服务器CPU内存配置选择.Web环境.域名解 ...

  9. 关于分布式存储,这是你应该知道的(图文详解)(关于存储的一些好文转载--1)

    转自:http://stor.51cto.com/art/201711/556946.htm 关于分布式存储,这是你应该知道的(图文详解) 前言 分布式存储存在的风险,其实就是因为"共享&q ...

最新文章

  1. matlab rltool,matlab工具箱
  2. pywt.upcoef中take使用详解
  3. JVM 分析工具和查看命令,超详细
  4. 实现抢红包算法?如此简单
  5. python prt_Python中的self
  6. 对矩阵进行QR分解的Matlab代码
  7. linux中sudo命令_Linux中的Sudo命令
  8. conda - 创建虚拟环境并配置tensorflow-gpu
  9. 7-5 抓老鼠啊~亏了还是赚了? (20 分)
  10. Spring Cloud 集成 euraka-server 和 euraka-client
  11. 单片机|CC2530实验入门
  12. 薇娅直播卖火箭,B 站酒泉发卫星,航天贴标生意凭什么?
  13. 二元隐函数求二阶偏导_隐函数求二阶偏导
  14. 应用在触摸面板中的电容式触摸芯片
  15. Note(读书笔记)
  16. Python实现Excel拆分操作
  17. PTA 帅到没朋友 (20分)
  18. 纪中DAY15做题小结
  19. 小伙入职某互联网大厂的一天(1)
  20. 2010最新会计科目表

热门文章

  1. SQUID优化重要参数
  2. linux-2.6内核模块引用计数的实现(try_module_get和module_put)
  3. Linux操作系统下三种配置环境变量的方法
  4. apache php 整合 linux,apache集成php5.6方法分享
  5. Java\学习——字符串
  6. 网络编程—代码—TCP网络传输
  7. 复制网页上无法选中的文字
  8. C#中Datatable的Compute的用法(转载)
  9. 学习笔记之 prim算法和kruskal算法
  10. 借助HiddenText 确定CheckBoxList当前的操作类型及点击的CheckBox