一、PV操作与进程互斥
问题的提出
{
TS或SWAP指令管理临界区,采用忙式轮询,效率低
光开中断管理临界区,不便交给用户程序使用
}
1.信号量的概念
一种可动态定义的软件资源:信号量
核心数据结构:操作系统帮忙建立等待进程队列
信号量声明:资源报道,建立队列
申请资源的原语:若申请不得,调用进程入队等待
归还资源原语:操作系统会检测等待队列中有没有等待这个资源的进程,如果有等待这个临界区的进程,操作系统将会释放
信号量撤销:资源注销,撤销信号量
2.记录型信号量
定义:一种带数值的软资源
typedef struct semaphore
{
int value;//信号量值
struct pcb*list;//信号量等待进程队列指针
}
每个信号量建立一个等待进程队列和一个辅助值(整数)
正值表示资源可复用次数(若为临界区则肯定为1)
0值表示资源已不可用且无进程等待使用此资源
负值表示等待队列进程个数
3.PV操作原语
PV操作解决进程互斥问题框架
P操作原语用于申请一个资源,V操作原语用于归还一个资源
例:
procedure P(semaphore:s)
{
s=s-1;//信号量减去一
if(s<0)R(s)//若信号量小于0,则调用进程被置成等待信号量s的状态
}
procedure V(semaphore:s)
{
s=s+1 //信号量加一
if(s<=0) R(s)//若信号量小于等于0,则释放一个等待信号量S的进程
}
4.PV操作解决进程互斥
P操作与V操作在执行路径上必须一一匹配。
二、PV操作与进程同步
PV操作解决进程同步的方法
进程同步:并发进程为完成共同任务基于某个条件;唉协调执行先后关系而产生的协助制约关系
一个进程 的执行等待来自于其他进程的消息。也就是说他们的执行有先后次序
解决的基本思路
定义一个信号量:其数值代表可用消息数
等待消息进程:执行P,无消息则等待
发出消息进程:执行V,有等待进程则释放
三、管程概述
1.管程的基本概念
管程试图抽象相关并发进程对共享变量访问,以提供一个友善的并发程序设计开发环境
管程是由若干公共变量及其说明和所有访问这些变量的过程所组成。
管程把分散在各个进程中互斥地访问公共变量的那些临界区集中起来管理,管程的局部变量只能由该管程的过程存取的 程序单位
进程只能互斥地调用管程中的过程
管程的基本形式
2.管程与条件变量
条件变量:当调用管程过程的进程无法运行时,用于阻塞进程的信号量
同步原语wait:当一个管程过程发现无法继续时(如发现没有可用资源时),它在某些条件变量上执行wait,这个动作引起调用进程阻塞。
同步原语signl:用于释放在条件变量上阻塞的进程
3.管程的执行模型
四、霍尔管程
1.管程实现的霍尔方法
使用signal释放一个等待进程时,霍尔管程让执行signal的进程等待,直到被释放进程退出管程或等待另一个条件
{
霍尔管程基于PV操作原语实现
wait和signal可以是程序过程
可以用语言机制实现霍尔过程
以上三点可以使霍尔管程可以直接基于OS的PV操作原理做出了而不需要扩展OS内核
}
霍尔管程的条件变量
霍尔管程的程序过程