分配 虚拟内存页 : 应用进程 调用 mmap
函数后 , 在 Linux 系统中 创建 " 内存映射 “ 时 , 会在 ” 用户虚拟地址空间 “ 中 , 分配一块 ” 虚拟内存区域 " ;
此处调用的 mmap
函数是 mmap 库函数 ;
mmap 库函数 :
#include <sys/mman.h>
void* mmap(void* start,size_t length,int prot,int flags,int fd,off_t offset);
物理地址与虚拟地址进行映射 : 调用 Linux 内核空间 的 系统调用 mmap
函数 , 实现了 " 物理内存地址 " 与 " 虚拟内存地址 " 的映射关系 ;
Linux 内核中的 mmap 系统调用函数 :
int mmap(struct file *filp, struct vm_area_struct *vma)
缺页异常 : Linux 内核在分配 " 物理内存 “ 时 , 采用了 ” 延迟策略 “ , 即进程第一次访问 , 不会立即分配 物理内存 , 而是产生一个 ” 缺页异常 " ;
分配 物理内存页 : 缺页异常后的
种处理策略 ;
注意区分下 用户空间 的 mmap 库函数 , 与 内核空间 的 mmap 系统调用函数 ;
mmap 库函数 :
#include <sys/mman.h>
void* mmap(void* start,size_t length,int prot,int flags,int fd,off_t offset);
Linux 内核中的 mmap 系统调用函数 :
int mmap(struct file *filp, struct vm_area_struct *vma)