匿名页面的产生
1、用户空间通过调用malloc()/mmap()函数来分配内存,在内核空间中发生缺页中断时,do_anonymous_page()产生匿名页;
2、发生写时复制,当缺页中断出现写保护错误时,新分配的页面是匿名页面;
3、执行do_swap_page()函数,从交换分区读回数据时分配的页面,也是匿名页面;
4、迁移页面。
匿名页面的分配函数:do_anonymous_page,刚分配完,匿名页的状态是:
page->refcount = 1;
page->mapcount = 0;
设置PG_swapbacked标志位;
加入LRU_ACTIVE_ANON链表中,并设置PG_lru标志位;
page->mapping只想VMA 中的anon_vma数据结构。
匿名页面的建立是在缺页中断分配完成之后,此时已经建立了进程虚拟地址和物理地址之间的映射关系,用户进程访问虚拟地址就可以访问到匿名页面中的内容。
匿名页面的换出
匿名页面在刚分配的时候会加入到active LRU链表的头部,在活跃LRU链表移动一段时间后 ,会到达链表的尾部,shrink_active_list()会将该页加入到不活跃LRU链表中,然后shri