设为首页 加入收藏

TOP

巨页的原理分析(二)
2013-07-23 09:10:32 来源: 作者: 【 】 浏览:460
Tags:原理 分析

 

  直接走r4000_write_huge_probe_fail分支。

  [cpp]

  static __cpuinit void build_huge_tlb_write_entry(u32 **p,

  struct uasm_label **l,

  struct uasm_reloc **r,

  unsigned int tmp,

  enum tlb_write_entry wmode)

  {

  /* Set huge page tlb entry size */

  uasm_i_lui(p, tmp, PM_HUGE_MASK >> 16);

  uasm_i_ori(p, tmp, tmp, PM_HUGE_MASK & 0xffff);

  uasm_i_mtc0(p, tmp, C0_PAGEMASK);

  build_tlb_write_entry(p, l, r, wmode);

  build_restore_pagemask(p, r, tmp, label_leave);

  }

  首先是根据巨页大小设置pagemask,接着通过tlbw将pte entry写入tlb

  最后恢复pagemask跳转至label_leave,tlb load退出。此时系统已经有了可用的巨页tlb entry,以后访问此巨页空间不会再出现tlb miss了。

  总结一下,tlb巨页缺页流程如下:

  tlb miss-->tlb refill填入invalid pte entry-->返回用户态再次访址发生tlb load异常-->tlb load异常发现页表项不在内存中,引发page fault

  -->调用hugetlb_fault填充巨页页表项-->返回用户态再次访址发生tlb load异常(因为tlb里仍然是invalid pte entry)-->

  根据巨页页表项填充TLB条目-->返回用户态再次访址,不会出现tlb miss,程序正常运行。

          

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++ 内连接与外连接 下一篇引用计数的智能指针shared_ptr

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: