在多道程序环境的系统中存在多个可以并发执行的进程,进程之间会存在资源共享和相互合作的问题。
进程通信是指各个进程交换信息的过程。
(一)同步与互斥
同步是合作进程间的直接制约问题,互斥是申请临界资源进程间的间接制约问题。
(1)进程间同步
定义:在系统中一些需要相互合作、协同工作的进程之间的相互联系.
举例:进程A向缓冲区送数据,进程B从缓冲区取数据加工,当进程B要取数据加工时,必须是进程A完成了向缓冲区送数据的操作,否则进程B必须停下来等待进程A的操作结束。
(2)进程间互斥
定义:指系统中多个进程因争用临界资源而互斥执行。
临界资源(Critical Resource, CR):在多道程序系统环境中,各进程可以共享各类资源,但有些资源一次只能供一个进程使用,如打印机、共享变量和表格等。
(3)临界区管理原则
临界区(Critical Section,CS):进程中对临界资源实施操作的那段程序。
管理原则 | 说明 | 注意 | |
1 | 有空即进 | 当无进程处于临界区时,允许进程进入临界区 | 只能在临界区运行有限的时间 |
2 | 无空则等 | 当有一个进程在临界区时,其他欲进入临界区的进程必须等待 | 以保证进程互斥地访问临界资源 |
3 | 有限等待 | 对于要求访问临界资源的进程,应保证进程能在有限时间进入临界区 | 以免陷入“饥饿"状态 |
4 | 让权等待 | 当进程不能进入自己的临界区时,应立即释放处理机 | 以免进程陷入忙等状态 |
(二)信号量机制
(1)定义
荷兰学者Dijkstra于1965年提出,是一种有效的进程同步与互斥工具。
(2)分类
- 整型信号量
- 记录型信号量
- 信号量集机制
(三)整型信号量
(1)定义
信号量是一个整型变量,根据控制对象的不同被赋予不同的值。
(2)分类
1)公用信号量。实现进程间互斥,初值为1或资源数目。
2)私用信号量。实现进程间同步,初值为0或正整数。
(3)信号量S的物理意义
S≥0,表示某资源的可用数
S<0,其绝对值表示阻塞队列中等待该资源的进程数。
(四)PV操作
是实现进程同步与互斥的常用方法。
P操作和V操作是低级通信原语,在执行期间不可分割。
操作 | 含义 | 定义 | S值 | |
1 | P操作 | 申请一个资源 | S:=S-1 | 若S≥0,则执行P操作的进程继续执行; 若S<0,则将该进程置为阻塞状态(无可用资源),并将其插入阻塞队列。 |
2 | V操作 | 释放一个资源 | S:=S+1 | 若S≥0,则执行V操作的进程继续执行; 若S<0,则从阻塞状态唤醒一个进程,并将其插入就绪队列,然后执行V操作的进程继续。 |
(五)PV操作实现进程互斥
令信号量mutex的初值为1,当进入临界区时执行P操作,退出临界区时执行V操作。
P(mutex)
临界区
V(mutex)
(六)PV操作实现进程同步
实现进程同步可用一个信号量与消息联系起来,
1)当信号量值为0时,表示等待的消息未产生,
2)当信号量值为非0时,表示等待的消息已经存在。
假定用信号量S表示某消息,进程通过调用P操作测试消息是否到达,调用V操作通知消息己准备好。
典型:单缓冲区的生产者和消费者的同步问题。
【举例】生产者进程P1不断生产产品送入缓冲区,消费者进程P2不断从缓冲区中取产品进行消费。
分析:为了实现P1与P2进程间的同步,需设置两个信号量S1和S2,但信号量初值不同。
方案1:信号量S1初值为1,表示缓冲区空,可以将产品送入缓冲区;信号量S2初值为0,表示缓冲区有产品。
方案2:信号量S1初值为0,信号量S2初值为0。
(三)高级通信原语
根据进程之间交换信息量的多少和效率的高低,进程通信方式分为低级方式和高级方式。
通信方式 | 说明 | |
1 | 低级方式 | PV操作存在的问题: (1)编程难度大,通信对用户不透明,即要用户利用低级通信工具实现进程间同步与互斥。PV操作使用不当容易引起死锁。 (2)效率低,生产者每次只能向缓冲区放一个消息,消费者只能从缓冲区取一个消息。 |
2 | 高级方式 | 信号通信效率较高,能传递大量数据,减轻程序编制复杂度。 (1)共享存储模式。共享某些数据结构(或存储区)。 (2)消息传递模式。进程间的数据交换以消息为单位,程序员直接利用系统提供的一组通信命令(原语)来实现通信,如Send(A)、Receive(A)。 (3)管道通信。管道连接一个读进程和一个写进程,以实现通信的共享文件(pipe文件)。向管道(共享文件)提供输入的发送进程(即写进程),以字符流形式将大量数据送入管道;接收进程可从管道接收大量数据。 |