存储映射IO

3.6.7.1、mmap函数
3.6.7.2、LCD显示和IPC之共享内存
3.6.7.3、存储映射IO的特点
(1)共享而不是复制,减少内存操作
(2)处理大文件时效率高,小文件不划算

总结:存储映射IO其实本质上就是共享内存,和进程间通信的IPC共享内存是一样的,区
别在于:
存储映射IO:是访问设备文件的说法,例如访问LCD设备,我们的进程是一个视频播放器

,那么他需要将硬盘中的视频数据读取到内存中,然后再把内存中的数据拷贝到LCD驱动

维护的显存中去,之后硬件会自动实现视频的显示;这个是一般的流程,这种情况需要拷

贝两次,所以效率很低,解决办法就是:存储映射IO,就是将我们在应用层申请的内存空

间和LCD显存建立映射关系,虽然他们的虚拟地址不一样,但是对应的物理地址都是相同

的,也就是指向同一块物理内存,这样我们就只需要拷贝一次即可。

IPC共享内存:用于两个进程或者是多个进程将的通信,不是操作IO设备,例如:进程A是

一个摄像头的视频数据采集,进程B是视频数据处理;因为B进程的工作是需要A进程的数

据的,所以他们之间需要进行数据交流,也就是通信;如果是一般的情况:A进程将采集

的数据放在自己申请的一段内存中,B进程将A进程的数据拷贝到自己申请的另一段内存,

这样就需要拷贝两次,而且还是不被允许的,因为两个进程是不能随便进行通信的,解决

办法就是:共享内存,将A进程的申请的内存空间和B进程申请的内存空间建立映射关系,

共同指向同一块物理内存空间。

时间: 2024-10-17 17:42:27

存储映射IO的相关文章

mmap存储映射IO

mmap,munmap-- #include <sys/mman.h> void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset); int munmap(void *addr, size_t length); int mprotect(void *addr, size_t len, int prot); int msync(void *addr, size_t length, int fla

文件映射IO(mmap-mprotect-msync-munmap)函数

本文介绍在POSIX环境使用文件映射IO操作的方法,文件映射IO又被称为存储映射IO,对于普通文件而言,很多时候它是高效的,它实际减少了数据的复制:同时它也可以用于特殊的地方,用于进程之间的通信,共享内存的一种方式. 我们能够把一个文件想象成一块连续的数据,从纯粹的数据角度来看,任何普通文件都可以这么理解.文件映射实际上是把文件的这块数据与我们程序里的一块内存对应上了,使用我们操作这块内存的时候,看上去实际在操作这个文件.这就是文件映射的概念.这个概念很伟大,它直接避免了内核与用户之间的一层数据

八、文件IO——存储映射

8.1 存储映射介绍 8.1.1 概念 存储映射是一个磁盘文件与存储空间的一个缓存相映射,对缓存数据的读写就相应的完成了文件的读写. 文件操作部分映射到虚拟内存的一块区域,我们对虚拟内存映射的那块区域进行读写操作,读写之后,那块区域自动同步到文件当中. 4G空间分布: 共享内存映射区就是文件映射到的内存区. 8.1.2 mmap---建立内存映射 1 #include <unistd.h> 2 #include <sys/mman.h> 3 //mmap(建立内存映射) 4 voi

存储映射--mmap

存储映射 使一个磁盘文件与存储空间中的一个缓冲区相映射. 当从缓冲区中取数据,就相当于读文件中的相应字节. 将数据存入缓冲区,则相应的字节就自动写入文件. 使用这种方法,首先应通知内核,将一个指定文件映射到存储区域中.这个映射工作可以通过mmap函数来实现.不通过IO.直接操作内存,效率更高. mmap函数 函数原型 #include <sys/mman.h> void *mmap(void *addr, size_t length, int prot, int flags,int fd, o

第3章 文件I/O(7)_高级文件操作:存储映射

8. 高级文件操作:存储映射 (1)概念: 存储映射是一个磁盘文件与存储空间的一个缓存相映射,对缓存数据的读写就相应的完成了文件的读写. (2)mmap和munmap函数 头文件 #include<sys/types.h> #include<sys/mman.h> 函数 void* mmap(void* addr, size_t length, int prot, int flags,                       int fd, off_t offset); int

【Linux编程】存储映射I/O

存储映射I/O使一个磁盘文件与存储空间中的一个缓冲区相映射,对缓冲区的读.写操作就是对文件的读.写操作,从而可以不再使用read.write系统调用. 将文件映射到存储区的函数由mmap完成,函数原型如下: #include <sys/mman.h> /* 成功返回映射区起始地址,出错返回MAP_FAILED */ void *mmap(void *addr, size_t len, int prot, int flag, int filedes, off_t off); 参数说明: addr

通过数据库评估存储设备IO性能-Oracle 11g IO校准功能介绍

通过数据库评估存储设备IO性能 ---------Oracle11g IO校准功能介绍 前言 I/O子系统是ORACLE数据库的一个重要组成部分,因为I/O操作是贯穿数据库管理全过程,它操作的对象包括日志.表.索引.数据字典.以及一些排序.undo操作等等,每个数据库读取或者写入磁盘上的数据,都会产生磁盘IO,可以这么说一个正常业务的数据库系统,80%的性能消耗都与IO有关,相对于网络.CPU.内存等其他硬件的迅猛发展,磁盘的读写速度的发展却相对滞后,这也导致许多业务性能瓶颈集中在有限的磁盘IO

存储映射I/O

一个进程拥有独立并且连续虚拟地址空间,在32位体系结构中进程的地址空间是4G.不过,内核在管理进程的地址空间时是以内存区域为单位.内存区域是进程整个地址空间中一个独立的内存范围,它在内核中使用vm_area_struct数据结构来描述.每个内存区域都有自己访问权限以及操作函数,因此进程只能对有效范围的内存地址进行访问. 存储映射I/O是一种基于内存区域的高级I/O操作,它将磁盘文件与进程地址空间中的一个内存区域相映射.当从这段内存中读数据时,就相当于读磁盘文件中的数据,将数据写入这段内存时,则相

内存储与外存储(IO流的应用)

存储分为内存储,外存储(Sd卡存储),其中还涉及IO流的应用. 我们先来看内存储,在布局中EditView中输入的内容,通过点击按钮,分别进行保存,读取,删除的操作,读取时显示在下面的TextView中. 布局如下: <?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android&