一:说明
当内存不够用时,交换区会释放一些页放到文件,会修改页表pte变为swp_entry_t,
当cpu访问该地址,查询页表,发现不在内存,使用swp_entry_t,交换回需要的页
二:主要代码
//申请页表
page =alloc_page(gfp_mask | __GFP_HIGHMEM);
//根据31bit-27bit找到offset
si= swap_info_get(entry);
//根据26bit-0bit找到index
offset= swp_offset(entry);
count= si->swap_map[offset] & ~SWAP_HAS_CACHE;
head= vmalloc_to_page(si->swap_map + offset);
//virt_to_page(addr)为该页地址,映射页表,返回页描述符
list_add_tail(&page->lru,&head->lru);//连接页与页描述符完成交换
现在cpu访问,查询页表,可以找到该页
三:图示