进程的通俗理解(一)

来源:互联网 发布:线性代数矩阵运算 编辑:程序博客网 时间:2024/06/15 20:50

 

进程的通俗理解(一)

    进程管理这部分知识是操作系统课程中最重要的环节之一。但是我们有很大一部分朋友都理解不够到位。“进程”的鼎鼎大名早就知晓很久了,但是要说出个所以然来却很难做到,究其原因是我们早先学习它的时候大而化之了。止于肌肤,不入骨髓。

    进程常有以下几种定义:

    —— 一个正在执行中的程序。

    —— 一个正在计算机上执行的程序实例。

    —— 一个程序及其数据在处理机上顺序执行时所发生的活动。

    —— 一个具有以下特征的活动单元:一组指令序列的执行、一个当前状态和相关的系统资源集合。

    以上是一些经典操作系统教材对进程的定义,咋看似乎很明白,但是越读越模糊,觉得进程这个概念在心中没有一个直观的映像,没有那种了然于胸、真真切切的明白。

    我们先从为什么要引入进程说起。引入进程的原因是程序并发执行带来了严重的灾难性的后果。程序在并发执行时,程序失去了封闭性,计算结果与的具体环境相关,从而使程序的执行失去了可再现性,亦即,程序经过多次执行后,虽然它们执行时的环境和初始条件相同,但得到的结果却各不相同。针对这些矛盾,我们引入“进程”来对并发执行的程序加以描述和控制。

        

 

    进程是进程实体 (Unix中叫进程映像) 的运行过程。进程实体是由程序段、相关的数据段和PCB三部分构成的(如上图所示)。

    操作系统是根据进程的PCB而不是任何别的什么而感知到进程的存在的。把PCB中存放的数据所代表的状态串联起来就构成了进程的轮廓。如下图所示:

    这条粗黑线可以理解为进程实体从状态1到状态7的运动变化情况,即进程。

举个例子:一个人活一辈子就是一个进程。出生是创建进程;他这一辈子走来,就是在执行进程;某时刻死亡,就是结束进程。一个人的一生就是由无数个悲欢离合的状态组合在一起的。我们照相取得的是某时刻的一个状态,然后把能代表这个状态的数据纪录在相应的存储器中;DV摄影机则是按照一个特定频率(时间步长)提取某个时间间隔中的状态,然后把能代表这若干个连续状态的数据纪录在相应的存储器中,而我们知道DV拍摄的这个动态过程是由一个个状态(或者叫帧)串联起来的,我们用照相机连拍(只要连拍的足够快)也能达到同样的效果。在这个例子中,风景相当于程序块,相机和DV相当于是相关的数据段、寄存器和PCB的综合实体。相机和DV摄影机纪录了一个时间间隔中某处风景的运动变化情况,也就是一个进程实体/映像的运动变化情况。

    操作系统是根据PCB来知道进程现在是处于哪个状态的。进程状态的变化是PCB根据外界刺激做出的相应控制、处理。PCB中纪录了操作系统所需的、用于描述进程当前情况以及控制进程运行的全部信息。进程的前进方向由PCB说了算,在进程的整个生命期中,系统总是通过PCB对进程进行控制的。

    操作系统为了管理进程,必须掌握关于每个进程当前状态的信息。平台采用的方法是:操作系统构造并维护它所管理的每个进程的信息表。如下表所示:

    我们以Linux的任务数据结构来说明PCB的作用,在Linux中,进程通常被称作任务task,进程表项是一个task_struct任务结构指针,其中包含了进程控制块中所有的信息。