Chinaunix首页 | 论坛 | 博客
  • 博客访问: 677215
  • 博文数量: 192
  • 博客积分: 1875
  • 博客等级: 上尉
  • 技术积分: 2177
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-23 23:21
个人简介

有时候,就是想窥视一下不知道的东东,因为好奇!

文章分类

全部博文(192)

文章存档

2024年(8)

2023年(3)

2019年(1)

2018年(1)

2017年(2)

2016年(68)

2015年(53)

2014年(14)

2013年(1)

2012年(5)

2011年(25)

2010年(9)

分类: LINUX

2015-10-25 18:15:38


进程通过缺页中断得到物理内存:
1. 请求调页场景
   层层调用关系如下:
    handle_pte_fault()-->do_anonymous_page()-->alloc_zeroed_user_highpage_movable(...)-->__alloc_zeroed_user_highpage(__GFP_MOVABLE, ...)-->
                                alloc_page_vma(GFP_HIGHUSER | movableflags,vma, vaddr)-->

    #define alloc_page_vma(gfp_mask, vma, addr)         \
           alloc_pages_vma(gfp_mask, 0, vma, addr, numa_node_id(), false)
   #define alloc_pages_vma(gfp_mask, order, vma, addr, node, false)\
           alloc_pages(gfp_mask, order)
  以上层层调用关系, 结合下面的宏, 得到最终通过alloc_pages(GFP_HIGHUSER |__GFP_MOVABLE, 0)分配物理页框.

2. 写时复制场景
   调用关系如下:
    handle_pte_fault()-->do_wp_page()-->wp_page_copy()-->alloc_zeroed_user_highpage_movable()
                                                                                           -->alloc_page_vma(GFP_HIGHUSER_MOVABLE, vma, address);
   同样得知, 最终通过alloc_pages(GFP_HIGHUSER |__GFP_MOVABLE, 0)分配物理页框.

   以上alloc_pages()函数的第一个参数都是GFP_HIGHUSER |__GFP_MOVABLE, 第二个参数都是0.  意味着每次分配一个页, 如果是32位系统并有超过896MB的内存, 会首先分配高端内存.
  参考代码linux-4.2
阅读(2561) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~