mmap、msync

普通文件被映射到进程地址空间后,进程可以像访问普通内存一样对文件进行访问,不必再调用read(),write()等操作。

刷新变化函数msync()

进程在映射空间的对共享内容的改变并不直接写回到磁盘文件中,往往在调用munmap()后才执行该操作。

可以通过调用msync()函数来实现磁盘文件内容与共享内存区中的内容一致,即同步操作.

addr:文件映射到进程空间的地址;

len:映射空间的大小;

flags:刷新的参数设置,可以取值MS_ASYNC/ MS_SYNC/ MS_INVALIDATE

其中:

取值为MS_ASYNC(异步)时,调用会立即返回,不等到更新的完成;

取值为MS_SYNC(同步)时,调用会等到更新完成之后返回;

取MS_INVALIDATE(通知使用该共享区域的进程,数据已经改变)时,在共享内容更改之后,使得文件的其他映射失效,从而使得共享该文件的其他进程去重新获取最新值;

mmap、msync

时间: 2024-10-28 06:45:53

mmap、msync的相关文章

Linux File System Change Monitoring Technology、Notifier Technology

catalog 1. 为什么要监控文件系统 2: hotplug 3. udev 4. fanotify 5. inotify 6. code example 1. 为什么要监控文件系统 在日常工作中,人们往往需要知道在某些文件(夹)上都有那些变化,比如: 1. 通知配置文件的改变 2. 跟踪某些关键的系统文件的变化 3. 监控某个分区磁盘的整体使用情况 4. 系统崩溃时进行自动清理 5. 自动触发备份进程 6. 向服务器上传文件结束时发出通知 7. 杀软(anti-virus)需要对磁盘上的文

Linux内存管理 (9)mmap(补充)

之前写过一篇简单的介绍mmap()/munmap()的文章<Linux内存管理 (9)mmap>,比较单薄,这里详细的梳理一下. 从常用的使用者角度介绍两个函数的使用:然后重点是分析内核的实现流程:最后对mmap()/munmap()进行一些验证测试. mmap系统调用并不完全是为了共享内存而设计的,它本身提供了不同于一般对普通文件的访问方式,进程可以像读写内存一样对普通文件操作. mmap系统调用使得进程之间通过映射同一个普通文件实现共享内存.普通文件被映射到进程地址空间后,进程可以像访问普

Linux操作系统 内存管理、用户操作和文件操作

内存管理.用户操作和文件操作 预备知识: 1.Linux系统的内存分为物理内存和虚拟内存.物理内存是指安装在计算机当中的主存储器:虚拟内存是一段虚拟的逻辑上连续的储存空间,虚拟内存是由多个内存碎片组成,只有正在使用的虚拟内存被存放在内存上,对于暂时不使用的虚拟内存空间其实是储存在外存中.虚拟内存空间地址和实际的物理内存空间地址存在某种逻辑上的关系,如果虚拟内存空间地址的内容将被使用,通过逻辑关系可以计算出此部分内容对应的实际物理内存空间,然后将内容加载到内存中.虚拟内存在一定程度上独立于物理内存

《深入探究 php-apcu 实现原理》-- 第一回:apcu的简介、优缺点及使用场景

在业务开发的某些场景中使用了apcu进行整体的性能优化,也取得了不错的效果,所以前两年就一直想写写相关的主题 市面上写redis的文章或者书籍铺天盖地,但是去谈apcu的却没有多少,有一些也是科普性的如何安装和使用,所以老赵这里总结一下自己所得,做个分享. 我这篇文章的主要结构大概是这样的: 1.apcu在缓存中地位及使用场景,与redis.mysql或者其他的一些nosql数据库如何搭配使用 2.apcu的源代码在哪里,主要涉及哪些技术点 1.APCU是什么?在什么样的场景使用? 官方对于ap

内存映像文件

Linux允许任何进程把一个磁盘文件映像到内存中. 使用内存映像文件有两个主要优点 –加速文件I/O操作,不同的I/O调用如read或者fputs通过内核缓冲读出或写入数据.虽然Linux具有一种快速而先进的磁盘缓冲算法,但最快的磁盘访问也总是要比最慢的内存访问慢. –共享数据,如果多个进程要访问一样的数据,这些数据就可以保存在一个内存映像文件中,所有的进程都可以访问它. mmap函数 #include <unistd.h> #include <sys/mman.h> void *

Linux进程间通信--内存映射

一  内存映射概述 从原理上讲,Linux系统利用已有的存储管理机制可以很自然的实现进程间的共享存储.对于一段物理存储空间,只需通过进程的虚存管理机构就可以映射到各自的3G用户地址空间中.通过这种映射,在不同进程看来"私有"的数据事实上是同一段内存单元,它们被这些不同的进程所共享. 在Linux系统实际运行时,内存中的页面要经常被换入或换出,共享存储区中的页面也不例外.一般而言,内存页面的换入/换出过程采用两种方式进行: 1. 普通页面因长时间未得到访问而被内核线程kswaps在系统空

Linux Process Virtual Memory

目录 1. 简介 2. 进程虚拟地址空间 3. 内存映射的原理 4. 数据结构 5. 对区域的操作 6. 地址空间 7. 内存映射 8. 反向映射 9.堆的管理 10. 缺页异常的处理 11. 用户空间缺页异常的校正 12. 内核缺页异常 13. 在内核和用户空间之间复制数据 1. 简介 用户层进程的虚拟地址空间是Linux的一个重要抽象,它向每个运行进程提供了同样的系统视图,这使得多个进程可以同时运行,而不会干扰到其他进程内存中的内容,此外,它容许使用各种高级的程序设计技术,如内存映射,学习虚

Linux - 内存映射

一  内存映射概述 从原理上讲,Linux系统利用已有的存储管理机制可以很自然的实现进程间的共享存储.对于一段物理存储空间,只需通过进程的虚存管理机构就可以映射到各自的3G用户地址空间中.通过这种映射,在不同进程看来"私有"的数据事实上是同一段内存单元,它们被这些不同的进程所共享. 在Linux系统实际运行时,内存中的页面要经常被换入或换出,共享存储区中的页面也不例外.一般而言,内存页面的换入/换出过程采用两种方式进行: 1. 普通页面因长时间未得到访问而被内核线程kswaps在系统空

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

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