操作系统第2节第二节.ppt

  1. 1、本文档共54页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
什么是信号? P、V操作 信号量是OS用来管理进程互斥或同步使用资源的一个手段。进程申请资源能否成功取决于对信号量的Wait操作的结果。 相当于进入临界区之前先看是否有可用钥匙。有则拿一把开锁,出来时再归还钥匙。 板书分析三个进程互斥进入临界区的过程 并发执行的进程P1和P2中,分别有代码C1和C2,要求C1在C2开始前完成。 //表示进程是否执行完 用一个信号量能实现同步吗 同步信号量表示该进程是否可以开始或该进程是否已经结束。 单缓冲区的同步问题 P进程不能往“满”的缓冲区中放产品,设置信号量为empty C进程不能从“空”的缓冲区中取产品,设置信号量full empty初值为1,full初值为0 单缓冲区的互斥问题 P、C进程不能同时使用缓冲区 在多道程序环境下,进程同步问题十分重要,出现一系列经典的进程同步问题,其中有代表性有: 它是一个同步问题: (1)消费者想要取产品,有界缓冲区中至少有一个单元是满的。 (2)生产者想要放产品,有界缓冲区中至少有一个是空的。 它是一互斥问题: 有界缓冲区是临界资源,因此,各生产者进程和各消费者进程必须互斥访问。 仔细考虑两个P操作之间的内在关系可以看到存在这样的一个逻辑关系:如果对整个缓冲器有操作权(即缓冲器还有空位置)的话,则可对某个缓冲器操作.“如果? ”是前提条件。“则? ”是结论.这两个P操作的执行顺序就是根据它们的逻辑顺序来决定执行次序. 利用信号量实现前驱关系 P1 P2 三、信号量的应用 设置一个信号量S,S=0 P1; V(S); P(S); P2; 如此即可实现先执行P1,再执行P2 为每个前趋关系设置一个同步信号量,其初值为0 三、信号量的应用 例: 程序前趋图如图所示,试用P、V操作实现其同步。 var a,b,c,d:semaphore:=0,0,0,0; begin cobegin s1; s2; s3; s4; coend; end; s1 s2 s3 s4 a b c d s1: begin …; v(a); end; s2: begin … v(b); v(c); end; s3: begin p(a); p(b); … v(d); end; s4: begin p(c); p(d); ... end; 利用信号量实现前驱关系 三、信号量的应用 思考: 已知一个求值公式(A2+3*B)/(B+5*A), 若A、B已赋值,画出该公式求值过程的前趋图 利用信号量实现前驱关系 三、信号量的应用 利用信号量实现同步 生产者-消费者问题的单缓冲区情况:有A、B两个进程和一个缓冲区,A负责将信息存入缓冲区,B负责取走缓冲区中的信息进行加工。如何利用信号量实现进程同步? 消费者 生产者 三、信号量的应用 利用信号量实现同步 解:设两个同步信号量。S1:缓冲区是否满,初值为0;S2:缓冲区是否空,初值为1 三、信号量的应用 进程同步问题的解题思路 有几类同步进程,就设几个同步信号量。 设定信号量初值。 同一信号量的P、V操作要成对出现,但分别在不同进程的代码中。 2.4 经典进程的同步问题 生产者—消费者问题 生产者与消费者互斥访问公用数据缓冲区 生产者生产“数据”,消费者消费“数据” 哲学进家餐问题 读者—写者问题 1、“生产者—消费者”问题 多缓冲区的生产者—消费者问题描述 一组生产者向一组消费者提供消息,它们共享一个有界( k 个)缓冲池,生产者向其中投放消息,消费者从中取得消息。任何时刻只能有一个进程可对共享缓冲池进行操作。 1、“生产者—消费者”问题 P C C P P C P C 1、“生产者—消费者”问题 多缓冲区的同步互斥问题 同步:当缓冲池已放满了产品时(供过于求),生产者进程必须等待;当缓冲池已空时(供不应求),消费者进程应等待。 互斥:所有进程应互斥使用缓冲池这一临界资源。 多缓冲区的生产者─消费者问题解法 1、“生产者—消费者”问题 设置两个同步信号量及一个互斥信号量 empty:空缓冲单元的数目,其初值为k。 full:满缓冲单元的数目(即产品数目),其初值为0。 mutex: 所有进程都是互斥访问缓冲池的,所以设一个互斥信号量mutex,初值是1,表示缓冲池的访问权,整个缓冲池是一个临界资源。 1、“生产者—消费者”问题 多缓冲区的生产者─消费者问题解法 思考:P操作的顺序可换吗? “生产者—消费者”问题的算法描述: Var mutex, empty, full : semaphore : = 1, n, 0; buffer : array[0,…,k-1] of item; in,

文档评论(0)

xuefei111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档