操作系统汤子英课件第三章进程同步.pptVIP

操作系统汤子英课件第三章进程同步.ppt

  1. 1、本文档共142页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
操作系统汤子英课件第三章进程同步

第三章 进程同步与通信 ;回顾操作系统的特性: 并发 资源共享 异步性(不确定性 或 随机性) 虚拟性;3.1 进 程 同 步 (重点);3.1. 1 进程同步的基本概念 ;进程互斥—资源共享关系(间接相互制约关系) 进程本身之间不存在直接联系。 处于同一系统中的进程,必然是共享着某种系统资源,如共享CPU、I/O设备。 例如,在仅有一台打印机的系统中,有两个进程A和B,如果在A进程提出打印请求时,系统已将打印机分配给进程B,则系统让A进程等待,直至B将打印机用完并释放后,系统才将打印机分配给进程A。;进程同步—相互合作关系(直接相互制约关系) 进程本身之间存在着相互制约的关系。 例如,有一输入进程A通过单缓冲向进程B提供数据。当该缓冲空时,计算进程B因不能获得所需数据而等待。 当进程A把数据送入缓冲时,便应向进程B发送一信号,将它唤醒; (接力棒) ;2. 临界资源(Critical Resouce) ;进程间的关系——进程间并发举例;例2 ;进程间的关系——并发执行举例 例3:与进程的执行顺序有关的错误;进程间的关系——并发执行举例 例3:与进程的执行顺序有关的错误;进程间的关系——并发执行举例 例3:与进程的执行顺序有关的错误 正确执行顺序; 例4 生产者—消费者问题(Producer-Consumer) 有一个生产者进程和一个消费者进程。他们共享一个缓冲区。 生产者进程每生产一件物品就要存入缓冲区,但缓冲区每次只能存放一件物品,只有消费者取走物品,才能放入第二件物品。 缓冲区中有物品消费者进程就可以去取,每取走一件物品后必须等生产者再放入物品后才可以去取。 生产者进程与消费者进程是以异步方式进行的,但它们之间必须保持同步; 即不允许消费者进程到一个空缓冲区去取产品,也不允许生产者进程向一个装满产品的缓冲区中投放产品。;生产者进程 Buffer:interger Processer producer Begin L1:produce a product; Buffer:=product; go to L1 end ; 生产者—消费者问题(Producer-Consumer) 有一群生产者进程在生产产品,并将产品提供给消费者进程去消费, 为使生产者进程和消费者进程能并发执行,在他们之间设置了一个具有n个缓冲区的缓冲池,生产者进程将他所生产的产品放入一个缓冲区中; 消费者进程可从一个缓冲区中取走产品去消费。 生产者进程与消费者进程是以异步方式进行的,但它们之间必须保持同步; 即不允许消费者进程到一个空缓冲区去取产品,也不允许生产者进程向一个装满产品的缓冲区中投放产品。;in; 1、用一个数组来表示上述的具有n个缓冲区的缓冲 池,用0,1,…,n-1表示。 2、用输入指针in来指示下一个可投放产品的缓冲,每当生产者投放一个产品,输入指针加1; 3、用输出指针out来指示下一个可从中获取产品的缓冲区,每当消费者进程取走一个产品后,输出指针加1。 这里的缓冲池是组织成循环缓冲的,故应 把输入指针加1表示成in:=(in+1)modn; 把输出指针加1表示成out:=(out+1)modn. 当(in+1)=out时表示缓冲池满; in=out时表示缓冲池空。; 还引入一个整型变量counter,初值为0, 生产者进程向缓冲池投放一个产品后,counter加1; 消费者进程从中取走一个产品时,使counter减1; 生产者和消费者共享下面的变量: var n:integer; type item=…; var buffer:array[0,1,…,n-1] of item; in,out:0,1,…,n-1; counter:0,1,…,n-1; ;producer: repeat … produce an item in nextp; … while counter=n do no_op; buffer[in]=nextp; in:=(in+1)modn; counter=counter+1; until false;; 虽然上面的生产者程序和消费者程序,在分别看时都是正确的,而且两者在顺序执行时其结果也会是正确的,但若并发执行时

文档评论(0)

jdy261842 + 关注
实名认证
文档贡献者

分享好文档!

1亿VIP精品文档

相关文档