一、系统调用mmap
系统调用mmap用来创建内存映射,把创建内存映射主要工作委托给do_mmap函数,
内核源码文件处理:mm/mmap.c

1.1 进程对虚拟内存空间进行管理是通过两种数据结构:红黑树和链表。
众所周知,虚拟内存区域使用起始地址和结束地址描述,链表按起始地址递增排序。
红黑树是平衡二叉查找树,它按照起始地址大小进行平衡,使用红黑树的好处主要是查找快:
情景1:在红黑树种查找一个内存虚拟地址区域的速度很快,比链遍历查找链表的方式快很多。
情景2:增加一个新区域到内核中,可以先在红黑树中找到刚好是新区域前面的区域,然后向链表和这个树当中插入一个新区域,这样可以避免扫描整个链表。
1.2 两个系统调用mmap1、mmap2的区别在于第一个讲mmap:指定偏移的单位是字节,而且第二个是mmap2偏移的单位是页为主。有的处理器只实现其中一个,arm64架构我们是基于只实现系统调用mmap。
思路图形如下: