当下开发人员应用最多的两大操作系统,linux & windows。

在程序开发中,进程与线程的概念,是一个好的程序员所必备的基础知识。如果对这两个概念没有很好的理解与应用,想要成为一个优秀的开发人员是很难的。

应侯捷MFC快速入门中的概念,对有关进程的概念进行下述简单的阐述。

 

执行一个应用程序,必然就产生一个进程(process)。

在windows最直接的程序执行的方式就是在shell中以鼠标双击某一个可执行文件图标,执行起来的App进程其实是shell调用CreateProcess激活的。相应的在linux下,你可能更会选择使用terminal的方式执行一个应用程序,现在linux完美的图形化界面下,也同样支持windows下这种执行方式。

其实两种系统大体的执行方式都可以概括如下:

注:这里针对windows下MFC的调用以及系统调用,linux没有多大区别。

1、shell调用CreateProcess激活App.exe。

2、系统产生一个“进程核心对象”,计数值加1.

3、系统为此进程建立一个4GB地址空间。

4、加载器将必要的代码加载到上述地址空间中,包括App.exe的程序、数据,以及所需的动态加载函数库(DLLs)。

5、系统为此进程建立一个线程,称为主线程(primary thread)。线程才是CPU时间的分配对象。

6、系统调用C runtime函数库的Startup Code

7、Startup Code调用App程序的WinMain函数。

8、App程序开始运行。

9、使用者关闭App主窗口,使WinMain中的消息循环结束,于是WinMain结束。

10、回到Startup Code。

11、回到系统,系统调用ExitProcess技术进程。