免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1815 | 回复: 3
打印 上一主题 下一主题

关于swap in的一个疑问 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-08-25 14:03 |只看该作者 |倒序浏览
如果多个进程共享一个物理页帧,例如动态库,ipc内存,如果该页swap out后,一旦某个进程pagefault将该页swap in,那么其他进程的页表项是改为该新页地址,还是继续指向swap区?

论坛徽章:
0
2 [报告]
发表于 2011-08-25 22:02 |只看该作者
你为啥不问一下,当一个页被swap out时,所有的进程对应的页表项都改变吗?

论坛徽章:
0
3 [报告]
发表于 2011-08-26 13:38 |只看该作者
swap out后,所有进程对应pte都被反转修改为swaparea index+page slot index了,你信嘛?

论坛徽章:
0
4 [报告]
发表于 2011-08-26 15:11 |只看该作者
本帖最后由 omycle 于 2011-08-26 15:13 编辑

回复 3# bsd_fan


    我信啊。你可以看看代码:

  1. 702  * shrink_page_list() returns the number of reclaimed pages
  2. 703  */
  3. 704 static unsigned long shrink_page_list(struct list_head *page_list,
  4. 705                       struct zone *zone,
  5. 706                       struct scan_control *sc)
  6. 707 {
  7. 。。。。。。

  8. 796         if (page_mapped(page) && mapping) {
  9. 797             switch (try_to_unmap(page, TTU_UNMAP)) {
  10. 。。。。。。

  11. 1444 int try_to_unmap(struct page *page, enum ttu_flags flags)
  12. 1445 {           
  13. 1446     int ret;   
  14. 1447            
  15. 1448     BUG_ON(!PageLocked(page));
  16. 1449     VM_BUG_ON(!PageHuge(page) && PageTransHuge(page));
  17. 1450                 
  18. 1451     if (unlikely(PageKsm(page)))
  19. 1452         ret = try_to_unmap_ksm(page, flags);
  20. 1453     else if (PageAnon(page))
  21. 1454         ret = try_to_unmap_anon(page, flags);
  22. 1455     else           
  23. 1456         ret = try_to_unmap_file(page, flags);
  24. 1457     if (ret != SWAP_MLOCK && !page_mapped(page))
  25. 1458         ret = SWAP_SUCCESS;
  26. 1459     return ret;
  27. 1460 }               
  28. 1461            
  29. 。。。。

  30. 1281 static int try_to_unmap_anon(struct page *page, enum ttu_flags flags)
  31. 1282 {
  32. 1283     struct anon_vma *anon_vma;
  33. 1284     struct anon_vma_chain *avc;
  34. 1285     int ret = SWAP_AGAIN;
  35. 1286
  36. 1287     anon_vma = page_lock_anon_vma(page);
  37. 1288     if (!anon_vma)
  38. 1289         return ret;
  39. 1290 //这里,利用反向映射,。。。。。
  40. 1291     list_for_each_entry(avc, &anon_vma->head, same_anon_vma) {
  41. 1292         struct vm_area_struct *vma = avc->vma;
  42. 1293         unsigned long address;
复制代码
欢迎指正。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP