齐齐哈尔大学
操作系统课程综合实践
题目:多进程同步方法解决生产
者-消费者问题
班级: 0
姓名: 0
学号: 0
指导教师: 0
2011年12 月7日
综合实践评分表
班级 0 姓名 0 指导教师 0 题目:多进程同步方法解决生产者-消费者问题
评分标准 评分标准 分数权重 10 评分的依据 A 选题符合大纲要求,题目较新颖,工作量大 态度端正,能主动认真完成各个环节的工作,不迟到早退,出勤好。 能正确选择存储结构,定义准确,算法流程图或类C语言描述的算法准确无误 具有独立分析、解决问题能力,有一定的创造性,能够独立完成软件的设计与调试工作,程序结构清晰,逻辑严谨,功能完善。 能准确回答老师提出的问题 程序运行正确、界面清晰,测试数据设计合理。 格式规范,层次清晰,设计思想明确,解决问题方法合理,体会深刻。 总分 C 选题基本符合大纲 要求,工作量适中 能够完成各环节基 本工作,出勤较好。 能正确选择存储结构,算法流程图或类 C语言描述的算法基本准确 有一定的分析、解决问题能力。能够在老师指导下完成软件 的设计与调试工作,程序功能较完善。 能基本准确回答老 师提出的问题 程序运行正确、界面较清晰,能给出合适 的测试数据。 格式较规范,设计思想基本明确,解决问 题方法较合理。 得分 选题 工作态度 10 存储结构、算法描述 20 独立解决问题的能力 10 答辨问题回答 程序运行情况 综合实践报告 20 10 20 指导教师(签字): 注:介于A和C之间为B级,低于C为D级和E级。按各项指标打分后,总分在90~100为优,80~89为良,70~79为中,60~69为及格,60分以下为不及格。
2
多进程同步方法解决生产者-消费者问题
摘要:本文论述了多进程同步方法解决生产者-消费者问题的过程。该程序使学生对操作系统的工作机制有了初步的了解,其主要目的是使学生了解和撑握在Linux系统平台下的C语言编程,用来解决实现生活中遇到的问题。并以Linux系统开发平台,以及虚拟机来实现。 关键字:生产者-消费者问题,Linux系统平台,虚拟机,信号量,线程(thread)
3
多进程同步方法解决生产者-消费者问题
一、课程设计所需设备
计算机一台,Red Hat linux9.03系统一套。
二、课程设计预期目的
通过研究Linux 的进程机制和信号量实现生产者消费者问题的并发控制。
三、课程设计任务
用多进程同步方法解决生产者-消费者问题
设计目的:通过研究Linux 的进程机制和信号量实现生产者消费者问题的并发控制.
说明:有界缓冲区内设有20个存储单元,放入/取出的数据项设定为1-20这20个整型数. 设计要求:
1) 每个生产者和消费者对有界缓冲区进行操作后,即时显示有界缓冲区的全部内容,当前指针位置和生产者/消费者线程的标识符. 2) 生产者和消费者各有两个以上.
3) 多个生产者或多个消费者之间须有共享对缓冲区进行操作的函数代码.
四、课程设计基本思想
多进程是一种非常简洁的多任务操作方式。在Linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种烦琐的多任务工作方式。
生产者-消费者方案是多进程应用程序开发中最常用的构造之一。因此困难也在于此。因为在一个应用程序中可以多次重复生产者-消费者行为,其代码也可以如此。设计中创建了 Consumer 类,该类通过在一些多进程应用程序中促进代码重用以及简化代码调试和维护来解决这个问题。多进程应用程
4
序通常利用生产者-消费者编程方案,其中由生产者进程创建重复性作业,将其传递给作业队列,然后由消费者进程处理作业。
多进程是一种使应用程序能同时处理多个操作的编程技术。通常有两种不同类型的多进程操作使用多个进程:适时事件,当作业必须在特定的时间或在特定的间隔内调度执行时;后台处理,当后台事件必须与当前执行流并行处理或执行时;适时事件的示例包括程序提醒、超时事件以及诸如轮询和刷新之类的重复性操作。后台处理的示例包括等待发送的包或等待处理的已接收的消息。
生产者-消费者方案很适合于后台处理类别的情况。这些情况通常围绕一个作业“生产者”方和一个作业“消费者”方。当然,关于作业并行执行还有其它考虑事项。在大多数情况下,对于使用同一资源的作业,应以FCFS的方式按顺序处理,这可以通过使用单进程的消费者轻松实现。通过使用这种方法,使用单个进程来访问单个资源,而不是用多个进程来访问单个资源。要启用标准消费者,当作业到来时创建一个作业队列来存储所有作业。生产者进程通过将新对象添加到消费者队列来交付这个要处理的新对象。然后消费者进程从队列取出每个对象,并依次处理。当队列为空时,消费者进入休眠。当新的对象添加到空队列时,消费者会醒来并处理该对象。
五.详细设计
5.1、调试问题分析
为解决生产者/消费者问题,应该设置两个资源信号量,其中一个表示空缓冲区的数目,用Full表示,其初始值为有界缓冲区的大小BUFFER_NUM;另一个表示缓冲区中产品的数目,用Empty表示,其初始值为0。另外,由于有界缓冲区是一个临界资源,必须互斥使用,所以还需要再设置一个互斥信号量Mutex,起初值为1。
在生产者/消费者问题中,信号量实现两种功能。首先,它是生产产品和消费产品的计数器,计数器的初始值是可利用的资源数目(有界缓冲区的长度)。其次,它是确保产品的生产者和消费者之间动作同步的同步器。 生产者要生产一个产品时,首先对资源信号量Full和互斥信号量Mutex进行P操作,申请资源。如果可以通过的话,就生产一个产品,并把产品送入缓冲区。然后对互斥信号量Mutex和资源信号量Empty进行V操作,释放资源。
消费者要消费一个产品时,首先对资源信号量Empty和互斥信号量Mutex进行P操作,申请资源。如果可以通过的话,就从缓冲区取出一个产品并消
5