加载程序流程:
1.读取头部信息,确定需要的地址信息。
2.分配地址空间。
3.将程序读入地址空间的段中。
4.如果需要,创建一个堆栈段。
5.设置其他信息,例如环境变量。
6.执行程序。
总结:加载器每次讲程序加载前需要分配地址空间,所以每次程序加载时不会使用同样的地址。
退出程序
1.自愿退出
C语言中常用到的return和exit命令。在程序退出时,操作系统需要回收进程所分配的资源,并对每一项资源进行善后处理。
如:对于打开文件,释放文件描述符的同时,还要将缓冲区的内容“冲洗”到外存上,保证文件没有发生改变。
2.接受到一个信号退出
信号通常为:ctr+c delete ctr+/ 这三种,处理过程如自愿退出是一样的。通常用于父进程对子进程的操作上。
3.一个导致异常的操作后退出
是在程序没有准备的情况下退出的。操作系统也会对其资源进行回收,但有可能不会对这些资源作善后处理。
进程终止处理函数
1.原型及头文件
#include<stdlib.h>
int atexit(void (*func)(void));
2.特点
a.其参数为一个函数指针。类型为void型,也就是说该函数不接受任何参数。
b.返回值。成功设置了进程终止处理函数,则返回0,失败则返回非0值。
c.调用时间:终止函数是在进程结束时调用的。
d.调用顺序:与设置时完全相反,以栈的形式存储。