操作系统-PV操作

来源:互联网 发布:网络综艺访谈节目 编辑:程序博客网 时间:2024/06/04 18:25

在多道程序环境下,进程是并发执行的,不同进程之间存在着不同的相互制约的关系。协调进程之间的相互制约的关系,即为进程同步

信号量机制可用来解决互斥与同步的问题,P,V操作与信号量的处理有关,P表示申请,V表示释放。在操作系统中,P,V操作是一种低级进程通信原语,原语是指完成某种功能且不被分割不被中断执行的操作序列。

P,V操作

定义

  • P(S):S=S-1
    如果S大于等于0,则该进程继续执行,如果S小于0,则该进程阻塞,并放入等待队列中
  • V(S):S=S+1
    如果S大于0,则该进程继续执行,如果S小于等于0,则唤醒等待队列中的一个进程
    (这里判断S是否大于0都是在执行PV操作之前判断,即先判断再加1或减1)

使用P,V操作实现进程同步

设S为实现进程P1,P2同步的公共信号量,初值为0。进程P2中的语句要使用进程P1中语句x的运行结果,所以只有当语句x执行完成之后语句y才能执行。其实现进程同步的算法如下:

semaphore S=0;  //初始化信号量P1(){    ...    x;          //语句x    V(S);       //告诉进程P2,语句x已经完成,S++    ...}P2(){    ...    P(S);       //检查语句x是否运行完成,S--    y;          //检查无误,运行y语句    ...}

若P2先执行到P(S)时,S为0,执行P操作会使进程P2阻塞,并放入等待队列中,当进程P1执行V(S)操作后,再把P2从阻塞队列放入就绪队列,等待处理机调度执行。


使用P,V操作实现进程互斥

设S为实现进程P1,P2互斥的信号量,由于每次只允许一个进程进入临界区,所以S的初值为1(即可用资源为1)。只需把临界区置于P(S)和V(S)之间,即可实现进程对临界资源的互斥访问。其实现进程互斥的算法如下:

semaphore S=0;  //初始化信号量P1(){    ...    P(S);       //请求访问临界资源,S--    进程P1的临界区;    V(S);       //访问结束,S++    ...}P2(){    ...    P(S);      //请求访问临界资源,S--    进程P2的临界区;    V(S);      //访问结束,S++    ...}

当没有进程再临界区时,任意一个进程要进入临界区会执行P操作,把S的值减为0,然后进入临界区,而当有进程存在于临界区时,S的值为0,再有进程请求进入临界区时,执行P操作会被阻塞,进入等待队列,直到有进程退出临界区,这样便实现了进程的互斥。(临界区是指进程用于访问临界资源的那段代码)

原创粉丝点击