软件设计师知识点:前趋图、信号量与PV操作

一、前趋图

1. 组成:前趋图是一个有向无循环图,由节点和有向线段组成,节点表示进程或程序段,有向线段表示节点间的前趋关系

2. 表示:两程序段 Pi 和 Pj 的前趋关系表示为 Pi → Pj ,其中 Pi 是Pj 的前趋, Pj 是 Pi 的后继, 含义是 Pi 执行完毕才能由 Pj 执行

二、信号量与PV操作

1. 同步、互斥、临界资源、临界区

(1) 临界资源:各进程采取互斥的方式,实现共享的资源称作临界资源

(2)临界区:每个进程中访问临界资源的那段代码称为临界区,临界区中的临界资源同一时间只能由一个进程(线程)访问

(3)互斥:互斥是进程(线程)之间的间接制约关系。当一个进程(线程)进入临界区使用临界资源时,另一个进程(线程)必须等待。只有当

使用临界资源的进程退出临界区后,这个进程(线程)才会解除阻塞状态

(4)同步:同步是进程(线程)之间的直接的制约关系。相互合作的进程(线程)需要在某些确定点上协调他们的工作,当一个进程(线程)

达到这些点后,除非另一个进程(线程)已经完成某些操作,否则只能等待这些操作结束

2、信号量:信号量(semaphore)的数据结构为一个值和一个指针,指针指向等待该信号量的下一个进程,值与相应资源的使用情况有关。

(1)值 S ≥ 0:表示某资源的可用数

(2)值 S < 0:其绝对值表示阻塞队列中等待该资源的进程数

3、P 操作定义:S := S - 1 ,将信号量 S 的值减一

(1)若 S ≥ 0,则执行 P 操作的进程继续执行

(2)若 S < 0,则置该进程为阻塞状态,并将其插入阻塞队列中

4、V 操作定义:S := S + 1,将信号量 S 的值加一

(1)若 S > 0,则执行 V 操作的进程继续执行

(2)若 S ≤ 0,则从阻塞状态唤醒一个进程,并将其插入就绪队列,执行 V 操作的进程继续执行

练习题:

进程P1、P2、P3、P4和P5的前趋图如下图所示:

若用PV操作控制进程P1、P2、P3、P4和P5并发执行的过程,则需要设置5个信号S1、S2、S3、S4和S5,且信号量S1~S5的初值都等于零。下图中a和b处应分别填(1);c和d处应分别填写(2);e和f处应分别填写(3)。

(1)A.V(S1)P(S2)和V(S3)

B.P(S1)V(S2)和V(S3)

C.V(S1)V(S2)和V(S3)

D.P(S1)P(S2)和V(S3)

(2)A.P(S2)和P(S4)

B.P(S2)和V(S4)

C.V(S2)和P(S4)

D.V(S2)和V(S4)

(3)A.P(S4)和V(S4)V(S5)

B.V(S5)和P(S4)P(S5)

C.V(S3)和V(S4)V(S5)

D.P(S3)和P(S4)V(P5)

参考答案:C、B、B