unix环境高级编程笔记(1)-----进程环境
理解UNIX环境中C程序的环境是理解UNIX进程控制特征的先决条件,本章的主要内容是:
(1)、进程是如何启动和终止的。
(2)、如何向进程传递参数表和环境。
(3)、C程序的存储空间布局。
(4)、进程如何动态分配和释放存储器
1、进程的启动和终止
当内核执行C程序时,(使用一个exec函数),在调用main前先调用一个特殊的自动例程,可执行文件将此启动例程定为程序的起始地址,启动例程从内核取得main函数的命令行参数和环境变量的值,然后调用main函数。
进程的终止方式有5种正常终止和3中异常终止,详解请见UNIX环境高级编程。
2、命令行参数和环境表
3、C程序的存储空间布局
C程序的典型的存储器安排为:
正文段:由cpu执行的机器指令部分,正文段可以共享
初始化数据段:通常称为数据段,包含了程序中明确赋初值的变量。
非初始化数据段:通常称为BSS段(block started by symbol),在程序开始之前,内核将此段变量初始化为0或空指针。
栈:自动变量和每次函数调用时所保存的信息都在此段,每次调用函数时,其返回地址和调用者的环境信息都放在栈中,然后,最近被调用的函数在栈上为其自动和临时变量分配存储空间。递归函数每次调用自身时,就使用一个新的栈帧,所以一个函数调用的实例集不会影响另一个函数实例中的变量。
堆:通常在堆中进行动态存储分配,低地址到高地址分别为:正文,初始化数据段,非初始化数据段,堆,栈。