第四章 进程同步
1.1 进程的互斥
临界资源:系统中某些资源一次只允许一个进程使用,称这样的资源为临界资源或互斥资源。在进程中涉及到临界资源的程序段叫临界区。
临界区:每个进程中访问临界资源的那段代码。
进程互斥:执行临界区的若干个进程必须互斥的进入。
1.2 进程的同步
进程同步:指为完成同一任务的诸进程间进行的某些协调工作,从而起到相互制约的作用。
1.3 进程同步机制
软件同步机制,硬件同步机制,信号量同步机制,管程机制
1.4 信号量同步机制(教材P116)
信号量(semaphore)——用于表示资源数目或请求使用某一资源的进程个数的整形量
- 是一个数据结构
- 定义如下:
typedef struct {
int value;
stuct process_control_block *list;
}semaphore;
信号量数目代表临界资源的数目 - 而用来修改信号量的语句称为P,V原语。
wait()进行一次wait操作意味着请求分配一个单位资源。
signal()进行一次V操作意味着释放一个单位资源。
1.5 value的物理含义
- P(S):表示申请一个资源
- V(S)表示释放一个资源。信号量的初值应该大于等于0
- S>0表示有S个资源可用
- S=0表示无资源可用,无等待进程
- S<0则| S |表示S等待队列中的进程个数
1.6 信号量的使用
必须且只能置一次初值
初值不能为负数
只能执行P、V原语进行修改
1.7 AND型信号量
定义:AND型信号量是指同时需要多种资源且每种占用一个时的信号量操作。
基本思想:在一个原语中申请整段代码需要的多个临界资源,要么全部分配给它,要么一个都不分配。
AND型信号量集P原语为Swait
AND型信号量集V原语为Ssignal
2.1 管程机制
采用P-V同步机制来编写并发程序,对于共享变量及信号量变量的操作将被分散于各个进程中。
2.2 管程的概念
定义1:一个关于共享资源的数据结构,和能为并发进程执行的一组操作,这组操作能同步进程和改变管程中的数据。
定义2:管程是由局部于自己的若干公共变量及其说明和所有访问这些公共变量的过程所组成的软件模块。
管程的重要特征:任一时刻管程中只能有一个活跃进程。(可以有效实现互斥)
2.3 管程机制
示意图
3.1 生产者消费者问题
教材P123
3.2 哲学家就餐问题
教材P126
3.2 读者—写者问题
教材P129
关于信号量的内容是考试的重点,详读教材后写课后习题
这一章考大题-信号量,看大题例题,习题和考题