




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、青岛理工大学操作系统课程设计报告院(系): _计算机工程学院 _专业:_计算机科学与技术专业 _学 生姓名: _班级:_ 学号:_题目:用多进程同步方法演示 “生产者-消费者”问题 起迄日期:_设计地点: _指导教师: _年度 第学期完成日期:年 月曰一、 课程设计目的本次进行操作系统课程设计的主要任务是设计一个模拟生产者消费者工作的系统。这个问题中有一种生产者和一种消费者,生产者和消费者对同一个缓冲区进行操作,互斥的访问缓冲区。本次课程设计的目的就是加深对多进程如何正确访问资源的认识,同时掌握信号量在互斥访问时应该如何正确有效地使用。掌握生产者消费者问题的解决流程和方法,提高编程能力、解决问
2、题的能力和查阅文档的能力。二、 课程设计内容与要求1、设计目的:通过研究 Linux的进程同步机制和信号量,实现生产者消费者问题的并 发控制。2、 说明:有界缓冲区内设有 20个存储单元,放入取出的产品设定为20个100以内的随机 整数。3、设计要求:1)生产者与消费者均有二个以上2)生产者和消费者进程的数目在程序界面上可调,在运行时可随时单个增加与减少生 产者与消费者3)生产者的生产速度与消费者的消费速度均可在程序界面调节,在运行中,该值调整 后立即生效4)生产者生产的产品由随机函数决定5)多个生产者或多个消费者之间必须有共享对缓冲区进行操作的函数代码6)每个生产者和消费者对有界缓冲区进行操
3、作后,即时显示有界缓冲区的全部内容、当前生产者与消费者的指针位置,以及生产者和消费者线程标识符7)采用可视化界面,可在运行过程中随时暂停,查看当前生产者、消费者以及有界缓 冲区的状态三、 系统分析与设计1系统分析 系统分析1此次课程设计的任务是生产者消费者问题的模拟演示,需要处理的数据有:生产者进 程数目,消费者进程数目,生产者生产速度,消费者消费速度,缓冲区中产品的个数,以及 生产、消费产品的指针。2程序中需要缓冲区中的信息可以动态演示,生产者、消费者的个数以及生产、消费时 的速度可以随时调节,同时为了使程序更加友好,应该具有开始、暂停、停止等相关可操作按钮。3系统对外的界面如下:1)对进程
4、个数的修改:点击生产者、消费者进程数据文本框下的增加、减少按钮2) 对速度的修改:速度值默认为2000ms/个,如需修改,则在速度文本框中输入所修 改的值,点击修改按钮即可进行修改。3)需要开始模拟时,点击右上方的开始按钮。如需暂停模拟过程,可点击暂停按钮。 当需要运行完毕时,点击停止按钮,进程工作停止。主生界产面者控制消有费界者缓控冲制区控制生 产 者 数 目 调 节消生费产者者数速目度调调节节消 费 者 速 度 调 节4此次使用java平台实现,保证了程序在各种机器的运行,只需要事前建立java的运行环境即可,便于程序的移植5系统界面如下:进程工作情况动态显示区开始、暂停、停止按钮区进程数
5、目调节区程序速度控制调节区2、系统设计:2.1、模块设计:主界面系统主模块2.2、数据结构说明:2.3、算法流程图:生产者流程图:消费者流程图:四、系统测试与调试分析1系统测试(1)因为当生产者在缓冲区满了以后自动阻塞,需要消费者唤醒,所以需要测试唤醒的实 现是否正常。测试名称用多进程冋步方法演示“生产者-消费者”问题:测试目的验证生产者能被消费者唤醒测试技术单元测试测 试 说 明 测试方法黑盒测试法测试内容当生产者生产满缓冲区后,开始增加消费者,唤醒生产者测试步骤增加生产者等待缓冲区被用完增加消费者测试数据增加生产者到2 缓冲区产品数量20缓冲区空闲位为0苹果消费者增加到 3预期结果缓冲区开
6、始增加产品缓冲区满生产者阻塞生产者被唤醒,缓冲区 中产品数量减少测 试 用 例测试结果与预期相符与预期相符与预期相符(2)因为当生产者在缓冲区满了以后自动阻塞,需要消费者唤醒,所以需要测试 唤醒的实现是否正常。测试名称用多进程冋步方法演示“生产者-消费者”问题:测试目的验证多个生产者和消费者互斥操作缓冲区测试技术单元测试测 试 说 明测试方法黑盒测试法测试内容缓冲区为空,消费者阻塞时,生产者唤醒消费者测试步骤开始生产产品,缓冲区 为空空闲位20开始消费产品,终止生产线 程开始增加生产者 减少消费者测试数据生产者数量5生产者减少到0增加消费者到5增加生产者到5减少消费者到2预期结果缓冲区内产品数
7、量每次 增加5个消费完成产品,消费者阻塞唤醒消费者,缓冲区中 产品增加测 试 用 例:测试结果与预期相符与预期相符与预期相符3)测试生产者和消费者的速度是否可以调节测试名称用多进程冋步方法演示“生产者-消费者”问题:测试目的苹果、橘子生产者和苹果、橘子消费者速度可以调节测试技术单元测试测 试 说 明测试方法黑盒测试法测试内容调节生产者和消费者速度测试步骤开始程序运行输入生产者、消费者速度值点击修改按钮测试数据生产者速度2000消费者速度2000生产者速度值 1000消费者速度值1000点击修改测 试 用 例预期结果缓冲区开始被操作界面文本框中显示速度值速度均变化到1000修改图2:生产者速度调
8、节图3 :消费者速度调节测试结果与预期相符与预期相符与预期相符2、调试分析:1.在编写过程中,由于函数较多,开始时由于名称不够清晰,程序出现错误。2.测试运行过程中,由于函数名称的相似,出现引用混乱的情况,程序无法正常运行。3.在制作界面时,由于遗忘了 chuangkou.add(jp);chuangkou.setVisible(true);两个语句,导致界面无法正常显示。4.制作界面时,对各个控件的坐标和大小考虑不周,导致界面混乱,影响美观。五、用户手册1.使用的语言和平台本次实验使用的是 java语言的eclipse平台2.对于程序运行环境的注意事项需要安装java运行环境,eclipss
9、平台不需要安装,只需要下载完成就可以使用。3.程序使用步骤增加减少图4 :生产者数量调节图5:消费者数量调节图1 :系统登录界面。图6:控制界面图7:动态显示缓冲区4.程序使用步骤:1)单击开始按钮,程序开始初始化执行暫停停止2)点击增加按钮分别增加生产者和消费者,可以看到可视化缓冲区开始运动生产运行鱼庐唐四产品个教为1 匕11疋;(0)23;诸龍者数:Thread. sleep ( speed );3)在速度调节部分调节生产者和消费者的速度,可以看到缓冲区出现预期的产品种类和数 量的变化。六、程序清单class Con sumer exte nds Threadprivatehuanchon
10、gquhcq ; /保存一个缓冲区类的引用staticlong speed = 2000; /speed 表示消费者线程的速度staticint cpause = 0; /cpause 变量用来控制消费者线程的开始与暂停boolean out = false ;/定义构造方法,接收一个缓冲区类型的变量public Con sumer(hua nchon gqu hcq)this . hcq = hcq;run()方法调用接收的缓冲区类型的变量指向的decrease。方法,开始消费元素。Overridepublic void run()while (! out )if ( out )break
11、;if ( cpause = 1)try冃爭者 Thr e id.-3FlThmd-3 冃要者ThrEad-3 冃奥者Thr沁d-MI的顼宁亍薮为0仓岸已空生产者麹: o生产淹蔭: |20002000Thread. sleep ( speed );catch (In terruptedExceptio n e) e.pri ntStackTrace();hcq .Consume();class Producerexte nds Threadprivatehuanchongquhcq ;/定义缓冲区类的引用。staticlongspeed : =2000;/定义speed变量,表示线程速度boo
12、lea nout=false5publicstaticintppause=0; /ppause变量用来控制生产者线程的开始与暂停/定义构造方法,接收一个缓冲区类型的变量publicProducer(hua ncho ngqu hcq)this . hcq = hcq;public void changeout()out = ! out ;/run()方法调用缓冲区类型变量指向的对象的in crease()方法,开始生产元素。Overridepublic void run()while (! out )if ( out )break ;if ( ppause = 1)tryThread. sle
13、ep ( speed );存储生产的产品catch (In terruptedExceptio n e)e.pri ntStackTrace();hcq .Produce。;class hua nchon gqu/number表示动态缓冲区中元素的数量static int nu mber = 0;staticboolean E_F = new boolean 20; / 缓冲区状态控制staticint storage = new int 20;staticSemaphoreempty =new Semaphore(20);staticSemaphorefull =new Semaphore(
14、0);staticSemaphorecha npin=new Semaphore(0);staticSemaphoremutex =new Semaphore(l);staticint cpnum=0;staticint poin tcp=-1;publichua nchon gqu()E_Fi = false ;storage i =0public void Produce()empty .acquire();II信号量的p操作,申请空缓冲区mutex .acquire();II 互斥信号量if ( pointcp +1!= 20)poin tcp +;E_F pointcp = true
15、; II将生产了产品的标志位设为满 cpnu m+;storage pointcp = ( int )(Math. random ()*99+0); IIfor (inti = 0 ;i 20 ;i+)Stri ng str2 = Thread.curre ntThread ().getName();pc. ta2 .append(生产者+ str2 +运行 n);nu mber +;pc. ta1 .append(仓库中的产品个数为 ” + number + n);pc. ta1 .append(它们是:n);for ( int j = 0; j 20; j+)if (storage j !
16、=O)pc. ta1 .append( ( +j+ ) +storage j +);elsepc. ta1 .append();if ( number = 20)pc. ta1 .append( n 仓库已满”);pc. ta1 .append( n);mutex .release(); / 释放互斥锁full .release(); /增加满信号量的值chan pin .release(); II增加产品信号量的值 public void Consume()chanpin .acquire。;II 申请获得产品full .acquire(); II申请满缓冲区 mutex .acquire(
17、); II互斥进入临界区Stri ng str2 = Thread.curre ntThread().getName();pc. ta2 .append(消费者 ” + str2 +运行 n);nu mber -;cpnu m_;E_F pointcp = false ; II 设置为空storage pointcp =O;pointcp -; II产品指针减一pc. tai .append(仓库中的数字个数为 ” + number + n);pc. tai .append(它们是:n);for ( int j = 0; j 20; j+)if ( storage j !=O)pc. tai
18、.append( ( +j+ ) +storage j +);elsepc. tai .append(II II);if ( number = 0)pc. ta1 .append( pc. ta1 .append( mutex .release。; empty .release();n仓库已空”);n/);退出临界区空缓冲区信号量加一class Semaphoreint value ;public Semaphore( int v)this . value = v;/定义P、V原语操作,原语操作就是执行时不能中断,所以/获取synchroni zed修饰publicsynchroni zedv
19、oid acquire()value -;if (value 0)try this .wait(); / 等待 catch (In terruptedExceptio n e) e.pri ntStackTrace();publicsynchroni zedvoid release()/释放/唤醒java语言进行程序编制。因为相对于mfc等,java语言java 了解不深,掌握程序会value +;if (value =0) this .notify();七、体会与自我评价对于本次课程设计,我采用了更轻便简洁,在绘制可视化图形界面时也相对容易很多。可是由于对的也不是很好,所以编制的程序并不算完美。比如在按了暂停按钮或停止按钮之后, 出现延迟等现象。本次实验并没有特别困难的算法。其实主要的算法只有两种, 一种是生产者的生产过程,一种是消费者的消费过程。在设计过程中,由于生产者与消费者需要互斥的访问缓冲区,将产品放进去或从里面取出,所以最后决定使用指针的方法,通过指针前后移动来表现产品被放入缓冲池或取出缓冲池的过程。刚开始时,我将指针的初值设置为0,但是出现的产品只有19个,不符合20个缓冲池的要求。后来我发现是我对指针存在理解错误并将初值设置 改为-1之后,运行程
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中学教师资格考试《综合素质》教育热点案例分析题押题试卷(含答案)
- 2025年建筑施工安全管理人员考试题库案例分析
- 2025年小学教师资格考试《综合素质》教育心理学案例分析及答案试卷
- 虚拟现实中的故事叙述技术-全面剖析
- 网络安全防御机制-全面剖析
- 疫苗研发与接种效率提升-全面剖析
- 跨境电商数据安全-全面剖析
- 2025年注册会计师考试《会计》新准则解读考前冲刺试题
- 2025年成人高考《语文》写作素材积累:智能家居素材题库
- 2025年安全生产考试题库:隐患排查治理法律法规试题
- 2025建筑信息模型技术员(初级)技能鉴定精练考试题库及答案
- 2024-2025学年七年级语文下学期期中模拟卷05
- 实施《中华人民共和国反外国制裁法》的规定
- 湖南新高考教学教研联盟暨长郡二十校联盟2025届高三年级第二次联考物理试题及答案
- 襄阳市樊城区城市更新投资发展有限公司招聘考试真题2024
- 2022智能变电站网络记录及分析装置测试规范
- 严重过敏反应诊断和临床管理专家共识(2025)解读 2
- 生物泌尿系统的组成课件-+2024-2025学年冀少版生物七年级下册
- 2025职业健康培训
- 马鞍山职业技术学院马鞍山技师学院招聘笔试真题2024
- 税务局笔试试题及答案
评论
0/150
提交评论