信号灯和P\V操作原语
在复习操作系统进程及进程管理这一章节的时候,对信号灯和P、V操作有点不理解,于是尝试用生活中的例子来解释一下。
首先,简单介绍一下信号灯,及其特点
信号灯为一个二元组(s,q),s为一个初值>=0的整型变量,q为一个初始空队列。
当变量值>0,表示绿灯,进程执行;
当变量值<=0,表示红灯,进程等待,停止执行。
再介绍一下P、V原语
进程对信号灯s进行P(s)操作,
信号灯s变量值自减1后,
若s>=0绿灯,执行;若s<=0红灯,进程进入等待队列
进程对信号灯进行V(s)操作,
信号灯s变量值自增1,
若s>0绿灯,执行;若s<=0红灯,将等待队列中首元素进程转入就绪队列,置为"就绪状态"
然后,我准备用一个停车场来模拟P、V操作,如下:
假想信号灯为停车厂,s表示当前的空位
-
当s>0时,表示有剩余的停车位
-
当s=0时,表示停车场里停满了,同时外面也没有车在等
-
当s<0时,表示停车场里停满了,但是外面还有车在等
此时,P操作代表进车,V代表出车,
-
执行P操作时,(管你有没有车位)首先将停车位s减1,若s>=0,表示还有停车位,顺利通过;若s<0,表示没有了停车位,车滚去排队。
-
执行V操作时,首先将停车位s加1,若s还是<=0,说明外面还有车在等,需要唤醒第一辆车,也就是等待队列的首元素进程;若s>0,直接顺利出车即可。