操作系统课程设计生产者消费者(9页).doc
《操作系统课程设计生产者消费者(9页).doc》由会员分享,可在线阅读,更多相关《操作系统课程设计生产者消费者(9页).doc(9页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-操作系统课程设计生产者消费者-第 9 页(操作系统课程设计)生产者和消费者学生姓名: 学生学号: 班 级: 0311401、02、03、04班制 二一三年十二月一、 课程题目分析这个题目是生产者向消费者提供商品,消费者消耗商品,并且两组人共用同一缓冲区。生产者提供了商品之后消费者才能去取商品,消费者若不取走商品则当缓冲区用完之后生产者则不能再向缓冲区中添加新的商品。思考问题:(1) 对于生产者进程:每产生一个数据,则需去访问共用缓冲区是否有已满,未满则可以将该数据存入并通知消费者进程,否则不能。(2) 对于消费者进程:每当想去消费(取出数据)时,则需访问缓冲区是否为空,为空则不能消费(取出数
2、据),否则可以取,并通知生产者。(3) 缓冲区是个临界资源,所有的进程对于该空间都是共享的,所以,还有互斥问题存在。二、 课程设计目的通过实验模拟生产者与消费者之间的关系,了解并掌握他们之间的关系及原理。由此增加对进程同步问题的了解:(1) 掌握基本的同步互斥算法,理解生产者与消费者模型(2) 了解windows中多线程(多进程)的并发执行机制,线程(进程)间的同步于互斥(3) 学习使用windows中基本的同步对象,掌握相应的API。三、 课程设计内容有n个生产者和m个消费者,连接在具有k个单位缓冲区的有界环转缓冲上,故又称有界缓冲问题。其中Pi和Cj都是并发进程,只要缓冲区未满,生产者进程
3、Pi所生产的产品就可投入缓冲区;类似地,只要缓冲区非空,消费者进程Cj就可以从缓冲区取走并消耗产品。四、 开发环境操作系统:Windows系统编写语言:C+语言五、 系统分析设计(一) 算法原理生产者消费者问题是典型的进程同步问题,这些进程必须按照一定的生产率和消费率来访问共享缓冲区,用P、V操作解决生产者和消费者共享单缓冲区的问题,可设置两个信号量empty和full,其初值分别为1和0,empty指示能否向缓冲区放入产品,full指示能否从缓冲区取出产品。为了使其协调工作,必须使用一个信号量mutex(初值为1),以限制生产者和消费者互斥地对缓冲区进行存取,另用两个信号量empty1(初值
4、为缓冲区大小)和full1(初值为0),以保证生产者不向已满的缓冲区中放入产品,消费者不从空缓冲区中取产品。(二) 功能描述生产者功能描述:在同一个进程地址空间内执行两个线程。生产者线程生产物品,然后将物品放置在一个空缓冲区中供消费者线程消费。当生产者线程生产物品时,如果没有空缓冲区可用,那么生产者线程必须等待消费者线程释放出一个空缓冲区。消费者功能描述:消费者线程从缓冲区获得物品,然后释放缓冲区,当消费者线程消费物品时,如果没有满的缓冲区,那么消费者线程将被阻塞,直到新的物品被生产出来。(三) 算法流程图生产者流程图: 消费者流程图:总的流程图:(四) 数据结构及部分函数描述(1)类SeqS
5、quare:对类SeqSquare的声明及其中一些函数class SeqSquarepublic:SeqSquare(int n);SeqSquare();void P(int x); /p操作void V(int x); /v操作bool IsEmpty(); /判断是否为空bool IsFull(); /判断是否已满void deca();void decb();int getSize();int getmaxSize();int gettop();int geta();int getb();protected:private:int *elements;int top,a,b,maxSi
6、ze;说明:用动态整型数组*elements来代表缓冲区,不管是生产产品还是对已有产品的消费都需要访问该缓冲区。函数IsFull()用于判断缓冲区是否已满,生产者能否使用缓冲区。函数IsEmpty()用于判断缓冲区是否为空,消费者能否使用缓冲区。(2) 生产者和消费者操作及显示函数showbuf:void producer(SeqSquare *a) /生产者操作a-P(1);void consumer(SeqSquare *a) /消费者操作 a-V(1); /缓冲区显示void showbuf(SeqSquare *a)int i=a-getSize();(3) 在实现本程序的生产者消费者
7、模型时,具体地通过以下同步对象实现互斥:设一个互斥量Mutex,以实现生产者在查询和保留缓冲区的下一个空位置时进行互斥。每一个生产者用一个信号量与消费者同步,通过设置Full实现,该组信号量用于表示相应产品以生产。同时用一个表示空缓冲区数目的信号量Empty进行类似的同步,指示缓冲区中是否存在空位置,以便开始生产下一个产品。(四) 调试过程为解决生产者、消费者问题,应该设置两个资源信号量,其中一个表示空缓冲区的数目,用Full表示,其初值为用户输入的缓冲区的大小,另一个表示缓冲区中产品的数目,用Empty表示,其初值为0.另外,由于缓冲区是一个临界资源,必须互斥使用,所以还需要再设置一个互斥信
8、号量Mutex,其初值为1.在生产者、消费者问题中,信号量实现两种功能。首先,他是生产产品和消费产品的计数器,计数器的初值是可使用的资源数目(缓冲区的长度)。其次,他是确保产品的生产者和消费者之间的动作同步的同步器。生产者要生产一个产品时,首先对资源信号量Full和互斥信号量Mutex进行P操作,申请资源。如果可以通过的话,就生产一个产品,并把产品送人缓冲区。然后对互斥信号量Mutex和资源信号量Empty进行V操作,释放资源。消费者要消费一个产品时,首先对资源信号量Empty和互斥信号量Mutex进行P操作,申请资源。如果可以通过的话就从缓冲区取出一个产品并消费掉。然后对互斥信号量Mutex
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 课程设计 生产者 消费者
限制150内