为什么linux操作系统内核在虚拟地址空间的3GB处

 我来答
萢萢i3
推荐于2016-10-13 · TA获得超过1.3万个赞
知道大有可为答主
回答量:1.7万
采纳率:71%
帮助的人:4683万
展开全部
1: 并不是所有平台都在3G
2:i386没有PAE,并且编译时没有特别指定的时候才在3G
3:在这种情况下,由于地址总线最大只能访问4G的空间,并且为了在切换入内核空间时不需要重新加载内核的页表,使用了一个技巧:让内核与用户空间影射到同一内存段。根据实际需要,给内核保留了1G的内存空间,并且为了让应用程序看起来是从0地址开始的,那么内核的1G内存段就占用了3G~4G的空间。这就回答了你的问题。
4:其实这种方法不是唯一的,比如,可以让内核少占用一些空间,那么就不是3G了。或者,让内核与应用程序不映射到同一个内存空间,那么用户程序可以使用几乎全部的4G空间(有些patch可以做到,但这样的话内核<->用户态切换时代价很大。说几乎4G的原因是:调用syscall时还是需要一段内存传递参数的)。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式