mmap映射大于4g的文件_浅谈mmap介绍

本文介绍了mmap的工作原理和在Linux中的应用,包括进程虚拟地址空间、内存管理、mmap的参数及典型用途。通过mmap可以避免数据拷贝提高效率,用于文件读写、多进程共享内存以及glibc的malloc实现。同时,讨论了mmap在映射大文件时的页面对齐特性以及内存换入换出的情况。
摘要由CSDN通过智能技术生成

相关背景知识

  • 说到mmap的使用,我们首先要了解一下进程的虚拟进程地址空间的概念。Linux上为了作进程隔离,每个进程都运行在自己的单独的虚拟进程空间,同时物理机上内存有限,每个进程使用虚拟内存地址来隔离又共享物理内存。我们平时在代码里获取的地址就是虚拟地址;
  • 放一张进程虚拟地址空间草图,网上也可以很容易找到更精美的
f46ca8422e0a9ce4c5de59a9cf390a03.png
  1. 我们在程序中申请内存的操作,实际上只是在进程地址空间相应部分申请了一段虚拟地址,当实际对这段虚拟地址进行读写操作时,才会分配真正的物理内存;
  2. 通常x86 Linux采用段页式的内存管理模式,这块不具体展开,简单来说就是CPU访问的逻辑地址,然后经过分段机制转换成线性地址(你可以简单理解成等价于上面说的虚拟地址),再经过分页机制转换成物理地址,第一次访问的时候由于实现物理地址还没有分配,会产生缺页中断来分配物理地址,用它来填充对应的页表项;
  3. 通过 read 系统调用来读取磁盘上的文件时,文件内容会先被读到内存的page inode 部分,然后再从page cache中拷贝到应用层的读缓存buffer中;对于打开的文件,内核都会在内存中维护一个inode结构体(对于同一个文件,即使被open多次,内核也仅维护这一个inode),其有一个成员是 struct address_space *i_mapp
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值