当前位置: 技术问答>linux和unix
linux 内存管理初级问题
来源: 互联网 发布时间:2016-09-17
本文导语: 对内存管理这部分一直很模糊,哪位能讲讲假设一个x86的机器有256m内存,那么内核,用户态程序都是如何分配这256m内存的? high_mem映射到哪一块,3g--3g+896映射到哪一块,0--3g映射到哪一块? 而vmalloc用的high_mem,...
对内存管理这部分一直很模糊,哪位能讲讲假设一个x86的机器有256m内存,那么内核,用户态程序都是如何分配这256m内存的?
high_mem映射到哪一块,3g--3g+896映射到哪一块,0--3g映射到哪一块?
而vmalloc用的high_mem,从用户态的malloc到最终的物理页的过程是个怎么样的?
采用0--4g的这个我知道是因为32位地址线的原因,但是这样做有什么好处呢?我看了一下elf中也是按照这个来进行定的地址,到底为什么这么做呢?
小弟初学,谢谢大家了
high_mem映射到哪一块,3g--3g+896映射到哪一块,0--3g映射到哪一块?
而vmalloc用的high_mem,从用户态的malloc到最终的物理页的过程是个怎么样的?
采用0--4g的这个我知道是因为32位地址线的原因,但是这样做有什么好处呢?我看了一下elf中也是按照这个来进行定的地址,到底为什么这么做呢?
小弟初学,谢谢大家了
|
内存划分,应该是分为内核模块、高速缓存和主存区的。具体的划分方式和大小也和Linux的内核版本有关系吧。
你说内存映射那块不太清楚。
主存区就是用户可见内存,也就是说可以通过malloc来申请的内存。
而对普通开发人员来说,只有内存的逻辑地址才是可见的。内存管理模块通过分段机制将逻辑地址转化为线性地址,再通过分页机制将线性地址映射到实际存在的物理地址上。
4G,你也说了是和cpu的寻址有关。而Linux老版本的内核中内存管理定义了进程最大的个数为64,并为每个进程分配的内存空间为64M,即64*64M=4G。我个人理解为,linux内存管理的方式是根据cpu寻址有关的。