介绍
mmap函数的功能:分配内存(malloc函数的其中一种机制)和映射文件到内存中
IO架构图
本次主要研究mmap函数,其他内容后面进行更新。
mmap原理图
mmap的2种情况:
- 有FD的情况:映射到文件,首先需要申请一块vma_struct结构,指定,虚拟内存的起始位置,并通过MMU申请物理page挂在PTE种,并把文件对于的磁盘数据加载到物理page种。
- 无FD的情况:映射到内存,从堆区中开辟一段空间,申请一块VMA_STRUCT,并把它挂在MM_STRUCT下,如果有程序需要访问这块空间,通过MMU就会发生page fault异常,通过中断处理从CR2寄存器中获取相应的线性地址,并通过线性地址进行PTE和page内存的申请,并进行PTE和 page关系的维护
mmap源码研究
优缺点
- 优点:减少了从内核内存拷贝的应用程序的内存
- 缺点:mmap只能用在固定(大小波动范围小的)文件大小场景,否则会频繁产生page fault