• 2004-07-19

    初窥进程

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    http://www.blogbus.com/dreamhead-logs/274465.html

    《初窥进程》是初学操作系统时我写的一篇作业,事隔多年,在老师的网站上发现了这篇东西,于是决定让它回到自己的怀抱。

    初窥进程

    现在的计算机都是三心二意的,可以让你打印着文稿,又听着歌,这在过去是不可想象的。计算机现在的大本事得益于多道程序(multiprogramming)的出现,想了解它,头一个要弄清楚的就是进程(process)。

    所谓进程,就是由正文段(text)、用户数据段(user segment)以及系统数据段(system segment)共同组成的一个执行环境。不好懂吧!压缩一下,进程是环境。我们经常在Windows的桌面上,通过鼠标双击(也可能是单击)来运行一个程序,但你是否想象过它们是如何运行的呢?实际上,Windows第一件要做的事就是创建一个进程,为程序运行打造好一个环境。也许编过Windows程序的人会问:“我没有创建什么进程呀?”这仅仅事你没有创建而已,这里先要纠正一个观点,这里的程序并不是编程者写的源程序,而是通常的可执行文件。可执行文件一旦要运行,系统会替它把所有一切准备好,包括开辟内存空间,加载代码等等。这样构造的一个执行环境就是进程。有了进程,原本只是一个静态的实体的程序,就要活了。程序只是一个机器代码指令和数据组成的一个普通文件,对于不同的操作系统有不同的格式,比如DOS下是MZ格式,Windows下的PE格式,因此,操作系统需要创建的环境也有所不同。大概这样就可以理解为什么不同的程序不能在不同的操作系统下运行了吧!

    解释一下上面概念里提到的几个东西。正文段(text),可以类比一下汇编语言中的代码段,这里存放的就是被执行的机器指令。系统中正在运行的两个或多个进程之间可以共享同一正文段,很不错,不必每个进程拥有一份,节省了许多空间,想想Windows里的DLL(动态链接库),道理上,就是这么简单。用户数据段(user segment),相应地,它可以类比为汇编语言里的数据段,记得编程时那一大堆变量吗?大多数在这里。套用标准点的说法:“进程执行直接操作的所有数据,包括进程使用的全部变量在内。”这是每个进程都专有一个的,其内容可以改变。系统数据段(system segment),这个我就没法比了。它不属于程序本身,是归进程所有的。程序和进程,差也就差在这了。它是用来存放程序运行环境的,存放有关进程的控制信息,是进程实体中最重要的部分。由此可见,进程果然是个环境。环境老是要变的,动态的,在某个时刻,进程的内容,就是进程映象。

    大概知道了进程是什么东西,就让我们再走近一些。Unix/Linux系统一启动就建立了一个进程,叫init。在操作系统里,描述进程之间关系,借助了树的概念,于是init就成了树根,换句话说,它是所有进程的祖先,其它进程都是它的后代。就这样,每有新进程生成,就挂在这棵树上,一结束,这个结点就脱落了。操作系统运行起来,一棵树就生成了。

    真正要实现一个操作系统,先得会描述进程。为了区别进程,操作系统愿意为每个进程提供一个进程标识号(PID),既然作区别之用,肯定是唯一的,内核程序就是通过这个PID识别不同的进程,当然,用户也可以利用PID对进程下手。描述一个动态的东西,就得知道它所处的状态,进程也不例外。一般的操作系统中进程有三个基本状态:运行态、就绪态、阻塞态。从名称上,运行很容易懂,这里只需区分一下就绪和阻塞。就绪态是可以运行,但还每轮到它使用CPU,阻塞态就是根本运行不了。当然,三者之间可以在一定条件下转化。  

    另外一个很重要的东西是进程控制块(PCB),它是用来描述进程属性的。通常它与进程同生共死,随进程创建而创建,随进程销毁而释放,可以说,只有PCB证明了进程的存在。它究竟是什么东西呢?它是用于描述和控制进程运行的信息,包括进程标识符,处理机状态,进程调度,进程控制几个方面的东西。不同的操作系统对它采用了不同的组织方式,比如,Linux系统采用的是数组的组织方式,由于PCB与进程一一对应,所以Linux系统中因为数组定义大小,限制了最大进程数,当然,可以自己修改它。描述进程还要有许多方面,但上面所说的是其中最重要的。

    关于进程,东西还有好多,比如,进程间通信,进程调度,上下文切换,还没掌握那么多,只好至此,结束初窥了。

    分享到:

    历史上的今天:

    引用地址:

    评论

  • 是哦,win32的进程就是一个容纳线程的容器,真正起作用的是线程
  • windows的进程就是exe的内存镜像,真正可执行的是线程。这点和linux还是有点区别的。
    回复tinyfool说:
    多谢指正!
    2004-07-22 22:30:41