




免费预览已结束,剩余14页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
燕山大学操作系统课程设计说明书燕山大学课程设计说明书 课程设计名称:操作系统os 题目:生产者与消费者模拟班级:08级计算机科学二班 开发小组名称:chn 课题负责人: 课题组成员: 姓名 学号 班级 自评成绩 08级科学二班 a 08级科学二班 b 08级科学二班 b联系电话:课题开发日期:2011-1-102011-1-14生产者与消费者模拟1、概述 1.1 目的:本软件的目的是通过动态演示,模拟多线程生产者消费者及其进程同步和互斥的程序设计的基本方法。1.2 主要完成的任务:有两组生产者maker1,maker2不断循环的产生数据,有两组转移者mover1、mover2不断循环的转移数据。生产者maker1,maker2通过put操作分别向各自的缓冲池buffer1、buffer2输入数据;转移变量通过move操作把仓库buffer1、buffer2中的产品转移到buffer3;消费者通过get操作从消费处进行消费。put、move、get每次操作一个数据,在操作的过程中数据不丢失,每个buffer每次只能接受一个put或一个move或一个get,多个操作不能同时操作同一buffer。在运行程序之前能够对buffer1,bufer2,buffer3的容量初始化设置,能够设置生产者1和生产者2生产的速度,move1和move2搬运的速度及get的速度,。能够设置put1,put2,move1,move2,get线程的数量,表示能够有多少个线程在同时运行。在输入对话框内,对用户进行了控制,只容许用户输入正整数,而禁止输入字符,如果是字符就弹出一对话框提示用户必须输入正整数。运行结束后,能够汇总生产者1和生产者2生产的总产品数,搬运者1和搬运者2搬运的总数及消费者消费的总数。1.3 使用的开发工具:windows 7操作系统,v c+6.0开发工具,c+编程语言。1.4 解决的主要问题:对buffer的操作的多线程同步问题,利用操作系统的p、v原语操作对put、move、get等多线程进行协调处理,实现了多道程序同时执行的原理。2 、使用的基本概念和原理2.1基本概念 :面向对象:面向对象是当前计算机界关心的重点,它是90年代软件开发方法的主流。面向对象的概念和应用已超越了程序设计和软件开发,扩展到很宽的范围。如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、cad技术、人工智能等领域。进程:进程是一个可执行的程序,由私有虚拟地址空间、代码、数据和其他操作系统资源进程组成。一个应用程序可以有一个或多个进程,一个进程可以有一个或多个线程,其中一个是主线程。动态性是进程最基本的特性。线程:线程是操作系统分时调度分配cpu时间的基本实体,是进程的一个实体,是被系统独立调度和分派的基本单位,线程基本上不拥有自己的资源,只拥有一点点在运行中必不可少的资源(如程序计数器、一组寄存器和栈),但它可与同属于一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤销另一个线程;同一进程中的多个线程之间可以并发执行。线程的同步:同步多线程(smt)是一种在一个cpu 的时钟周期内能够执行来自多个线程的指令的硬件多线程技术。本质上,同步多线程是一种将线程级并行处理(多cpu)转化为指令级并行处理(同一cpu)的方法。 同步多线程是单个物理处理器从多个硬件线程上下文同时分派指令的能力。同步多线程用于在商用环境中及为周期/指令(cpi)计数较高的工作负载创造性能优势。 处理器采用超标量结构,最适于以并行方式读取及运行指令。同步多线程使您可在同一处理器上同时调度两个应用程序,从而利用处理器的超标量结构性质。线程的互斥:线程互斥是指某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。多道程序:多道程序设计技术是在计算机内存中同时存放几道相互独立的程序,使它们在管理程序控制下,相互穿插运行。 多道程序运行的特征是: 1多道:即计算机内存中同时存放几道相互独立的程序。 2宏观上并行:同时进入 系统的几道程序都处于运行过程中,即它们先后开始了各自的运行,但都未运行完毕。 3微观上串行:从微观上看,内存中的多道程序轮流地或分时地占有处理机。2.2基本原理:生产者与消费者同步原理,线程的等待,线程的唤醒,线程的休眠,线程间的同步问题,线程之间的协调的问题。生产者与消费者同步,当buffer中有空间是允许向其中放入产品,当buffer中没有空间时阻塞生产者,当buffer中有数据时消费者从中取走数据并且设置buffer有空间标识,唤醒因此阻塞的进程。 3总体设计3.1技术路线:面向对象程序设计 ccan类 进行参数设置sim 类进行界面设置sum类 统计数据结果3.2软件的总体结构:3.3 要确立的线程五个线程maker1,maker2,cfmove1,cfmove2,user.利用信号量机制,对线程进行等待,唤醒操作,然后利用线程的休眠来模拟放入,取出的速度以及其它线程操作的速度。4、 详细设计 /下面进行第一生产处,第二生产处,搬运1处,搬运2处,消费者的的线程处理函数,任何程序这里基本都一样,uint fput1(lpvoid lparam)/this function must be declared as follows: uint mycontrollingfunction( lpvoid pparam );cmultithread3dlg * dlg =(cmultithread3dlg *) lparam;/if(dlg-buffer1number2) return 0;int i =dlg-current; while(!dlg-bx.bkill)p(dlg-bx.full1);/#define p(s) :waitforsingleobject(s,infinite)p(dlg-bx.buffer1);dlg-id_put1=i;dlg-buffer1number+=1;dlg-bx.bput1=true;dlg-n_putnumber1+;:sleep(dlg-bx.put1_delay); /这里控制线程运行的速度,delay的时间越高,线程运行的时间越慢v(dlg-bx.buffer1);/#define v(s) :releasesemaphore(s,1,null) the state of a semaphore object is signaled when its count is greater than zero and nonsignaled when its count is equal to zerov(dlg-bx.empty1);dlg-bx.bput1=false;return 0;uint fput2(lpvoid lparam)/controlling function for the worker thread.cmultithread3dlg * dlg =(cmultithread3dlg *) lparam; / if(dlg-buffer1number2) return 0;int i =dlg-current;while(!dlg-bx.bkill)p(dlg-bx.full2);p(dlg-bx.buffer2);dlg-id_put2=i;dlg-buffer2number+=1;dlg-bx.bput2=true;dlg-n_putnumber2+;:sleep(dlg-bx.put2_delay);v(dlg-bx.buffer2);v(dlg-bx.empty2);dlg-bx.bput2=false;return 0;uint fmove1(lpvoid lparam)cmultithread3dlg *dlg = (cmultithread3dlg *)lparam; / if(dlg-buffer3number3) return 0;int i =dlg-current;while(!dlg-bx.bkill)p(dlg-bx.empty1);p(dlg-bx.full3);p(dlg-bx.buffer1);p(dlg-bx.buffer3);dlg-bx.bmove1=true;dlg-buffer1number-;dlg-buffer3number+; dlg-move1number+;dlg-id_move1=i;:sleep(dlg-bx.move1_delay);v(dlg-bx.buffer3);v(dlg-bx.buffer1);v(dlg-bx.empty3);v(dlg-bx.full1);dlg-bx.bmove1=false;return 0;uint fmove2(lpvoid lparam) cmultithread3dlg *dlg = (cmultithread3dlg *)lparam;/if(dlg-buffer3number3) return 0;int i =dlg-current;while(!dlg-bx.bkill)p(dlg-bx.empty2);p(dlg-bx.full3);p(dlg-bx.buffer2);p(dlg-bx.buffer3);dlg-bx.bmove2=true;dlg-buffer2number-;dlg-buffer3number+; dlg-move2number+;dlg-id_move2=i;:sleep(dlg-bx.move2_delay);v(dlg-bx.buffer3);v(dlg-bx.buffer2);v(dlg-bx.empty3);v(dlg-bx.full2);dlg-bx.bmove2=false;return 0;uint fget(lpvoid lparam)cmultithread3dlg * dlg = (cmultithread3dlg *)lparam;int i =dlg-current;while (!dlg-bx.bkill)p(dlg-bx.empty3);p(dlg-bx.buffer3);dlg-id_get=i;dlg-buffer3number-;dlg-bx.bget=true;dlg-n_getnumber+;:sleep(dlg-bx.get_delay);v(dlg-bx.buffer3);v(dlg-bx.full3);dlg-bx.bget=false;return 0;5、编码设计5.1开发环境的设置和建立: 图1:安装vc+6.0 打开mfc 建立工程5.2关键代码void cmultithread3dlg:onpaint() if (isiconic()cpaintdc dc(this); / device context for paintingsendmessage(wm_iconerasebkgnd, (wparam) dc.getsafehdc(), 0);/ center icon in client rectangleint cxicon = getsystemmetrics(sm_cxicon);int cyicon = getsystemmetrics(sm_cyicon);crect rect;getclientrect(&rect);int x = (rect.width() - cxicon + 1) / 2;int y = (rect.height() - cyicon + 1) / 2;/ draw the icondc.drawicon(x, y, m_hicon); /下面进行绿条的绘制,在onpaint()函数中,else cpaintdc dc(this);colorref col;for(int i=1;i=bx.m_mput1;i+)crect rc(20,55+i*10,120,(i+1)*10+55);if(id_put1=i&bx.bput1)col=rgb(222,0,0); /当线程运行的时候显示为红条,否则显示为绿条elsecol=rgb(0,222,0);drawarrow(rc,&dc,col); for(int ii=1;ii=bx.m_mput2;ii+)crect rc2(20,ii*10+150+55,120,(ii+1)*10+150+55);if(id_put2=ii&bx.bput2)col=rgb(222,0,0);elsecol=rgb(0,222,0,);drawarrow(rc2,&dc,col);for(int j=1;j=bx.m_mget;j+)crect rc1(650,j*10+120,750,(j+1)*10+120);if(id_get =j&bx.bget)col=rgb(222,0,0);elsecol=rgb(0,222,0);drawarrow(rc1,&dc,col);for(int m=1;m=bx.m_mmove1;m+)crect rc3(330,m*10+55,430,(m+1)*10+55);if(id_move1=m&bx.bmove1)col=rgb(222,0,0);elsecol=rgb(0,222,0);drawarrow(rc3,&dc,col); for(int mm=1;mm=bx.m_mmove2;mm+) crect rc4(330,mm*10+205,430,(mm+1)*10+205);if(id_move2=mm&bx.bmove2)col=rgb(222,0,0);elsecol=rgb(0,222,0);drawarrow(rc4,&dc,col);cbrush br(rgb(0,0,222),*oldbr;oldbr =dc.selectobject(&br);/此处选用br颜色,也就是蓝色为画刷颜色,oldbr是原来的颜色。 /绘制蓝色的buffer,drawbuffer函数用的是默认的画刷来填充颜色 drawbuffer(170,60,buffer1number,&dc);drawbuffer(170,205,buffer2numbe
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 防火楼梯合同协议书
- 养殖鱼合同协议书
- 合同聘用终止协议书
- 大庆交易合同协议书
- 合同协议书的网站
- 酒吧员工合同协议书
- 合同协议书数字内容
- 单位合同续签协议书
- 大额付款合同协议书
- 窑炉安装合同协议书
- 2025届上海高中高考英语三模试卷含解析
- 产后出血介入手术护理
- 国家安全反对邪教
- 2025年春九年级语文下册 第三单元综合测试卷(人教陕西版)
- 创业创新执行力学习通超星期末考试答案章节答案2024年
- 2024秋期国家开放大学《可编程控制器应用实训》一平台在线形考(形成任务1)试题及答案
- 人民医院样本外送检测管理制度
- 工业视觉系统运维员-国家职业标准(2023年版)
- 民间艺术课件教学课件
- 风电场生命周期管理
- 中国甲酸钠市场供需态势与投资潜力分析报告2024-2030年
评论
0/150
提交评论