操作系统进程管理演示系统开发(生产者-消费者)毕业论文(编辑修改稿)内容摘要:
j≤ n), i≠ j, s( 1≤ s≤ m), t( 1≤ t ≤ m), s≠ t,尽管 ProducerI 和 ProducerJ 之间、 ConsumerS 和 ConsumerT 之间、 ProducerI 和 ConsumerS 之间不存在针对缓冲区的互斥关系 ,但由于 ProducerI、 ProducerJ、 ConsumerS 和ConsumerT 都需要在操作缓冲区的同时对缓冲区队列进行维护,缓冲区队列成为所有进程间的新的临界资源,因此 ProducerI 和 ProducerJ 之间、 ConsumerS 和 ConsumerT 之间、ProducerI 和 ConsumerS 之间出现了针对缓冲区队列的互斥关系。 以上这四种情形是逐个包含关系,所以我们只要设计出能完成第四种条件下的生产者 消费者模拟系统。 浙江林学院天目学院本科生毕业设计(论文) 7 2 系统需求分析 任务概述 目标 学生通过该演示系统能形象的看到进程的调度 ,以便能更加透彻的理解操作系统中消费者 生产者的同步互斥问题。 运行环境 操作系统: WINDOWS 98/2020/XP。 编程工具 编程工具 : microsoft visual c++。 Visual C++是一个功能强大的可视化软件开发工具。 自 1993年 Microsoft公司推出Visual C++,随着其新版本的不断问世, Visual C++已成为专业程序员进行软件开发的首选工具。 Visual C++ C++编译器,而且是一个基于 Windows操作系统的可视化集成开发环境( integrated development environment,IDE)。 Visual C++件组成,包括编辑器、调试器以及程序向导 AppWizard、类向导 Class Wizard等开发工具。 这些组件通过一个名为 Developer Studio的组件集成为和谐的开发环境。 演示系统的分析 功能需求分析 1. 操作系统进程管理演示系统是 采用动画和交互的方式对 生产者 消费者 问题 进行演示、教学。 2. 学生可以输入生产者,消费者的数量 来进行不同情形的 的演示。 系统功能模块划分 系统已经设定一个大小固定的缓冲池 (缓冲池大小 11) ,缓冲池可以实时的显示生产者生产情况和消费者的消费情况,同时 用户可以设定生产者的数目来进行生产 (生产者数目110);设定消费者的数目来进行消费(消费者数目 110) ,由此系统可以模拟上面所描述的四种 生产者 消费者模型 ,同时用户可以实时的停止生产者及消费者的动作,做到分步展示的效果, 有效率的 起到教学 的作用。 浙江林学院天目学院本科生毕业设计(论文) 8 系统流程分析 P,V原语 是操作系统中定义的 ,通过对信号量控制从而实现进程间同步的最基本操作。 采用 P、 V 原语解决生产者 消费者问题的算法 描述 [4]。 采用 P、 V 原语解决生产者 / 消费者问题的算法如下 : (1)信号量和互斥量的设置 :设代表缓冲池中空白缓冲区和满缓冲区的信号量分别为Empty 和 Full ,Empty 和 Full 的初值分别为 n (缓冲池中缓冲区数 ) 和 0。 设两个互斥 量MuxProducer 和 MuxCustomer ,它们的初值都为 1。 (2) 生产者算法 :采集生成 数 据。 P( Empty) 申请一个空白缓冲 ; P (MuxPro2ducer)申请对空白缓冲资源独占使用 ; 找出一空白缓冲区 ,把数据拷贝到缓冲区。 V(MuxPro2ducer)释放对空白缓冲资源独占使用 ; V(Full)产生一个满缓冲区。 消费者算法 :做好接收准备。 P( Full)申请一个满缓冲 ; P(MuxCustomer)申请对满缓冲资源独占使用。 找出一满缓冲区。 把满缓冲区中数据拷贝到用户数据区。 V (MuxCustomer) 释放对满缓冲资源独占使用 ; V(Empty)产生一个空白缓冲区进行数据处理。 图 P操作流程图 入 口 sem=sem1 sem=sem1 S=0 唤醒等待队列中的一个进程式 返回或转进程调度 返回 否 是 浙江林学院天目学院本科生毕业设计(论文) 9 图 V操作流程图 WINDOWS 系统中的具体实现方法 在 WINDOWS 系统中 ,实现内存共享的办法可以采用共享变量 [5] 和共享内存文件 [6] 等方 法。 为了通用性 ,采用了以上两种方法的结合 ,并把生产者和消费者中的加入数据到缓冲区和从缓冲区中取出数据的过程封装到一个 DLL 中 [7] ,这样 ,可以大大方便应用程序的编制 ,也使进行应用程序设计的人员不必关心该问题中具体实现过程。 用户程序中只需要调用该 DLL 的函数就可以实现所需功能 ,而且由于这些函数是在 DLL 中 ,它们在内存中只有一个副本 ,这对当生产者和消费者群体数目较大时对内存空间的节省也是很可观的。 入 口 sem=sem1 sem=sem1 S=0 唤醒等待队列中的一个进程式 返回或转进程调度 返回 否 是 浙江林学院天目学院本科生毕业设计(论文) 10 3 系统实现 程序结构 程序分为一个主函数、分别用于模拟消费和生产者的两个函数以及三个辅助性的函数。 主函数用于初始化缓冲区和各个同步对象,并完成线程信息的读入和记录,最后根据该组线程记录启动模拟 线程,并等待所有线程的运行结束后退出整个程序。 消费者和生产者函数运行于相应线程中完成对缓冲区的读写动作,根据此处生产消费模型的特点,生产者和消费者线程之间通过同步对象的使用实现了生产和消费动作的同步与互 斥,是本系统 的核心所在。 另外三个辅助函数被生产者和消费者函数调用,是上述生产和消费函数中对缓冲区访问功能的一些包装。 生产者 模拟函数代码 int CProducerThread::Run() { CPCDlg *pDlg。 pDlg=(CPCDlg*)thism_Parent。 int temp=0。 int t=0。 while(pDlgm_continue){ DWORD temp=WaitForMultipleObjects(SIZE_OF_BUFFER,pDlgm_hEmptySemaphore,FALSE,INFINITE)。 pDlgm_PArray[temp]=1。 pDlgm_PStr[temp]=thism_name。 pDlgInvalidateRect(CRect(17+temp*40,17,20+(temp+1)*40,200))。 srand( (unsigned)time( NULL ) )。 t=rand()%5。 t+=1。 Sleep(t*750+500)。 pDlgm_Array[temp]=1。 pDlgm_PArray[temp]=0。 浙江林学院天目学院本科生毕业设计(论文) 11 pDlgm_PStr[temp]=。 pDlgInvalidateRect(CRect(17+temp*40,17,20+(temp+1)*40,200))。 srand( (unsigned)time( NULL ) )。 t=rand()%10。 t+=10。 ReleaseSemaphore(pDlgm_hFullSemaphore[temp],1,NULL)。 Sleep(t*100)。 } thisExitInstance()。 return CWinThread::Run()。 } 消费者模拟函数代码 int CConsumerThread::Run() { // TODO: Add your specialized code here and/or call the base class CPCDlg *pDlg。 pDlg=(CPCDlg*)thism_Parent。 int temp=0。 int t=0。 CString str。 while(pDlgm_continue){ DWORD temp=WaitForMultipleObjects(SIZE_OF_BUFFER,pDlgm_hFullSemaphore,FALSE,INFINITE)。 pDlgm_CArray[temp]=1。 pDlgm_CStr[temp]=thism_name。 pDlgInvalidateRect(CRect(17+temp*40,17,20+(temp+1)*40,200))。 srand( (unsigned)time( NULL ) )。 t=rand()%5。 浙江林学院天目学院本科生毕业设计(论文) 12 t+=1。 Sleep(t*750+500)。 pDlgm_Array[temp]=0。 pDlgm_CArray[temp]=0。 pDlgm_CStr[temp]=。 pDlgInvalidateRect(CRect(17+temp*40,17,20+(temp+1)*40,200))。 srand( (unsigned)time( NULL ) )。 t=rand()%10。 t+=10。 ReleaseSemaphore(pDlgm_hEmptySemaphore[temp],1,NULL)。 Sleep(t*100)。 } thisExitInstance()。 return CWinThread::Run()。 } MFC 界面的设计 MFC 的介绍 MFC (Microsoft Foundation Class Library)中的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立 Windows下的应用程序,这是一种相对 SDK来说更为简单的方法。 因为总体上, MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓。 Microsoft Visual C++提供了相应的工具来完成这个工作: AppWizard可以 用来生成初步的框架文件(代码和资源等);资源编辑器用于帮助直观地设计用户接口; ClassWizard用来协助添加代码到框架文件;最后,编译,则通过类库实现了应用程序特定的逻辑。 1. 封装 构成 MFC框架的是 MFC 类库。 MFC 类库是 C++类库。 这些类或者封装了 Win32 应用程序编程接口,或者封装了应用程序的概念,或者封装了 OLE 特性,或者封装了 ODBC 和DAO 数据访问的功能,等等,分述如下。 ( 1)对 Win32 应用程序编程接口的封装 用一个 C++ Object来包装一个 Windows Object。 例如: class CWnd是一个 C++ window object,浙江林学院天目学院本科生毕业设计(论文) 13 它把 Windows window(HWND)和 Windows window 有关的 API 函数封装在 C++ window object 的成员函数内,后者的成员变量 m_hWnd 就是前者的窗口句柄。 ( 2)对应用程序概念的封装 使用 SDK编写 Windows 应用程序时,总要定义窗口过程,登记 Windows Class,创建窗口,等等。 MFC 把许多类似的处理封装起来,替程序员完成这些工作。 另外, MFC 提出了以文档 视图为中心的编程模式, MFC 类库封装了对它的支 持。 文档是用户操作的数据对象,视图是数据操作的窗口,用户通过它处理、查看数据。 ( 3)对 COM/OLE 特性的封装 OLE 建立在 COM 模型之上,由于支持 OLE 的应用程序必须实现一系列的接口( Interface),因而相当繁琐。 MFC 的 OLE 类封装了 OLE API 大量的复杂工作,这些类提供了实现 OLE的更高级接口。 ( 4)对 ODBC 功能的封装 以少量的能提供与 ODBC 之间更高级接口的 C++类,封装了 ODBC API的大量的复杂的工作,提供了一种数据库编程模式。 2. 继承 首先, MFC 抽象出众多类的共同特性,设 计出一些基类作为实现其他类的基础。 这些类中,最重要的类是 CObject 和 CCmdTarget。 CObject 是 MFC 的根类,绝大多。操作系统进程管理演示系统开发(生产者-消费者)毕业论文(编辑修改稿)
相关推荐
量少的资源来创造尽量多的价值,包括回收再利用与环保等,不但模具要能这样,而且更要使模具用户也能这样。 除上述所说的发展趋势之我见 以外,同时我还认为,从与模具用户的关系来说,模具和模具生产企业向来是比较依赖和比较被动的,发言权很少。 我认为,这一现象应逐渐适当改变。 这就要求我们模具行业要自强,要通过充分展示自己的实力和能力,以及创新发展来逐步变被动为主动。 国庆前,我在海尔模具公司参观
认为:当支撑构件发生屈曲时,与支撑杆端部相连的节点板应具有足够的延性,以便满足支撑杆端部转动,节点板的延性破坏模式应为流塑模式;并建议:支撑杆与节点板连接节点的承压能力和屈服能力,不应小于采用预计的实际屈服应力计算的构件屈服能力。 2020 年聂华 [46]对钢结构支撑节点板与梁柱连接的内力计算方法进行比较分析研究。 他认为:主要对比分析了国内常用的简化计算方法和美国的均 力法
目设计规划,项目 整 一层楼面面积 2585 ㎡,根据项目的建筑预算,街道办事处回迁建设成本估算 万元,现汇补差 415 万元,回迁成本估算合计 万元。 项目的报建等行政费用: 项 目的报建等行政费用约需要 6600 万元,根据本项目享受棚户改造优惠政策,可减免 35%的行政费用,本项目需交纳报建等行政规费约4290 万元。 根据以上的综合分析本项目在收购股权和债权
1,fp)。 //文件目录 } fseek(fp,512L,0)。 fwrite(amp。 emptytable,sizeof(struct empty),1,fp)。 //位示图 fclose(fp)。 } void dir() //显示文件目录 { int i,j。 FILE *fp。 if((fp=fopen(filesys,rb))==NULL) { printf(can not
:管道通信,在传递信息时,用水通过管道的动画形式显示信息的传送。 ( 5)死 锁避免模块:实现银行家算法,通过已知的信息,做到判断是否会产生死锁,如果不会产生死锁,显示资源的分配情况。 系统功能模块 本系统的 功能模块图,请参见图 : 防灾科技学院毕业设计 8 图 系统功能模块图 系统各功能模块介绍 本系统分为五个模块,分别是进程控制 模块 ,进程调度 模块 ,进程同步 模块 ,进程通信 模块
成一个统一的结构,而数据流图是组织这些信息的一种最好的方法之一,如图 所示,操作系统网上试验系统的整体的数据流图。 陕西理工学院毕业设计 第 6 页 共 59 页 服 务 器 数据 处 理服 务 器 数据 中 心用 户登 录与 服 务 器交 付 数 据是 否 登 录成 功根 据 不 同 请 求 存 取 不 同 数 据网 络 通 信处 理 登 录信 息T+主 界面点 击 操 作处 理显 示 操作