这次我们来讲述mmap较为具体一点的实现细节。
mmap设备方法是file_operations结构的成员,在Mmap系统调用发出时被调用。在此之前,内核已经完成了很多工作。mmap设备方法所需要做的就是建立虚拟地址到物理地址的页表。
prototype : int (*mmap)(struct file *, struct vm_area_struct *);
parameter: struct file * : 需要操作的文件
struct vm_area_struct * : 内核自动帮我们找到的一个虚拟内存区域。
return : 虚拟内存区域起始地址
Linux内核使用结构vm_area_struct 来描述虚拟虚拟内存区域,其中几个主要成员如下:
unsigned long vm_start : 虚拟内存区域起始地址
unsinged long vm_end : 虚拟内存区域结束地址
unsigned long vm_flags : 该区域的标记(能否直接把信息通过虚拟地址存入物理地址等