PV操作-单缓冲区生产者消费者问题
开始学操作系统,这个地方难住了。
首先说什么是PV操作,这里P、V、S分别代表什么?
S代表系统的资源
P操作:S=S-1;当S>=0时,可以继续P操作,即申请资源;S<0时,中断CPU,保留现场,进程变为阻塞状态,进程的PCB表放入等待队列中。(PCB表示什么也不是很懂?)
V操作:S=S+1;当S>0时,可以继续V操作,即释放资源,S<=0,从等待队列中唤醒一个进程,变成就绪状态,并将其PCB表插入就绪队列.
综上:P操作会引起进程阻塞;类比过来,V操作可以解封进程。
S1,市场中的产品,初始值为1.
S2,生产出来的产品,初始值为0.
生产者进程:
生产者生产一个产品;
P(S1);
送产品到缓冲区
V(S2);
个人对以上操作的理解:生产者生产完一个产品,消费者首先得申请市场(缓冲区)的产品,即P(S1),S1=S1-1;消费者申请完了,缓冲区里边没产品了,生产者再送自己的产品到市场(缓冲区)中,然后生产者自己再生产一个产品,即V(S2),也就是S2=S2+1;
消费者进程:
P(S2);
从缓冲区取一个产品;
V(S1);
消费者消费一个产品;
个人对以上操作的理解:消费者想从市场中买产品,市场中得有产品啊,即先把生产出来的产品放到市场中P(S2),S2=S2-1; 然后消费者从市场中取一个产品,此时市场中没产品了,需要释放出一个产品到市场中来,即V(S2),S2=S2+1;消费者把自己的产品再消费掉。
当缓冲区已满,生产者还想送产品到缓冲区,就让生产者休眠,待消费者从缓冲区取产品后再去唤醒生产者。同理,当缓冲区没有商品,消费者还想从缓冲区取产品,就让消费者休眠,待生产者向缓冲区放产品后,再去唤醒消费者。
以上就是一个PV操作的同步模型,还不是特别百分百的理解,其实以上都是从其他博客大牛中摘的精髓,作为一个外行,没学过操作系统的人,还需要继续学习,深入理解,也欢迎各位技术大牛给出指导,感谢