进程是操作系统中可以独立运行的单位,在同一个系统之中,进程之间不可避免地会产 生某种联系,例如,进程竞争资源,而有些进程本来就是为了完成同一个作业而运行的。因 此,进程之间必须互相协调,彼此之间交换信息,这就是进程之间一种简单的通信。
一、进程的同步
在计算机系统中,为了完成某一个工作,不同的进程之间有可能需要协作。例如,有一 批数据记录需要进行加工处理,为此创建了两个进程,还设置了一个容量为一个记录的缓冲器。进程A从硬盘上读记录,每读出一个记录就存人缓冲器。进程B从缓冲器中取出记录加工,直至所有的记录都处理结束。
在这个例子中,进程A和进程B是两个并发进程,它们共享缓冲器。如果两个进程不相制约就会造成错误。若当进程A的执行速度超过进程B的执行速度时,进程A可能在进程B还没有取走一个记录前,又把新读出的一个记录送入缓冲器,于是后一个记录把上一 个尚未取走的记录覆盖了,造成记录的丢失。当进程B的执行速度超过进程A的执行速度时,可能出现进程A还没有把下一个新记录存入缓冲器之前,进程B又从缓冲器取记录, 造成重复地取同一个记录加工。显然,这两个进程必须协调工作的节奏,即彼此同步,才能 避免上述的错误。
进程的同步是指进程之间一种直接的协同工作关系,一些进程相互合作,共同完成一项 任务。进程之间的同步也是进程间的一种直接制约关系,一个进程的执行依赖另一个进程的 消息,当一个进程执行到某一点时,必须得到另一个进程发来的消息,在没有得到另一个进 程的消息时该进程应该等待,直到消息到达才被唤醒,继续进程的执行。
要实现进程的同步就必须提供一种机制,该机制不仅能把其他进程需要的消息发送出 去,也能测试进程自己需要的消息是否到达,这种能实现进程同步的机制称为“同步机 制。
不同的同步机制中实现同步的方法是不同的。
二、进程的互斥
在系统中,许多进程常常需要共享资源,而这些资源往往要求排他性的使用,即一次只 能为一个进程服务,因此,各进程间只能互斥使用这些资源,进程间的这种关系就是进程的互斥。例如,多个进程在竞争使用打印机、一些变量、表格等资源时,在前面讨论过的两个 并发程序A和B共享一个公共变量a的例子,以及民航售票系统的例子,都表现为互斥关 系。进程的互斥是进程间的一种间接制约关系。
三、临界区
若在系统中的某些资源一次只允许一个进程使用,则这类资源称为临界资源或共享变量,而在进程中访问临界资源的程序称为临界区。
如果有若干进程共享某一临界区,则该临界区称为相关临界区。当二个进程在相关临界 区执行时,如果不让另一个进程进入相关的临界区执行,就不会形成多个进程对相同的共享变量交叉访问,于是就可避免出现与时间有关的错误。只要涉及相同变量的若干进程的相关临界区互斥执行,就不会造成与时间有关的错误。
要求进入相关临界区进程之间构成了互斥关系。为了保证系统中各并发进程顺利运行, 对两个以上欲进入相关临界区的进程,必须实行互斥,为此,系统必须采取一些调度措施。
系统对相关临界区的调度使用原则归纳如下:
(1)当临界区为空时,若有一个进程要求进人临界区,应允许它立即进入临界区——有空让进。
(2)若有一个进程已在临界区时,其他要求进入临界区的进程必须等待一一无空等待。
(3)当没有进程在临界区,而同时有多个进程要求进入临界区,只能让其中之一进入临界区,其他进程必须等待——多中择一。
(4)任一进程进入临界区的要求应在有限时间满足——有限等待。
(5)处于等待状态的进程应放弃占有处理器——让权等待。
注解:
调度原则(1)表示要有效利用临界资源;
调度原则(2)反映了互斥的基本含义,即临界 区资源的使用具有排他性;
原则(3)是原则(1)和(2)的一个特殊情况;
原则(4)和(5)是为 了避免进程间发生忙等待或死锁