1. page被swap出去之后,再次缺页是怎么找到找个换出的页面?
正常内存的页面是通过pte映射找到page的,swap出去的page有其特殊的方式:swap的页面page->private字段保存的是:swap_entry_t通过swap_entry_t就能找到该页面的扇区号sector_t,拿到扇区号就可以从块设备中读回page的内容,那么具体怎么从swap_entry_t找到扇区号呢:
由上图可以计算出来offset和type值,offset值得含义是对应swap_map的slot编号,type可以代表是哪个swap分区,那么根据这两个值就可以计算出扇区号:
具体查找扇区号的源码:swapfile.c:swap_page_sector:
sector_t swap_page_sector(struct page *page)
{
struct swap_info_struct *sis = page_swap_info(page);
struct swap_extent *se;
sector_t sector;
pgo