快速业务通道

Linux高端内存

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-15
得到的VADDR空间中间要留一个PAGE的空(空洞),目的和上面的空开一样.你vmalloc(100)2次,得到的2个地址中间相距8K.

  如果连续分配无空洞,那么比如

  p1=vmalloc(4096);

  p2=vmalloc(4096);

  如果p1使用越界到p2中了,也不会mm_falut. 那不容易debug.

  下面说明VMALLOC_RESERVE和896M的问题.

  上面假设机器物理512M的case. 如果机器有1G物理内存如何是好?那vmalloc()的vaddr是不是要在3G 1G 8M 空洞以上分配?超过寻址空间了吗.

  这时,4G 下面保留的VMALLOC_RESERVE 128m 就派上用场了.

  也就是说如果物理内存超过896M, high_memory也只能在3G 896地方.可寻址空间最高处要保留VMALLOC_RESREVE 128M给vmalloc用.

  这128M的VADDR空间是为了vmalloc在物理超过了896M时候使用.如果物理仅仅有512M, 一般使用不到.VMALLOC_START很低了.如果vmalloc太多了才会用到.

  high_memory在arch/i386/kernel, mm的初始化中设置.根据物理内存大小和VMALLOC_RESERVE得到数值.

  说那128M的内核线性地址仅仅是为了影射1G以上的物理内存的不对的.如果物理内存2G,1G以下的vmalloc也用那空间影射.总之,内核的高端线性地址是为了访问内核固定映射以外的内存资源

  看vmalloc分配的东西可以用

  show_vmalloc()

  {

  struct vm_struct **p, *tmp;

  for(p = &vmlist; (tmp = *p); p = &tmp->next) {

  printk("%p %p %dn", tmp, tmp->addr, tmp->size

  }

  }

  用户空间当然可以使用高端内存,是正常的使用,内核在分配那些不经常使用的内存时,都用高端内存空间(如果有),所谓不经常使用是相对来说的,比如内核的一些数据结构就属于经常使用的,而用户的一些数据就属于不经常使用的.

  用户在启动一个应用程序时,是需要内存的,而每个应用程序都有3G的线性地址,给这些地址映射页表时就可以直接使用高端内存.

  还要纠正一点的是:那128M线性地址不仅仅是用在这些地方的,如果你要加载一个设备,而这个设备需要映射其内存到内核中,它也需要使用这段线性地址空间来完成,否则内核就不能访问设备上的内存空间了.

  总之,内核的高端线性地址是为了访问内核固定映射以外的内存资源

  实际上高端内存是针对内核一段特殊的线性空间提出的概念,和实际的物理内存是两码事.进程在使用内存时,触发缺页异常,具体将哪些物理页映射给用户进程是内核考虑的事情.在用户空间中没有高端内存这个概念.

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号