社区
Linux_Kernel
帖子详情
内核高端映射的三种方式的疑问
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
打赏
收藏
内核高端映射的三种方式的疑问
kmap() kmap_atomic() vmalloc() 其中前两个只更新pte. 而vmalloc() 要更新4级页表的 pgd, pud, pmd, pte 我的问题是为什么前两个函数不更新pgd, pud, pmd呢? 假设一个虚拟地址位于kmalloc()所管辖的区间内,那想取得对应的物理地址,难道不需要4级页表吗? 如果是前两个函数有专有的页表,那这个页表的结构是什么样子的? 请赐教,多谢了!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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()的线性地址是临时找到的,自然就要更新多级页表了。
linux
高端
内存页框管理:永久
内核
映射
、临时
内核
映射
以及非连续内存分配
摘要:
高端
内存页框的
内核
映射
分为
三种
情况:永久
内核
映射
、临时
内核
映射
和非连续内存
映射
。那么这三者有什么区别和联系呢?临时
内核
映射
如何保证不会被阻塞呢?本文主要为你解答这些
疑问
,并详细探讨
高端
内存
映射
的前两种
方式
。 本文来源:linux
高端
内存页框管理:永久
内核
映射
、临时
内核
映射
以及非连续内存分配 http://blog.csdn.net/trochiluses/article/details/1...
32位Linux
内核
空间地址
映射
--------总结
对于32位机,总的来说物理内存被分为
高端
和地段内存两部分。我们可以使用virt_to_phys() 和 phys_to_virt() 方法用于896MB以下低端内存的虚拟地址和物理内存地址之间换算关系,
高端
内存的虚拟地址和物理内存地址之间不存在如此简单的换算关系。
内核
将
高端
内存划分为3部分:VMALLOC_START ~ VMALLOC_END、KMAP_BASE ~ FIXADDR_START和FIXADDR_START ~ 4G。对于
高端
内存的3部分,内存
映射
有
三种
方式
:
Linux page cache
映射
方式
一开始接触到Linux page cache时,就有一些
疑问
。Linux page cache很大,是怎么通过虚拟内存访问的,一开始便想到的是通过mmap的机制,将文件
映射
到用户层的虚拟内存区间,然后通过触发page fault来从文件中读取,后来发现这完全是多次一举,我们先来看下linux 的page cache的存储
方式
。 page cache是存放在struct inode中的,通过struct address_space(i_data)中的iru链表,串联起了该文件所有的page cache,
科普文:软件架构Linux系列之【图解Linux内存
映射
】
Linux内存管理主要包括物理内存管理和虚拟内存管理两部分。物理内存管理涉及对物理地址的管理,而虚拟内存管理则涉及到进程的地址空间
映射
。 Linux内存管理的总体架构可以概括为:物理内存被划分为不同的区域(zones),每个区域有不同的用途;虚拟地址空间被划分为用户空间和
内核
空间,用户空间由各个进程共享,
内核
空间由
内核
独占。
linux
内核
内存管理
内存管理应该是linux
内核
里最复杂的子系统之一。 涉及到的有mmu虚拟内存,内存
映射
,小内存slab 管理,文件系统到内存的
映射
,进程虚拟内存空间 等待等等。 一图胜千言 看了上面一幅图,在仔细理解下面一小段文字,对内存管理应该能理解个大概 1.
内核
初始化: *
内核
建立好
内核
页目录页表数据库,假设物理内存大小为len,则建立了[3G--3G+len
Linux_Kernel
4,469
社区成员
17,459
社区内容
发帖
与我相关
我的任务
Linux_Kernel
Linux/Unix社区 内核源代码研究区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章