日期:2014-05-16  浏览次数:20730 次

请求调页中的高端内存映射
今天看深入理解linux内核这本书的时候,在请求调页这一节里面有说道这样一个情况:
if (write_access) {
  pte_unmap(page_table);
  spin_unlock(&mm->page_table_lock);
  page = alloc_page(GFP_HIGHUSER | _ _GFP_ZERO);
  spin_lock(&mm->page_table_lock);
  page_table = pte_offset_map(pmd, addr);
  mm->rss++;
  entry = maybe_mkwrite(pte_mkdirty(mk_pte(page,
  vma->vm_page_prot)), vma);
  lru_cache_add_active(page);
  SetPageReferenced(page);
  set_pte(page_table, entry);
  /*这里为什么要unmap*/
  pte_unmap(page_table);
  spin_unlock(&mm->page_table_lock);
  return VM_FAULT_MINOR;
}
这样的一个函数,我想知道:
1.内核是如何访问进程空间的,是通过当前进程的pgd->pud->pmd->pte这样来访问的么,还是通过其他方式?
2.如果是通过这个方式访问的,那么,pud,pmd,这些目录会不会出现在高端内存中,物理地址896m以上的对内核都是高端内存,那么是不是说进程所有的页表对内核来说访问的时候都需要进行高端内存映射才能访问,这样是不是很费劲,还是说只是写的时候才要映射?
很迷糊,请各位大侠指点

------解决方案--------------------
1.必须是通过页表访问空间
2.页表都是进程创建时设置好的,不在高端,在普通区。