内核的地址是简单的线性映射这句话怎么理解啊?
对物理地址来说,给定一个虚地址x,其物理地址就是x-page_offset 。
还有这行代码
asm volatile("movl %0,%%cr3"::"r"(_pa(next->pgd)));
说明一个虚地址直接减去位移就得到物理地址了??
那虚地址有1G那么大,物理地址多半没这么大啊?用户空间的地址怎么办?
请哪位大虾指点一下,谢谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
在看《内核情景分析》,多看几遍你就明白来,作者说的很清楚的。
我就是看那个啊,看了好几遍了,
不明白这个物理地址指的是哪个地址
老大们指点一下啊
Linux内核将这4G字节的空间分为两部分,最高的1G用于内核,称为系统空间。
虽然系统空间占据了每个虚存空间最高的1G字节,但在物理内存中却总是从地址0开始。所以,对内核来说,其地址映射是很简单的线性映射
内核的空间有1G这么多,怎么可能直接就可以映射呢?
可是,在现在的LINUX版本中,内存管理有变化啊
每个进程都有3G的用户空间,然后共享1G的系统空间。
我不明白的是,为什么系统空间的地址到物理地址只要简单的位移映射呢?
顶一下,有人指点吗?
弱智老人正解
这么说,内核的内存基本在NORMAL zone了。
是不是正是由于这个原因,linux才需要划分出HIMEM zone呢?
这样做有什么优劣?
好处:
简单?高效?
不利:
这样做岂不是限制了对大内存的使用?