今天看啥  ›  专栏  ›  itczt

操作系统学习笔记(十四)

itczt  · 简书  ·  · 2019-04-25 15:42

同步和P-V操作:P-V操作的概念

信号灯的概念

信号灯是一种卓有成效的进程同步机制。
1965年荷兰学者Dijkstra(迪科斯彻)提出



信号灯用于进程同步的基本思想

进程在运行过程受信号灯状态控制,并能改变信号灯状态

  • 进程受控制:信号灯的状态可以阻塞或唤醒进程。
  • 改变信号灯:信号灯的状态可以被进程改变。

信号灯机制

信号灯数据结构

  • 信号灯变量定义为一个二元矢量(S,q)。
  • S:整数,初值非负。
  • q:PCB队列,初值为空集。
struct SEMAPHORE
{
    int s; //整数,初值为负
    Pointer_PCB;//队列:进程PCB指针,初值空集
}

信号灯操作

两个操作

  • P操作(函数或过程,P(S,q))
  • V操作 (函数或过程,V(S,q))

P,V是荷兰语:Passeren通过,Vrijgeren释放

P操作的原理(P(S,q),P(S))

  • S值减一;
  • 若差大于或等于零,该进程继续;
  • 若差小于零,则该进程阻塞并加入到对列q中,并转调度函数
P(S,q)
{
   S=S-1;
   if(S<0)
     {
       Insert(Caller,q);
       Block(Caller);
       转调度函数();
    }
}
提示:P操作可能使进程调用处阻塞。
提示2:S初值很重要!

V操作的原理

  • S值加一
  • 若和大于零,该进程继续;
  • 若和小于或等于零,该进程继续同时从q中唤醒一个进程。
V(s,q)
{
    S=S+1;
    if(S<=0)
      {
        Remove(q,pid);//pid进程ID
        Wakeup(pid);
      }
}
提示:V操作可能会唤醒阻塞的进程



原文地址:访问原文地址
快照地址: 访问文章快照