Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3006289
  • 博文数量: 523
  • 博客积分: 11908
  • 博客等级: 上将
  • 技术积分: 5475
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-03 15:50
文章分类

全部博文(523)

文章存档

2019年(3)

2013年(4)

2012年(71)

2011年(78)

2010年(57)

2009年(310)

分类: LINUX

2009-07-25 23:50:24

理解Linux下进程的结构

  Linux是一个多进程的操作系统,他的进程之间具有并行性、互不干扰等特点。也就是说,进程之间是分离的任务,拥有各自的权力和责任。其中,每一个进程都运行在各自独立的虚拟地址空间。因此,即使一个进程发生异常,它也不会应想到系统中的其它进程

Linux中一个进程在内存里有三部分数据,就是"数据段""堆栈段""代码段",基于I386兼容的中央处理器,都有上述三种段寄存器,以方便的运行。如图4-1所示。

  本质,对于理解、描述和设计操作系统有着极为重要的意义。了解进程的活动、状态,也有利于编制复杂程序。

    
  图4-1  Linux进程的结构

对于linux而言,数据存储情况:
  代码段是存放了程序代码的数据,假如机器中有数个进程运行相同的一个程序,那么它们就可以使用同一个代码段。

数据段则存放程序的全局变量、常数及动态数据分配的数据空间。(如malloc函数取得的空间等)。

堆栈段存放的就是子程序的返回地址、子程序的参数及程序的局部变量。堆栈段包括进程控制块PCBProcess Control Block)中。PCB处于进程核心堆栈的底部,不需要额外分配空间。

 

问:在一个程序运行的时候,那些变量存在堆中,那些变量存放在栈中?

答:对于静态变量和全局变量存放在堆中。

子函数的入口的临时变量或局部变量存放在栈中。

阅读(1672) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~