您现在的位置:学赛首页 > 研究生院 > 软件学院 > 正文
操作系统第四章-进程同步与通信[4]
http://www.educity.cn 作者:研究生院 来源:学赛网 2008年4月22日 发表评论 进入社区

  进程p0的其他代码;

  }

  算法4的描述(续)

  p1: while (true)

  {

  flag[1]=true;

  turn=0;

  while (flag[0] && turn = = 0);

  进程p1的临界区代码cs1 ;

  flag[1]=false ;

  进程p1的其他代码;

  }

  4.3 同步与互斥的基本工具--信号量

  信号量是由荷兰科学家Dijkstra提出的,是一种卓有成效的进程同步机制。

  信号量的定义

  信号量是一个记录型数据结构,包含信号量值和一个等待队列,其中信号量值是一个具有非负初值的整型变量,等待队列是一个初始状态为空的队列。又称信号灯。

  除信号量的初值外,信号量的值仅能由P操作(又称为wait操作)和V操作(又称为signal操作)改变。

  信号量的物理含义

  信号量中的整型变量S表示系统中某类资源的数目。

  当其值大于0时,表示系统中当前可用资源的数目;

  当其值小于0时,其绝对值表示系统中因请求该类资源而被阻塞的进程数目。

  P操作

  设S为一个信号量,P(S)执行时主要完成下述动作:

  S=S-1;

  if(S< 0) {设置进程状态为等待;

  将进程放入信号量等待队列;

  转调度程序;}

  V操作

  V(S)执行时主要完成下述动作:

  S=S+1;

  if(S≤0){将信号量等待队列中的第一个进程移出;

  设置其状态为就绪状态并插入就绪队列;

  然后再返回原进程继续执行;}

  注意

  P操作可能阻塞执行进程,而V操作可以唤醒其他进程。

  P、V操作在封锁中断的情况下执行,即一个进程在信号量上操作时,不会有别的进程同时修改该信号量。也就是说P、V操作是原语。

  3. 利用信号量实现互斥

  设S为两个进程P1、P2实现互斥的信号量,S的初值应为1(即可用资源数目为1)。只需把临界区置于P(S)和V(S)之间,即可实现两进程的互斥。

  互斥访问临界区的描述

  进程P1: 进程P2:

[1]  [2]  [3]  [4]  [5]  [6]  [7]  [8]  [9]  [10]