当前位置: 技术问答>linux和unix
关于PAGE_OFFSET,郁闷ing...
来源: 互联网 发布时间:2015-08-02
本文导语: 上说, 内核虚拟地址VA和物理地址PA的关系是: VA = PA + PAGE_OFFSET 现在我就纳闷了: 1:内核地址空间映射难道这么简单吗?那它不是跳过了页式映射的一整套机制了? 2:假如内核用到一个虚拟地址3.9G,那么用那个公...
上说,
内核虚拟地址VA和物理地址PA的关系是:
VA = PA + PAGE_OFFSET
现在我就纳闷了:
1:内核地址空间映射难道这么简单吗?那它不是跳过了页式映射的一整套机制了?
2:假如内核用到一个虚拟地址3.9G,那么用那个公式,物理地址就是3.9G - PAGE_OFFSET
= 0.9G 在目前大部分系统物理内存很少有达到这么大的,怎么办呢?
***********************
这个问题,我想了很长时间,也没想到合理的解释,大虾们指点一下吧!!!
内核虚拟地址VA和物理地址PA的关系是:
VA = PA + PAGE_OFFSET
现在我就纳闷了:
1:内核地址空间映射难道这么简单吗?那它不是跳过了页式映射的一整套机制了?
2:假如内核用到一个虚拟地址3.9G,那么用那个公式,物理地址就是3.9G - PAGE_OFFSET
= 0.9G 在目前大部分系统物理内存很少有达到这么大的,怎么办呢?
***********************
这个问题,我想了很长时间,也没想到合理的解释,大虾们指点一下吧!!!
|
1,首先这样的地址映射不是我这样认为的,是事实如此,MMU还是要通过页式映射的方式获得内核的物理地址,而-PAGE_OFFSET只是为了计算方便,并不是真正的映射过程。
2,内核本身静态分配的空间只占用几百K,你申请的是内核使用的物理页面还是用户进程使用的物理页面,对物理页面本身来讲,并没有什么区别。内核的物理页面是不交换的,所以只要申请,物理页面就根据需要支付,不管它是内核还是用户,不同点在于如果内核申请虚拟内存,则将地址大于0xc0000000,并且不能交换,而且根据分配到的物理页面的首地址,决定是什么虚拟地址。因为不可交换,所以内核申请使用虚拟空间,是受物理内存尺寸限制的。
3,为什么分配这么大,好像没有理由吧,那应用程序也用不到3G呀,为什么分给它这么大呢?
2,内核本身静态分配的空间只占用几百K,你申请的是内核使用的物理页面还是用户进程使用的物理页面,对物理页面本身来讲,并没有什么区别。内核的物理页面是不交换的,所以只要申请,物理页面就根据需要支付,不管它是内核还是用户,不同点在于如果内核申请虚拟内存,则将地址大于0xc0000000,并且不能交换,而且根据分配到的物理页面的首地址,决定是什么虚拟地址。因为不可交换,所以内核申请使用虚拟空间,是受物理内存尺寸限制的。
3,为什么分配这么大,好像没有理由吧,那应用程序也用不到3G呀,为什么分给它这么大呢?
|
我也考虑过这个问题,我的看法是:
这个地址是在内核空间所使用的虚拟地址,在内核中,虚拟地址与物理地址是线形影射的。
这个影射必须是在有实际内存的地方进行,否则就会出错。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。