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