当前位置:文档之家› 进程管理及并发控制和同步.doc

进程管理及并发控制和同步.doc

进程管理及并发控制和同步在本章中,我们研究实现进程管理及并发控制和同步。

第1节进程的定义和特征§1. 进程的定义进程(process)或任务(task)这一术语是在六十年代初期,首先在麻省理工学院(MIT)的MULTICS系统和IBM公司的CTSS/360系统中引入的,其后有许多人对进程下过各式各样的定义,下面列举几种比较能反映进程实质的定义:⑴进程是程序的一次执行,亦即进程是在指定的内存区域中的一组指令序列的执行过程。

⑵进程(或任务)是可以和别的计算并发(concurrent)执行的计算。

⑶进程可以定义为一个数据结构和能在其上进行操作的一个程序。

⑷进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。

⑸进程(process)是一个具有独立功能的程序关于相关的数据集在处理机上的执行过程。

⑹§2. 进程的特征进程具有顺序性、动态性、并发性、独立性和异步性等特征,进程的最基本的特征是并发性。

一个进程的顺序性是指每个进程在顺序处理机上的执行是严格按次序进行的,即只有当其中的一个操作结束后,才能开始其后续操作。

进程的动态性是指它是程序的一次执行过程,表现为它是由“创建(create)”而产生,由调度程序“调度”而运行,因“等待事件”而阻塞,最后,由“撤消(destroy)”而消亡。

可见,进程是有一定生命期的,是动态地产生,运行和消亡的。

进程的并发性是指多个进程可以同时在一个系统中并发地执行。

进程的独立性是指它可以作为系统进行资源分配和调度的独立单位。

进程的异步性是指系统中的活动的进程总是按照各自独立的、不可预测的速度运行。

§3. 进程的结构为了描述进程的运动变化过程并使之能独立地运行,应该为每个进程配置一个进程控制块(process control block 简记为PCB)。

这样,从结构上看,每个进程都是由一个程序段和相应的数据段以及一个进程控制块三部分所组成。

在UNIX系统中,把这三部分统称为进程映像(image)。

而将进程定义为“进程映像的执行”。

第2节进程的状态和进程控制块§1. 进程的状态前面已经介绍过,进程有着“运行-暂停-运行-撤消”的活动规律,它并非一直处于运行状态。

事实上,在运动中的进程至少具有三个基本状态:⑴就绪状态(Ready):一旦进程分配到除处理机(CPU)以外运行所需的必要资源,就处于准备运行的状态,但是由于进程数多于处理机数,使得未分配到处理机的进程处于等待处理机的状态,一旦进程分配到处理机它就立即变成运行状态,并且立即运行。

⑵运行状态(Running):进程已经分配到包括处理机(CPU)在内运行所需的一切必要资源,并且正在处于运行的状态,即进程正在运行。

⑶阻塞状态(Blocked):正在运行中的进程,由于某一事件(例如等待输入/输出操作的完成)而使之暂时无法运行而处于暂停的状态,或者说进程的执行受到了阻塞,所以称这种暂停状态为阻塞状态。

有时又称为等待状态。

进程并非固定地处于某个状态,它将随着自身的执行和外界环境的变化而发生变化。

图2-1表示了三个基本状态之间的演变及其典型的演变原因。

实际的操作系统常常把上述的三个基本状态进一步细化。

例如,图2-2显示了典型的UNIX操作系统进程状态之间的演变及其演变原因。

图2-1 基本进程状态演变图图 2-2 UNIX进程状态演变图§2. 进程控制块为了描述进程的运动变化过程并使之能独立地运行,采用了为每个进程配置一个进程控制块(Process Control Block 简记为PCB),或称进程描述符(Process Descriptor)。

操作系统根据进程控制块对该进程进行控制和管理。

当系统创建一个进程时,同时为它设置一个进程控制块。

当进程完成时,系统收回它的进程控制块,进程也随之消亡。

为了充分描述进程,使之便于操作系统进行控制和管理。

进程控制块通常包含下列信息:⑴进程标识符(Identification):进程标识符是以字母或数字形式表示的进程名称。

每个进程只能有且仅有唯一的进程标识符,不同的进程不可以用相同的名称。

在创建一个进程时,系统必须给出该进程的进程标识符,并填入进程控制块中。

在有些系统中,为了方便起见,每个进程具有两个标识符,一个是在创建进程时,系统所提供的内部名称,一个是由创建者给予的外部名称。

⑵进程的当前状态(Status):说明进程目前处于何种状态,作为进程调度时分配处理机的主要依据,只有当进程处于活动就绪状态,并且具有最高优先数时才可以分配到处理机。

当进程处于阻塞状态时,要在进程控制块中说明阻塞原因。

⑶处理机状态保护区:当进程由于某个事件从运行状态变为阻塞状态时,处理机现场信息被保存在进程控制块内部一个区域中,以便在进程重新获得处理机时,该进程能够恢复处理机现场继续执行。

通常被保护的信息有各种寄存器、指令计数器和处理机状态字等。

⑷进程的起始地址:进程将要从此地址开始执行。

在页面管理中应给出页表指针值等。

⑸资源清单:进程所需的资源。

⑹进程优先数:记录该进程的优先数。

⑺队列指针(pointer)或链接字(link):它用于将处于同一状态的进程链接成一个队列。

存放本队列下一个进程的进程控制块首址。

⑻进程族的联系:它说明该进程与其进程家族的关系。

⑼计账信息:它被系统用于对该进程日常的计账管理。

第3节进程控制进程控制的职责是对系统中全部进程实施有效的管理。

这意味着应该具有创建新进程,阻塞进程,激活进程和撤消已经结束的进程等能力。

为了对于进程进行控制,操作系统内必须设置一个机构,它具有上述进程控制及进程通讯和资源管理等功能。

这样的机构称为操作系统的内核(Kernel)。

内核是通过各种原语操作来实现各种进程控制和管理功能的。

所谓原语(Primitive)是机器指令的延伸,它由若干条指令组成,用以完成特定功能的一段程序。

为了保证原语操作的正确性,原语在执行期间是原子的,亦即原语在执行期间是不可分割的。

在许多机器的实现中,规定在执行原语操作时要屏蔽中断,以保证其不可分割性。

用于进程控制的原语通常有下列几种:⑴创建原语(Create Primitive)⑵悬挂原语(Suspend Primitive)⑶激活原语(Activate Primitive)⑷阻塞原语(Block Primitive)⑸唤醒原语(Wakeup Primitive)⑹撤消原语(Destroy Primitive)现代操作系统大多采用基于进程的设计方法进行设计。

进程是操作系统的主要结构单位。

一个操作系统就是由若干进程的协同地,并发地执行而组成。

例如,一个简单的批处理操作系统可以看成由三个协同工作的reader进程、executer进程和printer进程组成。

其中,reader进程从输入设备读取数据,并且把它们存入输入缓冲区。

executer进程从输入缓冲区中读取数据,执行规定的操作,并且把执行结果存入输出缓冲区。

printer进程从输出缓冲区读取信息,并且把它们在打印机上输出。

并发进程可以通过两种方式执行:一是允许进程共享一个或多个处理机,另一种方式是允许每个进程在其所在的处理机上运行。

前一种途径涉及到多道程序设计技术,它是由操作系统的内核支持的,操作系统的内核在(一个或多个)处理机上多路传输那些进程。

后一种涉及多处理机技术(如果这些处理机共享一个公共存储器),或涉及到分布处理技术(如果这些处理机由一个通信网络互连)。

当然也存在一些混合方式,例如,分布式系统中的各计算机往往用多道程序设计方式来执行任务。

第4节进程的同步与互斥虽然进程具有异步特性,但这并不是说系统中的各个进程是彼此独立的,由于种种原因,它们之间常常相互作用,并存在某种彼此依赖或互相制约的关系,这些关系按其性质可分为同步(synchronization)和互斥(mutual exclusion)关系。

系统中往往存在一些伙伴进程,即为完成同一任务而彼此合作的一组进程。

伙伴进程在执行过程中常常需要互通信息或相互等待。

以便协同完成同一任务。

具体地说,一进程运行到某点时,要求另一伙伴进程为它提供信息,在未得到这一信息时,该进程等待,直至收到这一信息后,才能继续执行。

它们彼此都清楚对方的存在及作用,而且每一进程还可能直接依赖于本组进程中其它成员所产生(或所提供)的数据。

这是进程间的一种直接交互关系,表现了进程间协同工作的特性,因此称为进程间的同步关系。

例如,在前述的简单批处理操作系统中,三个进程必须相互配合、协同工作,即executer进程必须等待reader进程发来“输入缓冲区中已有数据”的信息后才能开始工作;同理,reader进程则必须等待executer进程发来“输入缓冲区中有空闲空间”的信息后,才能接着读入一个(批)数据并存入输入缓冲区中。

一般说来,并发进程可以共享系统中的各种资源,但系统中的有些资源具有一次仅允许一个进程所使用的属性。

我们称这类资源为临界资源(critical resources)。

若一进程在使用临界资源时,则其它欲占用者必须等待,仅当使用者释放后,等待的进程才可使用它。

这就导致了若干进程因竞争临界资源而不得互斥地执行的情况。

进程间的这种现象就称为进程的互斥。

例如,假设系统只配有一台行打机,现有两个进程同时申请使用它。

显然,只有当一个进程在使用完行打机后才允许另一进程使用它,不然,两个进程的打印信息将夹杂不清。

在操作系统中把访问临界资源的那段程序称为临界段(critical section)。

为了使临界资源互斥地使用,就要使临界段互斥地执行,即涉及到同一临界资源的临界段在时间上应互相排斥。

因此,临界段问题实质上是一个互斥问题。

操作系统中互斥问题很多,例如,两个进程竞争同一物理资源,两个进程访问一个共享的缓冲区等等。

§1. 并发进程控制对进程之间共享资源的控制必须满足下列要求:安全性(safety)在任意一个给定时刻只允许至多一个进程使用一个共享资源,不允许两个及两个以上进程同时使用同样的共享资源。

否则,进程对共享资源操作的结果往往是破坏性的。

活动性(liveness)活动性表现为两个方面,一方面任意一个进程在使用共享资源时,必须在有限时间内释放,不能无限期地占用而导致其它进程永远无法使用;另一方面当某个进程欲使用共享资源时,则应在有限时间内达到目的,而不应该互相阻止导致彼此永远都不能使用。

公正性(fairness)对进程使用共享资源的次序不作不公正的规定。

当某个进程欲使用共享资源时,只要其它进程不在使用该共享资源,就应该允许该进程使用。

并且任意一个要求使用共享资源的进程不能无限期地等待,总应该在某个公正的时间界限内获得该资源。

由上可知,并发进程在进入临界段时必须互斥地进行,即必须确保每次至多只有一个进程进入临界段,为此,应遵循下面的原则:⑴当有多个进程都希望进入它们的临界段时,它们不应相互封锁,而应在有限时间内让其中之一进入临界段。

相关主题