信号量与P、V操作--《操作系统》自学考试

信号量与P、V操作--《操作系统》自学考试

​ 关于《操作系统》书籍中第四章第三阶节信号量及P、V操作中对于课本中所讲概念不明白,在百度和博客上查资料后给出我自己的理解,供参考,如有错误请大佬帮忙指正。

书籍中的定义

  • 信号量:信号量是一种特殊的变量,它的表面形式上一个整形变量附加一个队列,且只能被P操作和V操作,P、V操作皆使用原语。

  • 信号量与P、V操作的功能是实现进程之间的同步、互斥。

  • 设信号量为S,S可以取不同的整数值,可以利用S的取值表示共享资源的使用情况,或用它表示协作进程间交换的信息。

  • P、V操作定义:

    P(S)
    {
      S = S-1; 
      //若S<0,将该进程状态设置为等待状态,然后将该进程的PCB插入相应的S信号量等待队列末尾,直到有其他进程在S上执行V操作为止
    }
    //-------------------------------
    V(S)
    {
      S = S+1;
      //若S <= 0,释放在S信号队列中等待的一个进程,将其状态改变为就绪态,并将其插入就绪队列;然后,执行本操作的进程继续执行。
    }
    

案例

  • 进程间的互斥操作

对于这样两个进程运行过程我们可以这样理解:

  • 首先两个进程是并行的,在第一行两个进程同时P操作时,只会有一个成功。假设A进程成功操作,使得S-1,这时S等于0,A进程被允许进入临界区操作。而B进程在进行P操作时S的值已经被变更为0,此时进程B执行P操作,S等于-1,B线程被设置为等待状态进入等待队列,不允许进入临界区。
  • 在进程A执行完临界区操作后,执行V操作使得S+1,此时S等于0,且释放一个等待队列中的B进程插入就绪队列。执行完后A进程继续运行。
  • B进程从就绪队列执行,进入临界区操作。操作完毕后执行V操作使得S+1,此时S等于1。执行完后B进程继续运行。

回顾整个过程,在初始竞争临界区资源时由于两个进程只有一个P操作能执行成功,便实现了一个进程使用临界资源,另一个等待信号。在其中一个进程使用完资源后使用V操作释放了资源并及时通知了另一个进程,另一个进程在插入就绪队列后立即使用临界资源,使用完毕后释放资源并使用V操作更改S的值。这样我们做到了两个进程互斥竞争资源,资源使用完毕后进程及时的通信和接管。

  • S的值的含义

    S不同的值代表了当前临界资源的可用数量和等待队列的进程数目

    在S=0时:代表当前可用资源为0,没有资源可以分配。

    在S=-1时:表示没有资源可以分配,等待队列有1个进程。

    在第二次S=0时:代表当前可用资源为0,此时临界资源已经分配给B进程。

    在S=1时:表示当前可用资源为1,此时B进程已完成操作释放了1个资源。

    每执行一次P操作,意味着请求的进程分配到一个资源;每执行一次V操作意味着进程释放了一个资源。
    对于信号量S,常常用作同步时初始值为0,用作互斥时初始值为1。

posted @ 2021-02-02 01:28  pikaaa  阅读(576)  评论(0)    收藏  举报