计算机进程管理那点事儿

826 阅读11分钟

        用静态的观点看,操作系统是一组程序和表格的集合。用动态的观点看,操作系统是进程的动态和并发执行的。而进程的概念实际上是程序这一概念发展的产物。因此,可以从分析程序的基本特征入手,引出“进程”的概念。

         顺序程序是指程序中若干操作必须按照某种先后次序来执行,并且每次操作前和操作后的数据、状态之间都有一定的关系。在早期的程序设计中,程序一般都是按顺序执行的。

        在多道程序系统中,程序的运行环境发生了很大的变化。主要体现在: 

(1)资源共享。为了提高资源的利用率,计算机系统中的资源不再由一道程序专用,而是由多道程序共同使用。 

(2)程序的并发执行或并行执行。逻辑上讲允许多道不同用户的程序并行运行;允许一个用户程序内部完成不同操作的程序段之间并行运行;允许操作系统内部不同的程序之间并行运行。物理上讲:内存储器中保存多个程序,I/O设备被多个程序交替地共享使用;在多处理机系统的情形下,表现为多个程序在各自的处理机上运行,执行时间是重叠的。单处理机系统时,程序的执行表现为多道程序交替地在处理机上相互空插运行。 

        实际上,在多道程序系统中,程序的并行执行和资源共享之间是相辅相成的。一方面,只有允许程序并行执行,才可能存在资源共享的问题;另一方面,只有有效地实现资源共享,才可能使得程序并行执行。 这样,可增强计算机系统的处理能力和提高机器的利用率。并发操作实际上是这样的:大多数程序段只要求操作在时间上是有序的,也就是有些操作必须在其他操作之前,这是有序的,但其中有些操作却可以同时进行。

1、进程的定义及其分类

        进程是程序的一次执行,该程序可以和其他程序并发执行。进程通常由程序、数据及进程控制块(Process Control Block, PCB)组成。PCB描述了进程的基本情况,是进程存在的唯一标志。 

        程序和进程的区别为程序是静态的指令序列,进程是为执行该程序的线程而保留的资源集。 

        进程依性质不同可分为:系统进程和用户进程;父进程和子进程。

2、进程状态模型

2.1、三态模型

        由进程运行的间断性,决定了进程至少具有以下三种状态: 

(1)就绪状态。当进程已分配了除 CPU 以外的所有必要的资源后,只要能再获得处理机,便能立即执行,把这时的进程状态称为就绪状态。在一个系统中,可以有多个进程同时处于就绪状态,通常把它们排成一个队列,称为就绪队列。 

(2)执行状态指进程已获得处理机,其程序正在执行。在单处理机系统中,只能有一个进程处于执行状态。 

(3)阻塞状态指进程因发生某事件(如请求 I/O、申请缓冲空间等)而暂停执行时的状态,亦即进程的执行受到阻塞,故称这种暂停状态为阻塞状态,有时也称为“等待”状态,或“睡眠”状态。通常将处于阻塞状态的进程排成一个队列,称为阻塞队列。 

                                         

        进程的状态随着自身的推进和外界的变化而变化。例如,就绪状态的进程被进程调度程序选中进入执行状态;执行状态的进程因等待某一事件的发生转入等待状态;等待状态的进程所等待事件来到便进入就绪状态。进程的状态可以动态地相互转换,但阻塞状态的进程不能直接进入执行状态,就绪状态的进程不能直接进入阻塞状态。在任何时刻,任何进程都处于且只能处于这其中一种状态。进程状态的变化情况如下: 

(1)运行态→等待态

        一个进程运行中启动了外围设备,它就变成等待外围设备传输信息的状态;进程在运行中申请资源(主存储空间及外围设备因得不到满足)时,变成等待资源状态,进程在运行中出现了故障(程序出错或主存储器读写错误等),变成等待干预状态。 

(2)等待态→就绪态

        外围设备工作结束后等待外围设备传输信息的进程结束等待;等待的资源能得到满足时(另一个进程归还了资源),则等待资源者就结束等待;故障排队后让等待干预的进程结束等待,任何一个结束等待的进程必须先变成就绪状态,待分配到处理器后才能运行。 

(3)运行态→就绪态

        进程用完了一个使用处理器的时间后强迫该进程暂时让出处理器,当有更优先权的进程要运行时也迫使正在运行的进程让出处理器。由于自身或外界原因成为等待状态的进程让出处理器时,它的状态就变成就绪状态。 

(4)就绪态→运行态

        等待分配处理器的进程,系统按一种选定的策略从处于就绪状态的进程中选择一个进程,让它占用处理器,那个被选中的进程就变成了运行态。 

2.2、五态模型

        进程的五态模型引入了新建态和终止态

                    

3、互斥与同步

3.1、进程间的同步 

        异步环境下的一组并发进程之间互发消息、相互合作、互相等待,使得各进程按一定的速度执行的过程称为进程同步,也即同步是使在异步环境下的各进程按一定的顺序和速度执行。 

3.2、进程间的互斥

        一组并发进程中的一个或多个程序段,因共享某一公有资源而使得它们必须以一个不允许交叉的顺序执行。也即,互斥要保证临界资源在某一时刻只被一个进程访问。 

3.3、临界资源 

        系统中有些资源可以供多个进程同时使用,有些资源一次只能供一个进程使用,称为临界资源(Critical Resource, CR),如打印机、公共变量和表格等。 

3.4、临界区管理原则 

        临界区(Critical Section, CS)是进程中对临界资源实施操作的那段程序。互斥临界区管理的原则是:

(1)空闲让进。无进程处于临界区时,若有进程要求进入临界区则立即允许其进入; 

(2)忙则等待。当已有进程进入其临界区时,其他试图进入各自临界区的进程必须等待,以保证诸进程互斥地进入临界区; 

(3)有限等待。有若干进程要求进入临界区时,应在有限时间内使一进程进入临界区,即它们不应相互等待而谁也不进入临界区; 

(4)让权等待。对于等待进入临界区的进程必须释放其占有的CPU。。 

3.5、信号量机制 

        1965年,荷兰学者Dijkstra提出的信号量机制是一种卓有成效的进程同步与互斥的工具。 6)整型信号量与PV操作 信号量是一个整型变量,根据控制对象的不同赋不同的值。信号量分为两类。 

● 公用信号量:实现进程间的互斥,初值=1或资源的数目。

 ● 私用信号量:实现进程间的同步,初值=0或某个正整数。

        ** 信号量S的物理意义是:S≥0表示某资源的可用数,S<0其绝对值表示阻塞队列中等待该资源的进程数。** 

        PV操作是实现进程同步与互斥的常用方法。PV操作是低级通信原语,在执行期间不可分割。其中,P操作表示申请一个资源,V操作表示释放一个资源。 

4、进程通信与管程

4.1、进程通信 

        通信(communication)是指进程间的信息交换。根据通信内容可分为控制信息的交换和数据的交换。控制信息的交换称为低级通信,进程的同步与互斥是通过信号量来实现通信的,属于低级信息。数据的交换称为高级通信。高级通信的类型有共享存储系统和消息传递系统和管道通信。高级通信的方式有直接通信和间接通信

 4.2、管程 

        汉森(Brinsh Hansen)和霍尔(Hoare)提出了另一种同步机制——管程。 管程是由一些共享数据、一组能为并发进程执行的作用在共享数据上的操作的集合、初始代码以及存取权组成的,也即共享数据及在其上操作的一组过程就构成了管程。进程可以在任何需要资源的时候调用管程,且在任一时刻最多只有一个进程能够真正地进入管程,其他的只能等待。管程提供了一种可以允许多进程安全有效地共享抽象数据类型的机制。 

4.3、进程调度与死锁

4.3.1、进程调度

        进程调度即处理器调度(又称上下文转换),它的主要功能是确定把处理器在什么时候分配给哪一个进程。在某些操作系统中,一个作业从提交到完成需要经历高、中、低三级调度。

4.3.2、调度方式

        程调度的方式有两类:剥夺方式与非剥夺方式

  • 非剥夺方式: 一旦某个作业或进程占用了处理器,别的进程就不能把处理器从这个进程手中夺走,直到该进程自己因调用原语操作而进入阻塞状态,或时间片用完而让出处理机;
  •  剥夺方式是: 当就绪队列中有进程的优先级高于当前执行进程的优先级时,便立即发生进程调度,转让处理机。

4.3.3、调度算法

(1)先来先服务(First Come and First Serverd,FCFS)调度算法,又称先进先出(First In and First Out,FIFO) 

就绪队列按先来后到原则排队。 

(2)优先数调度 

        优先数反映了进程优先级,就绪队列按优先数排队。有两种确定优先级的方法,即静态优先级和动态优先级。静态优先级是指进程的优先级在进程开始执行前确定,执行过程中不变,而动态优先级则可以在进程执行过程中改变。 

(3)轮转法(Round Robin) 

        就绪队列按FCFS方式排队。每个进程执行一次占有处理器时间都不超过规定的时间单位(时间片)若超过,则自行释放自己所占有的 CPU 而排到就绪队列的末尾,等待下一次调度。同时,进程调度程序又去调度当前就绪队列中的第一个进程。 

4.3.4、死锁

        死锁是指两个以上的进程互相都因请求对方已经占有的资源,无限期地等待并无法继续运行下去的现象。 死锁是系统的一种出错状态,它浪费系统资源,还会导致整个系统崩溃,所以应该尽量预防和避免死锁。

        产生死锁的原因:资源竞争及进程推进顺序非法。产生死锁的4个必要条件是互斥条件请求保持条件不可剥夺条件环路条件。 

        解决死锁的策略:死锁的处理策略主要有4种:鸵鸟策略(即不理睬策略)、预防策略(破坏死锁的4个必要条件之一)、避免策略(精心地分配资源,动态地回避死锁)、检测与解除死锁(一旦发生死锁,系统不但能检测出,还能解除)。 

4.4、线程

        线程是进程中的一个实体,是被系统独立分配和调度的基本单位。在引入了线程的操作系统中,通常一个进程都有若干个线程。线程只拥有一些运行中必不可少的资源,它可与同属一个进程的其他线程共享进程所拥有的全部资源。线程具有许多传统进程所具有的特性,称为轻型进程(Light-Weight Process);称传统进程为重型进程(Heavy-Weight Process)。线程可创建另一个线程,同一个进程中的多个线程可并发执行。线程也具有就绪、运行、阻塞三种基本状态。