首页 > 系统服务 > 详细

进程结构和内存布局

时间:2015-12-23 16:03:20      阅读:252      评论:0      收藏:0      [点我收藏+]

【摘自《Linux/Unix系统编程手册》】

 

进程和程序

进程(process)是一个可执行程序(program)的实例。

程序是包含了一系列信息的文件,这些信息描述了如何在运行时创建一个进程,包含如下内容:

  • 二进制格式标识:每个程序文件都包含用于描述可执行文件格式的元信息(metainformation)。
  • 机器语言指令:对程序算法进行编码。
  • 程序入口地址:标识程序开始执行时的起始指令位置。
  • 数据:程序文件包含的变量初始值和程序使用的字面常量值(比如字符串)。
  • 符号表及重定位表:描述程序中函数和变量的位置及名称。这些表格有多种用途,其中包含调试和运行时的符号解析(动态链接)。
  • 共享库和动态链接信息:程序文件所包含的一些字段,列出了程序运行时需要使用的共享库,以及加载共享库的动态链接器的路径名。
  • 其它信息:程序文件还包含许多其它信息,用以描述如何创建进程。

从内核角度看,进程由用户内存空间和一系列内核数据结构组成,其中用户内存空间包含了程序代码及代码所使用的变量,而内核数据结构则用于维护进程状态信息。

记录在内核数据结构中的信息包括许多与进程相关的标识号、虚拟内存表、打开文件的描述符表、信号传递及处理的有关信息、进程资源使用及限制、当前工作目录和大量的其它信息。

 

每个进程都有一个进程号(PID),进程号是一个正数,用以唯一标识系统中的某个进程。

Linux内核限制进程号需小于等于32767。新进程创建时,内核会按顺序将下一个可用的进程号分配给其使用。每当进程号达到32767的限制时,内核将重置进程号计数器,以便从小整数开始分配。

(实际上,一旦进程号达到32767,会将进程号计数器重置为300,而不是1。因为低数值的进程号为系统进程和守护进程所长期占用。)

在Linux2.4版本及更早的版本,进程号的上限是32767,有内核常量PID_MAX所定义。在Linux2.6中,情况有所改变,尽管进程号的默认上限仍为32767,但可以通过Linux系统中特有的/proc/sys/kernel/pid_max文件来进行调整(其值=最大进程号+1)。在32位平台中,pid_max文件的最大值为32768,但是在64位平台中,该文件的最大值可以高达222(约400万),系统可能容纳的进程数量会非常庞大。

 

每个进程都有一个创建自己的进程,每个进程的父进程号属性反应了系统上所有进程间的树状关系。每个进程的父进程又有自己的父进程,以此类推,回溯到1号进程--init进程,即所有进程的始祖。

如果子进程的父进程终止,则子进程就会变成“孤儿”,init进程随即将收养该进程。

进程结构和内存布局

原文:http://www.cnblogs.com/jingyg/p/5069964.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!