iOS中mmap的应用

本文详细介绍了iOS中mmap的工作原理及其优势,包括虚拟内存的基础知识,系统read/write方法调用,以及mmap如何减少文件读写操作的数据拷贝次数,实现文件共享。还探讨了在iOS中使用mmap的适用场景和注意事项。
摘要由CSDN通过智能技术生成

mmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。实现这样的映射关系后,进程就可以采用指针的方式读写操作这一段内存,而系统会自动回写脏页面到对应的文件磁盘上,即完成了对文件的操作而不必再调用read,write等系统调用函数。相反,内核空间对这段区域的修改也直接反映用户空间,从而可以实现不同进程间的文件共享。

mmap较之于系统read/write来说有着速度上的优势,具体原因是为何,我们来探究一下。

一、基础知识

1. 虚拟内存

对于计算机程序来说,当该程序需要运行时,需要把该程序相关的代码、数据等信息全部装入内存中。在早期的计算机中,是没有虚拟内存说法的,这样就会造成以下一些问题:

1) 各个进程间地址不隔离,无法做到权限保护

由于所有进程的信息都直接装入内存中,所有进程都可以对内存进行访问,在该过程中,一个进程就可以访问到其他进程在内存中的数据,同时其他进程也可以访问到该进程在内存中的数据。这种情况下无法保证程序的数据安全。

2) 内存使用效率低

当切换至新的进程时,如果内存不足,需要将其他进程的信息全部拷贝到硬盘中,然后再将新进程的内容拷贝到内存中。如果进程过多,那么会造成大量的数据在内存中的装入装出,使得内存使用效率低下。

3) 程序运行地址不确定

由于每次装入进程数据都是随机的,所以对于程序来说,运行的地址是不确定的。

由于上面一系列缺点,进而引进了虚拟内存的概念:

系统会为每一个进程创建相等的内存空间(对于32位系统,寻址地址为4字节,对应空间大小为4G)。

注意:该内存空间是虚拟假设的,而不是实际存在的。

同时系统将该内存空间分为两部分:内核空间用户空间。如图:

虚拟空间

这样,对于进程来说,它能访问的内存空间就只有属于它的虚拟地址,同时对于进程来说,每次运行的地址都是确定的。至于内存使用效率,则交给操作系统去处理以及优化。

2. 虚拟内存的工作原理

当然,对于进程来说,要实实在在的跑起来,不能照着虚拟内存对着空气运行,必须运行在实际的物理内存上,那么如何由虚拟内存对应至物理内存呢?

在现代操作系统中,对内存操作的最小基本单位为:虚拟内存被分为多个相等大小的虚拟页,物理内存也被分为多个相等大小的物理页,且虚拟页与物理页也保持相等,通常大小都为4KB。

对应关系

虚拟页需要与物理页进行一一映射,确认映射关系后,操作系统将虚拟页所需数据缓存到物理页中。根据该原理,虚拟页存在以下三种状态:

  • 未映射:该虚拟页在实体物理内存中没有对应映射。
  • 未缓存:该虚拟页在实体物理内存中有对应的物理页一一映射,但是操作系统还未将物
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值