实习5 生产者-消费者问题实现.pptxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验五 生产者-消费者问题实现; 模拟操作系统中进程同步和互斥。; 熟悉临界资源、信号量及PV操作的定义与物理意义 了解进程通信的方法 掌握进程互斥与进程同步的相关知识 掌握用信号量机制解决进程之间的同步与互斥问题 实现生产者-消费者问题,深刻理解进程同步问题; 在Linux操作系统下用C实现经典同步问题:生产者— 消费者,具体要求如下: (1)一个大小为10的缓冲区,初始状态为空。 (2)2个生产者,随机等待一段时间,往缓冲区中添加数 据,若缓冲区已满,等待消费者取走数据之后再添加,重 复10次。 (3)2个消费者,随机等待一段时间,从缓冲区中读取数 据,若缓冲区为空,等待生产者添加数据之后再读取,重 复10次。;提示 本实验的主要目的是模拟操作系统中进程同步和互斥。在 系统进程并发执行异步推进的过程中,由于资源共享和进程间 合作而造成进程间相互制约。进程间的相互制约有两种不同的 方式。 (1)间接制约。这是由于多个进程共享同一资源(如CPU 、共享输入/输出设备)而引起的,即共享资源的多个进程因 系统协调使用资源而相互制约。 (2)直接制约。只是由于进程合作中各个进程为完成同一 任务而造成的,即并发进程各自的执行结果互为对方的执行条 件,从而限制各个进程的执行速度。 ; 生产者和消费者是经典的进程同步问题,在这个问题中 ,生产者不断的向缓冲区中写入数据,而消费者则从缓冲区 中读取数据。生产者进程和消费者对缓冲区的操作是互斥, 即当前只能有一个进程对这个缓冲区进行操作,生产者进入 操作缓冲区之前,先要看缓冲区是否已满,如果缓冲区已满 ,则它必须等待消费者进程将数据取出才能写入数据,同样 的,消费者进程从缓冲区读取数据之前,也要判断缓冲区是 否为空,如果为空,则必须等待生产者进程写入数据才能读 取数据。; 在本实验中,进程之间要进行通信来操作同一缓冲区。 一般来说,进程间的通信根据通信内容可以划分为两种:即 控制信息的传送与大批量数据传送。有时,也把进程间控制 信息的交换称为低级通信,而把进程间大??量数据的交换称 为高级通信。 目前,计算机系统中用得比较普遍的高级通信机制可分 为3大类:共享存储器系统、消息传递系统及管道通信系统。 共享存储器系统 共享存储器系统为了传送大量数据,在存储器中划出一块 共享存储区,诸进程可通过对共享存储区进行读数据或写数 据以实现通信。进程在通信之前,向系统申请共享存储区中 的一个分区,并为它指定一个分区关键字。 ;消息传递系统 在消息传递系统中,进程间的数据交换以消息为单位, 在计算机网络中被称为报文。消息传递系统的实现方式又可 以分为以下两种: (1)直接通信方式 发送进程可将消息直接发送给接收进程,即将消息挂在 接收进程的消息缓冲队列上,而接收进程可从自己的消息缓 冲队列中取得消息。 (2)间接通信方式 发送进程将消息发送到指定的信箱中,而接收进程从信 箱中取得消息。这种通信方式又称信箱通信方式,被广泛地 应用于计算机网络中。相应地,该消息传递系统被称为电子 邮件系统。;管道通信系统 向管道提供输入的发送进程,以字符流方式将大量的数 据送入管道,而接收进程从管道中接收数据。由于发送进程 和接收进程是利用管道进行通信的,故称为管道通信。 为了协调发送和接收双方的通信,管道通信机制必须提 供以下3方面的协调功能。 (1)互斥 当一个进程正在对pipe文件进行读或写操作时,另一个 进程必须等待。 (2)同步 当写进程把一定数量的数据写入pipe文件后,便阻塞等 待,直到读进程取走数据后,再把写进程唤醒。 (3)确认对方是否存在 只有确定对方已存在时,才能进行管道通信,否则会造 成因对方不存在而无限制地等待。; 在这个问题当中,我们采用信号量机制进行进程之间的 通信,设置两个信号量,空的信号量和满的信号量。 在Linux系统中,一个或多个信号量构成一个信号量集合 。使用信号量机制可以实现进程之间的同步和互斥,允许并 发进程一次对一组信号量进行相同或不同的操作。每个P、V 操作不限于减1或加1,而是可以加减任何整数。在进程终止 时,系统可根据需要自动消除所有被进程操作过的信号量的 影响 1.缓冲区采用循环队列表示,利用头、尾指针来存放、 读取数据,以及判断队列是否为空。缓冲区中数组大小为10 ; 2.利用随机函数rand()得到A~Z的一个随机字符,作为 生产者每次生产的数据,存放到缓冲区中;;

文档评论(0)

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

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

1亿VIP精品文档

相关文档