在上一篇探索Binder通信原理时,提到了内存映射的概念,其核心是通过mmap
函数,将一块 Linux 内核缓存区映射到一块物理内存(匿名文件),这块物理内存其实是作为Binder开辟的数据接收缓存区。这里有两个概念,需要理解清楚,那就是操作系统中的虚拟内存和物理内存,理解了这两者我们才能够更清楚的理解为什么要内存映射。
所以本篇在下面会补充一些操作系统的虚拟内存方面相关的知识点。
一、虚拟内存概念
1. 虚拟内存与交换区
虚拟存储器的基本思想是:程序、数据、堆栈的总大小可以超过内存空间的大小,操作系统将当前运行的部分保存在内存中,未使用的部分保存在磁盘中。
比如一个16MB
的程序和一个内存只有4MB
的机器,操作系统通过选择可以决定哪部分4MB
的程序内容保存在内存中,并在需要时,在内存与磁盘中交换程序代码,这样16MB
的代码就可以运行在4MB
的机器中了。
CPU在执行指令与数据时,获得的是虚拟内存的地址。