系统中应该有解决进程同步的一种专门机制。实际上,同步是并发进程之间在执行时序 上的一种相互制约的关系。进程互斥的实质也是同步,可把进程互斥看作是一种特殊的进程同步。

同步机制应该满足如下一些基本要求。首先,它的描述能力应足够强,即能解决各种进 程间同步互斥问题;其次,该同步机制应该容易实现并且效率高;第三,使用方便。

同步机制有各种类型,有硬件同步机制;有软件同步机制,如信号量及P、V操作,管 程,条件临界域等;有用于集中式系统中的路径表达式;还有适用于分布式系统中的远程过 程调用等同步机制。

这里我们主要介绍用于进程同步的信号量以及P、V操作。

一、信号量

用常规的程序来实现进程之间同步、互斥关系需要复杂的算法,而且会造成“忙等待”,浪费处理器资源,为此引人信号量的概念。信号量是一种特殊的变量,它的表面形式 是一个整型变量附加一个队列;而且,它只能被特殊的操作(即P操作和V操作)使用。P操作和V操作都是原语

荷兰的著名计算机科学家Dijkstm把进程互斥的关键含义抽象成为信号量(Semaphore) 概念,并引入了在信号量上的P、V操作作为同步原语(P和V分别是荷兰文的“等待”和 “发信号”两词的首字母)。这里,信号量是个被保护的量,只有P、V操作和信号量初始化操作才能访问和改变它的值

设信号量为S,S可以取不同的整数值。可以利用信号量S的取值表示共享资源的使用情况,或用它来指示协作进程之间交换的信息。在具体使用时,把信号量S放在进程运行的 环境中,赋予其不同的初值,并在其上实施P操作和V操作,从而实现进程间的同步与互斥。对信号量S实施的P操作和V操作,可分别用P (S)和V (S)表示。

二、P、V操作

P操作和V操作定义如下:

P (S)

{

S=S-1;

若S<0,将该进程状态置为等待状态,然后将该进程的PCB插入相应的S信号量等待 队列末尾,直到有其他进程在S上执行V操作为止;

}

V (S)

{

S = S + 1 ;

若S<=0,释放在S信号量队列中等待的一个进程,将其状态改变为就绪态,并将其插 入就绪队列;然后,执行本操作的进程继续执行;

}

三、信号量与P、V操作的物理含义

P操作和V操作是对信号量S进行的,有关信号量S和P、V操作的物理含义可以进一 步说明如下。

信号量S表示某类可用的临界资源。对于不同的临界资源,则用不同的信号量表示。

当S>0时,S值的大小表示某类可用资源的数量,即表示有该类资源可以分配。

当S<0时,表示没有可分配的资源数量,其S的绝对值表示排在S信号量的等待队列 中进程的数目。

每执行一次P操作,意味着请求的进程分配到一个资源;每执行一次V操作,意味着 进程释放了一个资源。

四、用P、V操作实现进程之间的互斥

这里叙述用P、V操作解决进程之间的互斥问题。

假设有进程A、B竞争进入临界区,用P、V操作实现进程之间的互斥的程序可以写成:

进程A

P(S)

临界区操作

V(S);

进程B

P(S);

临界区操作;

V(S);

其中,S的初值为1

五、用P、V操作实现进程间的同步

考虑一种同步关系,其中有两个信号量S1和S2,赋予它们的初值均为0, S1表示在一个缓冲区中是否装满信息,S2表示该缓冲区中信息是否取走。程序可写成:

进程A

while(true){

把信息送入缓存区;

V(S1);

P(S2);

};

进程B

while(true){

P(S1);

把信息从缓存区取走;

V(S2);

};

又如,有三个进程:进程get从输人设备上不断读数据,并放人缓冲区buffer1;进程 copy不断地将缓冲区buffer1的内容复制到缓冲区buffer2; 进程put则不断将buffer2的内容 在打印机上输出。为了使三个进程并行工作以大大加快执行速度,又保证打印结果和输人内 容一致,三个进程之间必须协调工作。需设置四个信号量 S1,S2, S3,S4,并令S1初值 为1,S2初值为0, S3初值为0, S4初值为1。则程序可以写成:

//进程get

while(true){

P(S1);

从输入设备向缓冲区buffer1读数据;

V(S2);

};

//进程copy

while(true){

P(S2);

P(S4);

将buffer1的内容复制到buffer2;

V(S1);

V(S3);

};

//进程put

while(true){

P(S3);

将缓冲区 buffer2内容在打印机上输出;

V(S4);

};

六、信号量及P、V操作小结

需要指出的是,P、V操作虽然逻辑上完整,能比较有效地实现进程同步与互斥问题, 但它也有明显的弱点:由于P或V操作每次只做加1或减1运算,即每执行一次P操作只能请求分配一个单位的资源,每执行一次V操作只释放出一个单位的资源,因此,如果一 个进程需要一次使用多个资源,就需要连续执行多次P操作,释放这些资源时也需多次执行V操作。这不仅增加了程序的复杂性,也降低了通信效率,致使进程之间需要相互等待很长的时间,甚至有可能导致死锁的发生

P、V操作在使用时必须成对出现,有一个P操作就一定有一个V操作。当为互斥操作 时,它们同处于同一进程;当为同步操作时,则不在同一进程中出现。

如果进程中P (S1和P (S2)两个操作在一起,那么P操作的顺序至关重要,尤其是 一个同步P操作与一个互斥P操作在一起时,同步P操作应出现在互斥P操作前。而两个V 操作的顺序无关紧要。

总而言之,信号量及P、V操作简单,而且表达能力强,用P、V操作可解决任何进程同步互斥问题。但P、V操作使用时不够安全,特别是P、V操作使用不当会出现死锁;此外遇到复杂同步互斥问题时用P、V操作实现也很复杂。

操作系统中的信号量及P、V操作相关推荐

  1. 临界资源、临界区、信号量、P,V操作

    一.资源: Linux上有硬件资源和软件资源之分.程序会受到资源限制的影响,可能在这几方面的资源限制受到影响:1.硬件方面的物理性限制(内存):2.系统策略的限制(允许使用的CPU时间):3.具体实现 ...

  2. vp操作 信号量_信号量P,V操作

    2013-07-22 20:20:30 信号量是最早出现的用来解决进程同步与互斥问题的机制(也可实现进程通信),包括一个称为信 号量的变量及对它进行的两个原语操作.信号量为一个整数,我们设这个信号量为 ...

  3. 信号量——P、V操作、临界资源、临界区、进程同步

    1.信号量 用来同步进程的特殊变量:一个特殊的计数器,大于0时记录资源的数量,小于0时记录等待资源的进程的数量.当信号量的值大于0时,进程总是可以获取到资源并使用,小于0 时,进程必须阻塞等待有其他进 ...

  4. 操作系统中四步法实现PV操作

    操作系统中,为了避免进程的死锁,给出了一种有效的控制算法----PV操作.PV操作是一种在利用PV操作实现进程的同步与互斥时,确保进程不会产生死锁和错误的算法.同学们在学习之初往往不知如何下手,如何确 ...

  5. c语言p,用C语言实现P、V操作

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 操作系统中关于信号量操作的代码示例(Linux+windows) 原文:操作系统中关于信号量操作的代码示例(Linux+windows) 有一个生产者进程 ...

  6. c语言 pv操作,用C语言实现P、V操作

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 操作系统中关于信号量操作的代码示例(Linux+windows) 原文:操作系统中关于信号量操作的代码示例(Linux+windows) 有一个生产者进程 ...

  7. v操作就是计算机结构中的什么作用,PV操作

    PV操作是一种实现进程互斥与同步的有效方法.PV操作与信号量的处理相关,P表示通过的意思,V表示释放的意思. PV操作是典型的同步机制之一.用一个信号量与一个消息联系起来,当信号量的值为0时,表示期望 ...

  8. 信号量机制与PV操作的理解

    目录 基本概念 PV操作处理相关问题 正确理解信号量机制 基本概念 信号量机制是一种有效的进程同步和互斥工具.信号量有整形信号量.记录型信号量.二进制信号量等.常用整型信号量实现PV操作.P操作表示申 ...

  9. 操作系统信号量与P、V操作 初步认识整理

    初步接触,若有不足之处,请各位不吝赐教.谢谢! 首先介绍:信号量 信号量包括整型信号量.结构型信号量.二值信号量. ① 整型信号量 最初,将信号量定义为一个共享的整型量,它保存可供使用的唤醒数目.如果 ...

最新文章

  1. VB随笔 -基本语句之循环语句
  2. JAVA入门[17]-ControllerAdvice处理exception
  3. 9岁印度女孩成为最年轻微软认证专家
  4. 成功案例_网络营销成功案例分析
  5. KUKA profesafe
  6. 成员函数后面加上const的作用
  7. 计算机综合应用能力试题,计算机综合应用能力实训
  8. 基于Echarts+HTML5可视化数据大屏展示—大数据管理平台中心(二)
  9. python绘制如下图形、小三角形边长20_python二级操作题与分析(7)
  10. JMS学习十 ActiveMQ支持的传输协议
  11. python xlwings 切片_Python xlwings库学习笔记(1)
  12. exc_bad_access(code=1, address=0x789870)野指针错误
  13. 利用ICallbackEventHandler接口实现Ajax效果
  14. [转载] python十个程序_程序猿开发Python的十个基本入门技巧?
  15. andriod之配置文件保存与读取
  16. 极简主义下,Effie与幕布的碰撞,思维导图的正确打开方式?
  17. 计算机地图制图符号制作的心得,计算机地图制图实习报告.docx
  18. 程序员为了讨好大舅子,竟自学自动化编程
  19. 弹性公网IP ping不通?
  20. 利用软路由,轻松实现宽带叠加,已达到千兆网速的效果

热门文章

  1. jsd2205-csmall-passport(Day13)
  2. “天罡”霸气侧漏,华为5G长驱直入
  3. 苹果白屏一直显示苹果_苹果6白屏如何解决,iPhone6白苹果开不了机怎么办
  4. 面试:MySQL篇,详尽知识点总结
  5. 炼石白小勇:合规与实战推动密码产业发展
  6. 云计算day04-Docker容器
  7. 1+X 云计算运维与开发(中级)案例实战——搭建harbor私有仓库并实现主从同步
  8. 订酒店接口 携程酒店在线预订
  9. python 重试—retry库的使用和自定义超时retry
  10. 【解决方法】Mac book 外接显示器后,笔记本没声音