linux内核规定,只映射0-896M真实的物理内存(如果有的话,称为low
memory)到内核空间,也就是0xc0000000+0到0xc0000000+896M,而且是线性映射,有物理地址0<=x&
lt;=896M,就有内核地址0xc0000000+x.
如果物理内存y<896M,则high_memory=0xc0000000+y(是虚拟地址);否则
high_memory=0xc0000000+896M
或者说high_memory不能超过0xc0000000+896M
//high_memory = (void *) __va(max_low_pfn * PAGE_SIZE);
那么 high_memory是“具体物理内存的上限对应的虚拟地址”就比较好理解了.
“如果内核空间需要虚拟空间,就在high_memory+8m分配”,同样不难理解.
>>对某个进程而言,它怎么知道系统的物理内存的上限?除非它碰巧分配到物理内存的最上限。
进程是不需要知道这个,只有内核知道
阅读(1276) | 评论(0) | 转发(0) |