虚拟和物理地址之间的联系(通过页表),以及进程的一个内存区域与其虚拟内存也地址之间的关联。物理内存页和该也所属进程(或更精确地说,所有使用该页进程的对应也表项)之间的联系。子啊换出页时,刚好需哟啊该关联,以便跟新所有涉及的进程。
(1)在映射一页时,他惯量到一个进程,但不一定处于使用中
(2)对页的引用次数表项也使用的活跃程度。为确定该数目,内核首先逆序建立也和所有使用者之间的关联,解下来必须借助于一些技巧来计算出也使用的活跃程度。
第一个任务需要建立页和所有映射了该页的位置之间的关联。为此,内核使用一些附加的数据结构和函数。,采用一种逆向映射方法。
所有映射操作都只设计虚拟内存页,因此不需要建立反向映射。
4.8.1 数据结构
mm.h
struct page {}
显然这没有多少帮助,因为逆向映射的目的在于:给定page实例,找到所有映射了改物理内存也的位置。因此,还有两个其他的数据接哦古需哟啊发挥作用
(1)优先查找书中嵌入了术语非匿名映射的每个区域
(2)指向内存中同意也的匿名区域的链表
用于建立者两个数据接结构的成员及在vm_area_struct中,级shared联合以及 anon_vma_node和anon_vma.为让读者重新整理一下记忆。
4.8.2 建立逆向映射
在创建逆向映射时,有必要区分两个备选项:匿名也和基于文件映射的也。
1.匿名页
将匿名页插入到逆向映射数据接哦古中有两种方法。对新的匿名也必须调用page_add_new_anon_rmap.已经有引用计数的也,则使用page_add_anon_rmap.这两个函数之间唯一的差别是,前者级那个映射技术器page->_mapcount设置为0,后者将技术器加1.
2. 基于文件映射的也
3. void page_add_file_rmap(struct page *page)
{
if (atmic_inc_and_test(&page->_mapcount))
__inc_zone_page_state(page, NR_FILE_MAPPED);
}