*vm_pgoffset指定了文件映射的偏移量,该值用于值映射了文件部分内容时
注偏移量的单位不是字节,而是页(PAGE_SIZE).页长度为4KIB的系统上,偏移量值为10,折合实际的字节偏移量40960.
*vm_file指向file实例,描述一个被映射的文件
*取决于映射类型,vm_private-data可用于存储私有数据,不由通用内存管理例程操作。
VM_READ,vm_maywrite,vm_mayexec,vm_mayshare用于去欸的那个是否可以设置对应的VM_标志。
*VM_GROWSDOWN和VM_GROWSUP表示一个区域是否可以向下或向上扩展。
*如果区域很可能从头到位顺序读取,则设置VM_SEQW_READ.
*如果设置了VM_DONTCOPY, 则相关的区域在fork系统调用执行时不复制。
*VM_DONTEXPAND禁止区域通过mremap系统调用扩展
*如果区域是基于某些体系结构支持的巨型也,则设置VM_HUGELB标志。
*VM_ACCOUNT指定区域是否被归入overcommit特性的计算中。
4.4.3 优先查找树
优先查找树(priority search tree)用于建立文件中一个区域与该区域映射的所有虚拟地址空间之间的关联
1.附加的数据结构
每个打开文件(和每个块设备,因为这些也可以通过设备文件进行内存映射)表示struct file的一个实例。
请注意,尽管下文值讨论文件区间的映射,但实际上也可以映射不同的东西。在打开文件时,内核将file->f_mapping 设置inode->i_mapping.这使得多个进程可以访问同意文件,而不会直接干扰到其他进程:inode是特定于文件的数据结构,而file则是特定于给定进程的。
2.优先树的表示
优先树用来管理表示给定文件中区间的所有vm_area_struct实例。这要求该数据结构能够处理重叠,还要能处理相同的文件区间。
*在vm_area_struct实例中链接到优先树种作为结点时,prio_tree_node用于建立必要的关联。
prio_tree_node结构的最后一个成员是相同的,这些数据接哦古可据此进行协调
prio_tree_node不重叠,因此而这尽管在同一联合之中,也可以同时使用。
因此内核使用vm_set.head指向属于一个共享映射的vm_area_struct实例中的第一个实例。