同步和互斥
2019-04-17 本文已影响0人
菜根小友
同步和P-V操作
- 同步和互斥的概念
- P-V操作的概念
- P-V操作解决互斥问题
- P-V操作解决同步问题
- 经典同步问题
4.5.1 同步和互斥的概念
1. 进程的互斥关系
- 多个进程由于共享了独占性资源,必须协调各进程对资源的存取顺序:确保没有任何两个或以上的进程同时进行存取操作
- 互斥和资源的共享有关
- 资源:临界资源
- 存取操作区域:临界区
2. 进程的同步关系
- 若干合作进程为了完成一个共同的任务,需要相互协调运行步伐:一个进程开始某个操作之前必须要求另一个进程已经完成某个操作,否则前面只能等待。
4.5.2 P-V操作概念
- 信号灯的概念
信号灯是一种桌有成效的同步机制。
进程在运行过程中受信号灯控制,并能改变信号灯状态
- 进程受控制:信号灯的状态可以阻塞或唤醒
- 改变信号灯:信号灯的状态可以被进程改变
信号灯的数据结构
- 信号灯变量定义为一个二元矢量(S,q)
- S:整数,初值非负(S又称为信号量)
- q:PCB队列,初值为空
struct SEMAPHORE
{
int S; //整数,初值非负
pointer_PCB q;
}
两个操作
- P操作(函数或过程,P(S,q))
- S-1
- 若差大于或等于0,该进程继续
- 若差小于0,则该进程阻塞并加入到队列q中,并转调度函数
P(S,q){
S=S-1;
if(S<0){
Insert(Caller,q);
Block(Caller);
转调度函数;
}
}
- V操作(函数或过程,V(S,q))
- S值加1
- 若和大于零,该进程继续
- 若和小于或等于零,该进程继续同时从q中唤醒一个进程
V(S,q){
S=S+1;
if(S<0){
Remove(q,pid); //pid:进程ID
Wakeup(pid);
}
}
4.5.3 P-V操作解决互斥问题
实质是实现对临界区的互斥访问,允许最多1个进程处于临界区。
应用进程:
- 进入临界区之前先执行P操作
-
离开临界区之后再执行V操作
image.png
P-V操作解决同步问题
同步机制实质:
- 运行条件不满足时,能让进程暂停
- 运行条件满足时,能让进程立即继续
P-V操作应用于进程同步的基本思路
- 暂停当前进程:在关键操作之前执行P操作
- 必要时可暂停
- 继续进程:在关键操作之后执行V操作
- 必要时唤醒合作进程
- 定义有意义的信号量S,并设置合适的初值
- 信号量能明确地表示运行条件