akd 发表于 2011-5-2 21:45:14

请教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的线性地址来映射访问吗?

akd 发表于 2011-5-2 21:49:20

请各位大侠赐教,谢谢

kartorz 发表于 2013-7-20 10:36:39

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

wenshengking 发表于 2013-7-23 13:59:55

原帖由 kartorz 于 2013-7-20 10:36 发表 http://forum.linuxfans.org/images/common/back.gif
vmalloc 这类函数需要用到操作系统的内存管理系统。 它分配的地址都是虚拟地址。 0~4G都是虚拟地址, 与计算机的实际大小无关,哪怕你是128M内存的计算机,elf32-i386这样的程序而呀,它的内存空间就是"0x0804a000 ~ 0xFFFFF ...

楼上回答了你的第一个问题,
第二个问题,你可以看看这个http://blog.csdn.net/f22jay/article/details/7925531。个人感觉讲的还是很清楚。
页: [1]
查看完整版本: 请教linux内存管理问题.谢谢