896MB 问题

896M产生的原因有几个:
1)主要原因,x86的地址空间太小了,只有4G,kernel只分到了1G。
2)linux中,kernel的线性空间开始(3G处)对应于物理地址0
3)kernel的线性地址空间要求是identify mapping,也就是内核虚拟地址减去一个常数是物理地址
4)x86架构中,某些硬件(例如LAPIC)寄存器的物理地址位于物理地址空间中的高端(高端的意思是超出了kerenl地址空间大小)。

为了满足条件4)并预留一些可以轮换使用的线性地址,内核必须预留一部分地址空间用于映射这些硬件的寄存器,这个被预留出来的地址空间大小现在是128M,那么,kernel实际可以用的地址空间大小变成了896M。
从物理地址0开始,896M的地址空间最多能映射896M的物理内存,当平台上物理内存多于896M时,例如有1G,kernel(注意,是说 kernel)要访问这些内存怎么办?只能更新页表,使896M地址空间以下的某个地址映射到物理内存的896M以上去。由于这个缘故,产生了896M高端内存的说法。
对于用户态程序就没这个问题,因为用户程序地址空间的起始不用对应物理地址0,完全可以从896M以上的物理内存开始映射。同样,64bit平台没有这个问题,因为此时kernel的地址空间大到足以映射当前硬件技术能提供的所有内存。
所以,高端内存的说法是指内核使用896M以上物理内存的情况,和用户程序没有关系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值