RSS
当前位置 : 电脑维修 > 电脑维修 > 关于LINUX的内存

关于LINUX的内存

来源:未知 作者:老黑 时间:09-11-22 打印
LINUX的内存使用方式,在win下有什么软件模仿 Linux的内存模型,一般为:

地址
作用
说明

>=0xc000 0000
内核虚拟存储器
用户代码不可见区域

<0xc000 0000
Stack(用户栈)
ESP指向栈顶







 

空闲内存

>=0x4000 0000
文件映射区
 

<0x4000 0000
 




 

空闲内存




Heap(运行时堆)
通过brk/sbrk系统调用扩大堆,向上增长。


.data、.bss(读写段)
从可执行文件中加载

>=0x0804 8000(0x00008000 for arm linux)
.init、.text、.rodata(只读段)
从可执行文件中加载

<0x0804 8000(0x00008000 for arm linux)
保留区域
 

 



运行一个测试程序,观察其结果:

#include <stdio.h>



int main(int argc, char* argv[])

{

  fef  int  first = 0;

   int* p0 = malloc(1024);

   int* p1 = malloc(1024 * 1024);

   int* p2 = malloc(512 * 1024 * 1024 );

   int* p3 = malloc(1024 * 1024 * 1024 );

   printf("main=%p print=%p\n", main, printf);

   printf("first=%p\n", &first);

   printf("p0=%p p1=%p p2=%p p3=%p\n", p0, p1, p2, p3);



   getchar();



   return 0;

}




运行后,输出结果为:

main=0x8048404 print=0x8048324

first=0xbfcd1264

p0=0x9253008 p1=0xb7ec0008 p2=0x97ebf008 p3=0x57ebe008


my pc (fc5)输出结果如下:

main=0x80483f4 print=0x8048324
first=0xbf848660
p0=0x9ab2008 p1=0xb7e38008 p2=0x97e37008 p3=(nil)



arm-linux输出如下结果:

main=0x8528 print=0x8404
first=0xbec9fe10
p0=0x11008 p1=0x4005a008 p2=(nil) p3=(nil)

      main和print两个函数是代码段(.text)的,其地址符合表一的描述。

  first是第一个临时变量,由于在first之前还有一些环境变量,它的值并非0xbfffffff,而是0xbfcd1264,这是正常的。

   p0是在堆中分配的,其地址小于0x4000 0000,这也是正常的。

   但p1和p2也是在堆中分配的,而其地址竟大于0x4000 0000,与表一描述不符。



原因在于:运行时堆的位置与内存管理算法相关,也就是与malloc的实现相关。关于内存管理算法的问题,我们在后继文章中有详细描述,这里只作简要说明。在glibc实现的内存管理算法中,Malloc小块内存是在小于0x4000 0000的内存中分配的,通过brk/sbrk不断向上扩展,而分配大块内存,malloc直接通过系统调用mmap实现,分配得到的地址在文件映射区,所以其地址大于0x4000 0000。   使用虚拟机啊VMWARE就可以使用LINUX了。建议你安装UBUTU。   你的问题过于复杂,不是一两句话说的清楚的,推荐你看下面的一本书,你的问题都能解决。

在众多Linux内核分析的书籍中,《深入了解Linux虚拟内存管理》的特点非常鲜明:
    (1) 《深入了解Linux虚拟内存管理》问世以前,基本上没有一套关于Linux 虚拟内存(Virtual Memory,VM)的完整文档。文档的匮乏直接导致VM只能被很少一部分内核开发人员所完全理解。极少或根本没有任何信息对这种实现的理论基础进行描述。
    (2) 《深入了解Linux虚拟内存管理》试图弥补内存管理理论和在Linux中具体实现之间的差距,并且将两个部分结合起来,是当今最能够充分理解Linux VM的运行机制以及将理论和实现联系在一起的书籍。《深入了解Linux虚拟内存管理》不是以讲述理论为目标,而是先讲述理论,再结合Linux的实现深入剖析其细节。
    (3) 《深入了解Linux虚拟内存管理》以相对独立于硬件的角度阐述Linux VM。
    (4) 函数调用图和系统架构图一目了然,思路清晰。读者可以快速地掌握系统总体架构。
    (5) 在附录里面包含了对VM的详细注释。读者能够更简单地弄清楚VM的实现过程,对VM系统的运行机制更加得心应手。
    (6) 在剖析2.4内核的基础上还分析2.6内核中VM的新特性。紧跟世界Linux内核发展进度。    redhat linux目前有四种版本

as 和 es 是为服务器所设计的;ws 是为计算节点和技术工作站所设计的;而红帽 desktop 则适用于普通的办公环境。as 和 es 提供相同的功能。它们的不同之处在于,es 支持双 cpu 服务器和16gb的主内存,而 as 支持任何配置的服务器。ws 和redhat desktop 不包括 as 和 es 提供的一些服务器应用程序,因此它们并不适用于服务器环境。redhat desktop 支持大到4gb内存的单 cpu 系统,而 ws 支持双 cpu, 并且没有对内存的限制。

目前desktop的linux fedora core(fc)出到fc5  
最新评论共有位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名评论