前序:
大学时代已经倒计时了,收拾收拾,就要走进社会了——也成为完整的社会一员。然而,还有最后的一件事情,心里总放不下。一直想通过UNIX内核代码,说说进程。如此紧迫,就这几天,容不得多有顾虑,便匆匆的写下几篇小文,供抛砖引玉。参考资料即为莱昂氏UNIX源代码分析。
关于进程的概念,一般的大学教材定义为正在执行的一道程序,强调其是一个活动的实体,并表明其与程序是不同的。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
然而,学过操作系统原理中的进程概念,心底仍觉得有些模糊;因为,固然知道进程的概念,但总觉得只是得其形,而未得其神。能清楚的说明,为什么进程是操作系统的核心概念吗?其又依靠着一种什么意识在计算机的发展中产生了呢?能否以最为直接的方式——源代码的形式加以分析,以解决教育之不足?
关于进程的概念,除了“正在执行的程序”这一点,我觉得还有两点要加以强调。
1, 进程是为描述并行发展出来的一种模型。
2, 进程是一种抽象概念。
学习计算机,常常能感觉到美不胜收,就是因为这不是一种反复的事务,而是思维运动的舞台。比如进程的概念,即是如此。我们可以想象,在多道程序乃至并行计算机中,程序执行大体上一个什么景象:
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
在较高的层次上,进程是一个重要的组织概念,用其说明一个计算机系统中作为一个整体的活动。每个进程与一道待定的程序结合,作为活动实体,而又具有交互作用和生命周期等特质。
但如此的视角,掩盖了计算机真正的活动部件本体,即处理机和外部设备则被消隐。而在较低的层次上,进程不是活动的实体,它们依靠活动实体如处理机才起作用。借助于频繁地使用处理机从一个进程映像执行切换到另一个,便形成高层的视角。
高层视角为接受过操作系统教育的每个人所熟悉,作为活动实体,进程在利用或竞争资源的过程中,状态也在运行、等待、睡眠之间不停的变化。因为有了这个视角,并行活动得到了很好的描述,也很自然的涉及到进程的通信、同步、临界区的管理以及进程的调度和死锁处理等,一般教材中都会详细的讨论。
笼统的说,进程是正在执行的程序。在较高的层次上,进程是一个抽象概念,是描述并行的一种模型。在较低的层次上,包括进程映像的结构、执行的细节和在进程间切换处理机的方法。
计算机靠着这样的概念,超脱了细节,深化了认识,不断的向前发展。
接下来,我们将进入UNIX的内核代码世界,仔细的看一看进程,看看这一切。