PV原理是用来解决操作系统进程之间的同步和互斥的.
同步:一补环境下的一组进程因相互制约而发送消息,进行互相合作互相等待.使各个进程按照一定的速度执行.
互斥:一组进程因为共享一个公共资源,必需保证同一时刻只有一个进程在使用临界资源.
举一个例子就是:
互斥就是很多人过一个独木桥,同时只能有一个人使用这个桥
同步就是两个人同时过一个桥,一个人骑车,一个人步行.但是两个人必需同时到达.这两个人同时出发,骑车的人的比较快,必需到一段等一下步行的人.保证他们相互制约着到达.
信号量:
代表并发进程可用资源数,小于零表示正在等待资源的进程数.
P操作:
将信号量减一,如何信号量(sem)为负数,则调用p操作的进程停止,直到另一个进程对同一信号量做v操作 .
V操作:
将信号量加一,如何信号量(sem)大于等于0则在与sem有关的队列中唤醒一个进程,让他执行.
这里通过一个例子来讲述PV操作不容易理解的地方.
这里的信号量Sn代表允许顾客人数
S1代表收银员收费
S2代表顾客付款
a:P(Sn) b1:V(S1) b2:P(S2) c1:P(S1) c2:V(S2)
分析说明:
我们不明白的一般都是c1 c2 b1 b2这几个代表什么
其实可以这么来判断:
有这几个原则:
1:互斥的信号量的PV操作在一个进程中出现 这里的Sn是互斥的,所以P(Sn)
V(Sn)都在顾客进程里面
2:同步的信号量的PV操作在两个进程之间交替出现,比如S1,S2在顾客和收营员直接交替出现.
3:个人观点:PV操作难点就是同步的进程之间的操作,这里同步的进程对同一信号量的操作,一定是先P,后V.P操作是使用资源,V操作是释放资源,进程一定是先使用资源,然后再释放资源.
这里就像是骑车的和步行的人,一开始他们都要走,只是走的过程中会出现彼此等待的情况,这就是说开始为什么是P操作了,因为P操作是使用资源,他们要走,所以使用资源.
4:P操作使信号量小于零以后,则停止当前进程,等另一个进程唤醒他,也就是给这个信号量加一.
5:当一个V操作结束后,一般认为,这个进程接下去执行,执行下一个P操作,这里指的是P(S2)操作,然后停止,等待收银员的V操作唤醒他.
这些是个人看法,欢迎大家指证