进程的互斥关系:
- 多个进程由于共享了独占性资源,必须协调各进程对资源的存取顺序:确保没有任何两个或以上的进程同时进行存取操作
- 互斥与资源共享相关
- 资源:临界资源
- 存取操作区域:临界区
进程的同步关系:
- 若干合作进程为了完成一个共同的任务,需要相互协调运行步伐:一个进程开始某个操作之前必须要求另一个进程已经完成某个操作,否则前面的进程只可以等待
- 另一种解释:
- 合作进程中某些操作之间需要满足某种先后关系或某个操作能否进行需要满足某个前提条件,否则只能等待
- 互斥关系属于特殊的同步关系
PV操作: p(s,q) --> p(s),v(s);
s:代表信号量
q:进程PCB指针,初值空集
- p操作:p(s)的原理
- s值减一
- 若差大于或等于0,该进程继续
- 若差小于0,该进程进入阻塞并加入到队列q中,并转调度函数
- 注意:p操作可能使进程在调用处阻塞;s初值很重要 - v操作:v(s)的原理
- s值加一
- 若和大于0,该进程继续
- 若和小于等于0,该进程继续同时从q中唤醒一个进程
- 注意:v操作可能会唤醒阻塞的进程
P-V操作解决互斥问题:
- 实质是实现对临界区的互斥访问:允许最多1个进程处于临界区
- 应用过程:
- 进入临界区之前先执行P操作;(可能阻塞当前进程)
- 离开临界区之后再执行V操作;(可能唤醒某个进程)
- S的初值设置要合理
P-V操作实现同步问题:
关键操作之前P操作
关键操作之后V操作
区分关键操作或运行条件或影响
- 同步机制实质:
- 运行条件不满足时,让进程暂停
- 运行条件满足时,让进程立即继续 - P-V操作应用于进程同步的基本思路
- 暂停当前进程:在关键操作之前执行P操作:必要时可暂停
- 继续进程:在关键操作之后执行V操作:必要时唤醒合作进程
- 定义有意义的信号量S,并设置合适的初值:信号量s能明确的表示“运行条件”
同步的例子: