燕山大学操作系统课程设计说明书_第1页
燕山大学操作系统课程设计说明书_第2页
燕山大学操作系统课程设计说明书_第3页
燕山大学操作系统课程设计说明书_第4页
燕山大学操作系统课程设计说明书_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

题目:多道程序缓冲区协调操作(模拟生产者消费者问题)课题负责人:班级:姓名:学号:A课题开发日期:2014年1月13日自评成绩:学院:信息科学与工程学院燕山大学课程设计说明书课程设计名称:操作系统目录TOC\o"1-5"\h\z1概述3目的3\o"CurrentDocument"主要完成的任务3\o"CurrentDocument"使用的开发工具、开发语言3\o"CurrentDocument"本软件解决的主要问题42设计的基本理念、概念和原理4\o"CurrentDocument"设计的基本理念4基本概念4\o"CurrentDocument"基本原理53总体设计5基本的技术路线:面向对象5\o"CurrentDocument"模块关系及总体流程54详细设计7变量设计7\o"CurrentDocument"线程的设计7button按钮的设计85编码设计9开发环境9注意事项9\o"CurrentDocument"主要代码设计9PUTTER线程的设计9MOVER1线程的设计10GETTER1线程的设计11“开始”按钮的设计12“结束”按钮的设计14解决的主要难题166测试出现的问题及其解决方案167工程总结168参考文献16多道程序缓冲区协调操作演示程序设计说明书1概述目的计算机操作系统是计算机系统中最不可缺少的,最常用的软件,也是核心的,最接近于计算机硬件的软件。其特点是内容繁多,概念抽象,因此造成理解困难,掌握不易。本软件的主要目的是通过直观的演示,使学生能够感性的明白掌握多道程序及其进程同步和互斥的程序设计的基本方法。主要完成的任务可随机产生字符数据,由生产者的put操作不断将生产的字符数据放入容器1(Buffer1)中。通过搬运者的Move1操作要不断地将容器1(Buffer1)的数据取到容器2(Buffer2)中。通过搬运者的Move2操作要不断地将容器1(Buffer1)的数据取到容器3(Buffer3)中。通过消费者1的GET操作不断的从容器2(buffer2)中取出数据通过消费者2的GET操作不断地从容器3(Buffer3)中取出数据。生产者,搬运者,消费者的数目,buffer容量可自己设定,但数目不宜过多;默认为生产者5,消费者1为5,消费者2为5,Move1为2,Move2为2,buffer1容量为10,buffer2容量为10,buffer3容量为10。PUT、Move1、Move2、GET1,GET2每次操作一个数据,在操作的过程中数据不丢失,每个Buffer每次只能接受一个PUT或一个Move或一个Get,多个操作不能同时操作同一BUFFER。能够实时显示Buffer的操作过程,以及每个Buffer的当前放入的数据,每个buffer中的数据的个数。能够对生产者,搬运者,消费者的速度进行自由控制。当程序运行开始后,计时器就开始计时,直到运行结束,显示运行的总时间。运行结束后,能够汇总总运行时时间、已生产产品数、消费者1已消费产品数、消费者2已消费的产品数、总消费的产品数。使用的开发工具、开发语言开发工具:VS2010开发语言:C++C++是面向对象的一种编程语言,窗口程序设计中MFC已经将windows最底层的API函数以类的形式封装好,使用方便。其特点有:1.面向对象;平台无关性;安全性;健壮性;本软件解决的主要问题对Buffer操作的多线程同步问题,利用操作系统的P、V原语操作和C++语言的Thread线程对put、move、get等多线程进行协调处理,实现了多线程并发执行的原理。用程序演示了操作系统中经典的生产者和消费者问题。2设计的基本理念、概念和原理设计的基本理念使用VS2010创建了一个基本对话框类,并在对话框中添加了基本需要的所有控件:(1)buffer1,buffer2,buffer3三个LISTBOX控件,用于显示各个buffer中的当前内容。(2)添加了3个编辑框控件,分别用于对3个容器(buffer)容量的控制。(3)添加1个编辑框控件用于输入数值确定线程执行速度。(4)添加5个编辑框控件,用于对生产者,移动物流,消费者数量的控制。五个线程用于对buffer容器的控制(PUTTER,MOVER1,MOVER2,GETTER1,GETTER2):(1)PUTTER线程产生随机字符,并放入buffer1中,实现生产者的生产过程。(2)MOVER1,MOVER2线程分别将buffer1中的数据移动至buffer2和buffer3中。(3)GETTER1,GETTER2线程分别将buffer2和buffer3中的数据字

符移出,实现消费者的消费过程。多个变量分别统计需要显示的数据:(1)三个变量分别统计buffer1,buffer2,buffer3中的数据并实时显示出来。(2)五个变量进行数据汇总,显示最后的运行总时间,生产者生产数量,消费者消费数量。通过MFC的对话框中按钮实现对所有线程的控制:(1)“开始”按钮:开始所有线程,实现多线程程序同步。(2)“结束”按钮:结束所有线程,并显示数据汇总情况。2.2基本概念面向对象,进程,线程,线程的同步,线程的互斥,多道程序。基本原理经典的生产者与消费者同步原理,通过互斥体和互斥信号来实现线程的等待,线程间的同步问题,线程之间的协调的问题。总体设计基本的技术路线:面向对象运用面向对象的设计理念,设计所要求的PUTTER,MOVER1,MOVER2,GETTER1,GETTER2五个线程,达到信号量的控制,变量的值确定,实现BUFFER一次只能操作一个动作,实现线程的同步,阻塞以及他们之间的协调问题。模块关系及总体流程Pca对话框类:主界面设计、显示数据、过程演.示—►―kPUTTER线程:生产者:执行put操作—►MOVER1线程:搬运者1:执行move1操作―►MOVER2线程:搬运者2:执行move2操作—AGETTER1线程:消费者1:执行get操作—►GETTER2线程:消费者2:执行get操作图1.模块关系图2.总体流程详细设计变量设计g_hMutex1,g_hMutex2,g_hMutex3:三个互斥体,分别控制一次只能对buffer实现一次操作。g_hFullItems1,g_hFullItems2,g_hFullItems3g_hEmptyItems1,g_hEmptyItems2,g_hEmptyItems3:六个信号量,分别控制buffer中是否有空闲空间以及是否有数据可供移动,并进行互斥操作。clock_t类型的start,finish变量,通过调用clock()函数得到线程运行的总时间。structPThread{intptid;CpacDlg*dlg;};定义线程的结构体,用于线程通过结构体参数调用窗口类,从而实现线程对窗口的控制。SIZE_1,SIZE_2,SIZE_3:编辑框控件添加的变量,从而实现动态对容器buffer容量的控制。SPEED:控件添加的变量,实现对线程速度的控制。Produce_Num,Consumer1_Num,Consumer2_Num,Move1_Num,Move2_Num:控件添加的变量,实现对生产者,消费者,物流移动数量的控制。Con1_Num,Pro_Num,Con2_Num,Con_Num:控件添加的变量,实现最终的数据统计汇总显示。Buffer1,buffer2,buffer3:ListBox控件添加的控制变量,用于显示各个buffer中的字符数据内容。线程的设计PUTTER线程产生随机字符,并放入buffer1中,实现生产者的生产过程。DWORDWINAPIPUTTER(LPVOIDpara)编写代码要有良好

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论