快速业务通道

从开发者的角度学习Linux内存管理

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-17
ation:\n");

  printf("\tAddress of data_var(Data Segment):%p\n",&data_var0);

  static int data_var1=4;

  printf("\tNew end of data_var(Data Segment):%p\n",&data_var1);

  printf("____________________________\n");

  printf("BSS Location:\n");

  printf("\tAddress of bss_var:%p\n",&bss_var);

  printf("____________________________\n");

  char *b = sbrk((ptrdiff_t)0);

  printf("Heap Location:\n");

  printf("\tInitial end of heap:%p\n",b);

  brk(b 4);

  b=sbrk((ptrdiff_t)0);

  printf("\tNew end of heap:%p\n",b);

  return 0;

  }

  它的结果如下

  below are addresses of types of process''s mem

  Text location:

  Address of main(Code Segment):0x8048388

  ____________________________

  Stack Location:

  Initial end of stack:0xbffffab4

  new end of stack:0xbffffab0

  ____________________________

  Data Location:

  Address of data_var(Data Segment):0x8049758

  New end of data_var(Data Segment):0x804975c

  __________________________

  BSS Location:

  Address of bss_var:0x8049864

  ____________________________

  Heap Location:

  Initial end of heap:0x8049868

  New end of heap:0x804986c

  利用size命令也可以看到程序的各段大小,比如执行size example会得到

  text data bss dec hex filename

  1654 280 8 1942 796 example但这些数据是程序编译的静态统计,而上面显示的是进程运行时的动态值,但两者是对应的.

  通过前面的例子,我们对进程使用的逻辑内存分布已先睹为快.这部分我们就继续进入操作系统内核看看,进程对内存具体是如何进行分配和管理的.

  从用户向内核看,所使用的内存表象形式会依次经历“逻辑地址”——“线性地址”——“物理地址”几种形式(关于几种地址的解释在前面已经讲述了).逻辑地址经段机制转化成线性地址;线性地址又经过页机制转化为物理地址.(但是我们要知道Linux系统虽然保留了段机制,但是将所有程序的段地址都定死为0-4G,虽然逻辑地址和线性地址是两种不同的地址空间,但在Linux中逻辑地址就等于线性地址,它们的值是一样的).沿着这条线索,我们所研究的主要问题也就集中在下面几个问题.

  1.进程空间地址如何管理?

  2.进程地址如何映射到物理内存?

  3.物理内存如何被管理?

  以及由上述问题引发的一些子问题.如系统虚拟地址分布;内存分配接口;连续内存分配与非连续内存分配等.

  进程内存空间

  Linux操作系统采用虚拟内存管理技术,每个进程都有各自互不干涉的进程地址空间.该空间是块大小为4G的线性虚拟空间,用户所看到和接触到的都是该虚拟地址,无法看到实际的物理内存地址.利用这种虚拟地址不但能起到保护操作系统的效果(用户不能直接访问物理内存),更重要的是,用户程序可使用比实际物理内存更大的地址空间(具体的原因请看硬件基础部分).

  在讨论进程空间细节前,这里先要澄清下面几个问题:

  第一、4G的进程地址空间被人为的分为两个部分——用户空间与内核空间.用户空间从0到3G(0xC0000000),内核空间占据3G到4G.用户进程通常情况下只能访问用户空间的虚拟地址,不能访问内核空间虚拟地址.只有用户进程进行系统调用(代表用户进程在内核态执行)等时刻可以访问到内核空间.

  第二、用户空间对应进程,每当进程切换,用户空间就会跟着变化;而内核空间是由内核负责映射,它并不会跟着进程改变,是固定的.内核空间地址有自己对

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号