QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 4132|回复: 3

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

[复制链接]
发表于 2011-5-2 21:45:14 | 显示全部楼层 |阅读模式
一, 书上说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的线性地址来映射访问吗?
 楼主| 发表于 2011-5-2 21:49:20 | 显示全部楼层
请各位大侠赐教,谢谢
回复

使用道具 举报

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

使用道具 举报

发表于 2013-7-23 13:59:55 | 显示全部楼层
原帖由 kartorz 于 2013-7-20 10:36 发表
vmalloc 这类函数需要用到操作系统的内存管理系统。 它分配的地址都是虚拟地址。 0~4G都是虚拟地址, 与计算机的实际大小无关,哪怕你是128M内存的计算机,elf32-i386这样的程序而呀,它的内存空间就是"0x0804a000 ~ 0xFFFFF ...


楼上回答了你的第一个问题,
第二个问题,你可以看看这个http://blog.csdn.net/f22jay/article/details/7925531。个人感觉讲的还是很清楚。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-4-24 04:59 , Processed in 0.052999 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表