内核高端映射的三种方式的疑问

trueytht 2008-10-27 05:45:06
kmap()
kmap_atomic()
vmalloc()

其中前两个只更新pte.
而vmalloc() 要更新4级页表的 pgd, pud, pmd, pte
我的问题是为什么前两个函数不更新pgd, pud, pmd呢?

假设一个虚拟地址位于kmalloc()所管辖的区间内,那想取得对应的物理地址,难道不需要4级页表吗?
如果是前两个函数有专有的页表,那这个页表的结构是什么样子的?
请赐教,多谢了!
...全文
97 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
campuspuzzle 2008-10-28
  • 打赏
  • 举报
回复
kmap()
kmap_atomic()用的页表是在系统初始化阶段做页表初始化时就分配好了。
trueytht 2008-10-28
  • 打赏
  • 举报
回复
kmap()
kmap_atomic() 这两个函数映射的线性地址是固定的,指向的页表是固定不变的,所以只需要调整pte.
~~~~~~~~~~~~~~ ~~~~~~~~
“固定”是什么意思?线性地址不也是有一定范围吗,只是范围很小? 是否因为线性地址范围小,所以它们用专用的页表,所以没有pgd,pud, pmd 这些分级呢?
campuspuzzle 2008-10-28
  • 打赏
  • 举报
回复
kmap()
kmap_atomic() 这两个函数映射的线性地址是固定的,指向的页表是固定不变的,所以只需要调整pte.

vmalloc()的线性地址是临时找到的,自然就要更新多级页表了。

4,469

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧