打印

请教linux内存管理问题.谢谢

请教linux内存管理问题.谢谢

一, 书上说vmalloc()在3G+896M以上线性地址空间分配连续虚拟内存,3G到3G+896M线性地址被永久固定映射到了0--896M物理地址.

问题:如果计算机的物理内存小于896M,比如512M,那么vmalloc()是不是就没有用处了?


二,ULK(understanding the linux kernel)书中说:
.从0到3G的线性地址空间,无论用户态还是内核态都可以访问寻址.

.从3G到4G的线性地址空间,只有内核态可以访问寻址.

问题:既然内核态可以访问0到4G的所有线性地址,那么所谓的大于896M的高端物理内存,内核不就可以通过0到3G的线性地址来映射访问吗?

TOP

请各位大侠赐教,谢谢

TOP

vmalloc 这类函数需要用到操作系统的内存管理系统。 它分配的地址都是虚拟地址。 0~4G都是虚拟地址, 与计算机的实际大小无关,哪怕你是128M内存的计算机,elf32-i386这样的程序而呀,它的内存空间就是"0x0804a000 ~ 0xFFFFFFFF"。具体的 虚拟地址与物理地址的映射是操作系统来接管的。 当内存不够的时候,内核无非就是使用 交换空间,把 一些内存页面换出来。

TOP

引用:
原帖由 kartorz 于 2013-7-20 10:36 发表
vmalloc 这类函数需要用到操作系统的内存管理系统。 它分配的地址都是虚拟地址。 0~4G都是虚拟地址, 与计算机的实际大小无关,哪怕你是128M内存的计算机,elf32-i386这样的程序而呀,它的内存空间就是"0x0804a000 ~ 0xFFFFF ...
楼上回答了你的第一个问题,
第二个问题,你可以看看这个http://blog.csdn.net/f22jay/article/details/7925531。个人感觉讲的还是很清楚。

TOP