操作系统进程管理演示系统开发生产者消费者毕业设计

上传人:1888****888 文档编号:38304161 上传时间:2021-11-06 格式:DOC 页数:85 大小:687.50KB
收藏 版权申诉 举报 下载
操作系统进程管理演示系统开发生产者消费者毕业设计_第1页
第1页 / 共85页
操作系统进程管理演示系统开发生产者消费者毕业设计_第2页
第2页 / 共85页
操作系统进程管理演示系统开发生产者消费者毕业设计_第3页
第3页 / 共85页
资源描述:

《操作系统进程管理演示系统开发生产者消费者毕业设计》由会员分享,可在线阅读,更多相关《操作系统进程管理演示系统开发生产者消费者毕业设计(85页珍藏版)》请在装配图网上搜索。

1、浙江林学院天目学院本科生毕业设计(论文) 本 科 生 毕 业 设 计(论文)( 2008 届)工程技术系题 目: 操作系统进程管理演示系统开发(生产者-消费者) 学生姓名: 学 号: 专业名称: 班 级: 指导教师 姓名: 系(部): 信息工程学院 职称: 副教授 2008年 5 月 16 日操作系统进程管理演示系统的研究与实现摘要:操作系统是计算机专业最重要的基础课程之一,其中同步问题是最难的部分。本文通过分析操作系统进程同步与互斥的问题,然后利用P,V操作实现进程同步与互斥,并利用该算法设计了生产者-消费者模拟演示系统。通过该演示系统展现进程的管理(生产者-消费者)可以用于操作系统的教学中

2、。关键词:生产者-消费者问题;进程;同步;互斥Research and Implementation of Process Management System DemonstrationAbstract: Computer operating system is one of the most important basic courses, and synchronization is one of the most difficult part. This paper will analyze the process of the operating system simultaneous

3、ly with the problem of mutual exclusion, and then using P, V synchronization achieving the operation about the process of mutually exclusive, and using the algorithm design of the producers - consumers mock demonstration system. Through the demonstration system about the process of management (produ

4、cers - consumers) can be used for the teaching of the operating system.Key words: producers; consumers; the process of synchronization,;mutex目录1 引言11.1 选题的意义11.1.1 开发系统的背景11.1.2开发系统的目的11.1.3 开发系统的意义21.2 P,V操作的简介21.2.1 P,V操作的介绍21.2.2 进程同步的实现31.2.3 进程互斥的实现31.3 生产者-消费者问题的描述31.3.1 问题的描述41.3.2 模型分析42 系统需

5、求分析72.1 任务概述72.1.1 目标72.1.2 运行环境72.1.3 编程工具72.2 演示系统的分析72.2.1 功能需求分析72.2.2 系统功能模块划分72.2.3 系统流程分析73 系统实现103.1 程序结构103.1.1生产者模拟函数代码103.1.2 消费者模拟函数代码113.2 MFC界面的设计123.2.1 MFC的介绍123.2.2 MFC界面效果143.3 系统功能的实现174 系统演示194.1 系统演示的准备194.2 系统演示的效果194.2.1 单生产者-单消费者模拟效果194.2.2 多生产者-多消费者模拟效果204.3 系统演示结论225 总结2326

6、浙江林学院天目学院本科生毕业设计(论文)1 引言1.1 选题的意义 操作系统(简称OS-operating system)是高等教育计算机应用专业教学计划中一门重要的专业基础课程。众所周知,计算机是各种信息系统的核心,CPU被喻为计算机系统的心脏,OS 被喻为计算机系统的大脑,是用户与计算机系统打交道的环境界面,心脏和大脑的紧密配合,才使计算机系统成为电子时代、信息社会无所不在的基础设施1。OS是在计算机原理与数据结构的基础上的一门提高性课程,是了解和掌握计算机应用系统的基础。其任务是了解操作系统的基本概念,理解计算机系统的资源(软件资源和硬件资源)如何组织,OS 如何有效地管理这些系统资源,

7、用户如何通过OS与计算机系统打交道。通过学习OS可以进一步理解在计算机系统上运行的其他各类OS并懂得在OS支持下建立自己的应用系统,因此OS是计算机应用的基础2。进程同步包括进程的互斥和进程的同步两个方面,是操作系统管理共享资源的一种手段.也是操作系统学习中的难点。操作系统教学中有最经典的四个同步、互斥问题为: 生产者消费者问题、哲学家进餐问题、理发师在空闲中的睡眠问题、读者作者问题, 深入地分析和理解这些问题, 对全面掌握同步、互斥问题大有益处,对学校操作系统这门课也有很重要的意义。1.1.1 开发系统的背景有关操作系统的教材大多注重理论,而绝大多数学习者一生都不可能参于操作系统的研究工作,

8、他们需要的是对理论的理解和对实用系统的灵活应用。进程同步与互斥的实现是操作系统中的重点内容,也是学习的难点部分。生产者-消费者问题是经典同步问题之一,不但在操作系统中很重要, 而且在分布式应用开发、实时数据库管理系统、CIMS 网络工程中都会遇到。但是以往人们只能从原理上加以理解, 没有直观的认识, 因而无法实际使用它。在现代操作系统UNIX、Windows 多进程环境下,我们将利用C语言实现多个生产者-消费者可视化同步运行。1.1.2 开发系统的目的操作系统是计算机学科中的一门重要课程。对于学习者来说, 进程的同步与互斥问题是个令人头痛的问题, 尤其是进程同步与互斥算法的实现, 更让人往往不

9、知如何下手。本文通过具体实例, 给出了利用、操作解决进程同步与互斥问题的简单方法。在操作系统教学过程中,因为部分教科书中对生产者和消费者问题的解释不够全面,学生在理解应用过程中经常出现一些问题。所以本文对生产者和消费者问题算法进行描述,利用操作系统进程管理演示系统(生产者-消费者)进行模拟演示。1.1.3 开发系统的意义采用信号量机制与PV操作来协调进程的同步, 一直是操作系统教学中的一个难点问题, 而且由它引出的一系列问题, 如: 生产者与消费者、读者与写者、哲学家进餐、理发师等问题都是很典型的进程同步与互斥问题。这类题型变化多、实例多,又与实际生活中的问题有着紧密联系3。“进程调度”涉及到

10、操作系统的内核操作,原理性较强,也较为抽象,如只是依靠书本的文字和图形,学生理解起来会很吃力。在操作系统课教学中,就引入了可视化设计帮助学生理解。操作系统进程管理演示系统(生产者-消费者)可以可视化的向学生展示进程调度,便于教学工作,提高学生的学习效率。1.2 P,V操作的简介1.2.1 P,V操作的介绍在操作系统中P,V操作是一种原语操作, 是不可分割的操作, 它要么执行完毕, 要么就不执行, 也就是说P,V操作一旦执行就不允许被中断, 直到执行完成为止。P,V操作主要通过对信号量的操作来实现对资源的控制, 从而控制进程的执行。信号量是和特定资源相对应的数据结构, 由整型数值和指针两部分所组

11、成, 其中整型数值表示资源情况,只能由P,V操作来改变, 它有三种值:S0 表示当前可用资源的数量;S0 其绝对值表示当前等待该类资源的进程数量;=0 表示当前没有可用资源也没进程等待该类资源。P 操作相当于申请资源, 进程在使用资源之前, 应先调用操作申请所须资源, 若资源申请被满足, 则进程可以继续执行, 否则进程将调用阻塞原语阻塞自己。P(S)的具体执行过程如下:S=S-1;若S0, 则进程继续执行;若S0, 则进程继续执行;若S0, 则调用唤醒原语唤醒等待该资源的进程, 原进程继续执行。 1.2.2 进程同步的实现进程同步是指为了共同完成某项任务, 具有伙伴关系的进程在执行时间次序上必

12、须遵循确定的规律。多个进程为了共同完成任务, 须要按照一定的次序去执行, 各个进程在执行时在时间上具有明显的先后次序, 即进程必须按照一定的顺序去执行。这和进程互斥明显不同。实现进程同步的关键在于当一个进程执行以后, 确定下一个将要执行的进程, 并用V操作使该进程可以执行。在实现时, 我们可以在各进程中完成特定功能的程序段两端加上P操作和V操作, 它们分别使用不同的信号量, 用以在各进程间传递信息。通常, 能够最先执行的进程中, P操作中所使用的信号量的初值大于, 而其它进程中, 第一个P操作所对应的信号量的初值为零。这样, 在执行时,第一个进程先执行, 执行完V操作后, 使另一个进程可以执行

13、, 依次传递下去, 就可以实现各个进程按照一定的顺序执行了。1.2.3 进程互斥的实现进程互斥是进程间由于竞争资源而产生的相互制约关系。对于多个使用同一资源的进程, 它们对于资源的竞争导致它们在执行时的异步性特征。竞争到资源的进程可以立即投入运行, 而没有竞争到资源的进程只能阻塞自己以等待资源。进程中用以访问这种被竞争的独占资源(临界资源)的程序段叫做临界区。要使多个进程不会同时访问临界资源, 只需要让它们在执行时不会同时执行临界区内的代码就可以了。因此我们可以在各进程的临界区的两端分别加入对于同一个初值为的1信号量的P,V操作, 就可以实现当一个进程进人临界区后, 其它进程不能够再进入临界区

14、, 直到先前进人临界区的进程退出临界区后,通过V操作唤醒其它某个等待进程后, 才会有进程再次访问临界资源, 从而实现多个进程对于临界资源的互斥访问。1.3 生产者-消费者问题的描述1.3.1 问题的描述设有若干个生产者进程P1, P2, P3,Pl; 若干个消费者进程C1, C2, C3,Cm, 它们通过一个由n 个缓冲区组成的有界缓冲池联系起来。每个缓冲区存放一个“产品”, 生产者进程不断地生产产品, 并把它们放入缓冲池内, 消费者进程不断地从缓冲池内取产品并消费之。这里既要求同步, 也需要恰当地互斥。同步存在于p、c 两类进程之间: 当缓冲池已放满了产品(供过于求) , 生产者进程必须等待

15、; 当缓冲池已空( 供不应求) , 消费者应等待。互斥存在于所有进程之间, 各自需要独占地使用缓冲区。1.3.2 模型分析1单缓冲区的单生产者-单消费者问题模型限制条件:整个系统仅有唯一的一个缓冲区,活动进程仅有一个生产者Producer 和一个消费者Consumer。进程关系分析:同步关系:只有在Producer 向缓冲区放入物品后,Consumer 才能够从缓冲区中取出物品消费;因此存在Consumer 对于Producer 的同步依赖。(2)只有在Consumer 从缓冲区取出物品后,Producer 才能够继续向缓冲区中放入新生产的物品;因此存在Producer 对于Consumer

16、的同步依赖。互斥关系:Producer 放入物品的同时,Consumer 是不能从缓冲区中取出物品的;反之亦然。因此存在Producer 和Consumer 之间的互斥关系。2单缓冲区的多生产者-多消费者问题模型限制条件:整个系统仅有唯一的一个缓冲区,活动进程有n 个生产者Producer 和m 个消费者Consumer。进程关系分析同步关系:(1)对于任意的i(1in),j(1jm),只有在ProducerI 向缓冲区放入物品后,ConsumerJ才能够从缓冲区中取出物品消费;因此存在ConsumerJ 对于ProducerI的同步依赖。 (2)对于任意的i(1in),j(1jm),只有在C

17、onsumerJ从缓冲区取出物品后,ProducerI才能够继续向缓冲区中放入新生产的物品;因此存在ProducerI 对于ConsumerJ 的同步依赖。互斥关系:(1)对于任意的i(1in),j(1jm),ProducerI 放入物品的同时,ConsumerJ是不能从缓冲区中取出物品的;反之亦然。因此存在ProducerI 和ConsumerJ之间的互斥关系。 (2)对于任意的i(1in),j(1jn),ij,ProducerI 放入物品的同时, ProducerJ是不能放入物品的。因此存在ProducerI 和ProducerJ 之间的互斥关系。(3)对于任意的i(1im),j(1jm)

18、,ij, ConsumerI 从缓冲区中取出物品的同时,ConsumerJ 是不能从缓冲区中取出物品的。因此存在ConsumerI 和ConsumerJ 之间的互斥关系。3多缓冲区的单生产者-单消费者问题模型限制条件:整个系统有K 个缓冲区,活动进程仅有一个生产者Producer 和一个消费者Consumer。进程关系分析同步关系:(1)只有在Producer 向缓冲区放入物品后,Consumer 才能够从缓冲区中取出物品消费;因此存在Consumer 对于Producer 的同步依赖。(2)只有在Consumer 从缓冲区取出物品后,Producer 才能够继续向缓冲区中放入新生产的物品;因

19、此存在Producer 对于Consumer 的同步依赖。互斥关系:(1)对于任意的i(1iK),j(1jK),ij,Producer 向空闲缓冲区BufferKi放入物品的同时,Consumer 可以从满缓冲区BufferKj中取出物品;反之亦然。因此Producer 和Consumer 之间不存在针对缓冲区的互斥关系。(2) 尽管Producer 和Consumer 之间不存在针对缓冲区的互斥关系,但由于Producer和Consumer 都需要在操作缓冲区的同时对缓冲区队列进行维护,缓冲区队列也就成为两者间新的临界资源,因此Producer 和Consumer 之间出现了针对缓冲区队列的

20、互斥关系。4多缓冲区的多生产者-多消费者问题模型限制条件:整个系统有K 个缓冲区,活动进程有n 个生产者Producer 和m 个消费者Consumer。进程关系分析同步关系:(1)对于任意的i(1 i n),j(1jm),只有在ProducerI 向缓冲区放入物品后,ConsumerJ 才能够从缓冲区中取出物品消费;因此存在ConsumerJ 对于ProducerI 的同步依赖。(2)对于任意的i(1in),j(1jm),只有在ConsumerJ 从缓冲区取出物品后,ProducerI 才能够继续向缓冲区中放入新生产的物品;因此存在ProducerI 对于ConsumerJ 的同步依赖。互斥

21、关系:(1)对于任意的i(1in),j(1jm),s(1sK),t(1tK),st,ProducerI 向空闲缓冲区BufferKs放入物品的同时,ConsumerJ 可以从满缓冲区BufferKt中取出物品;反之亦然。因此ProducerI 和ConsumerJ 之间不存在针对缓冲区的互斥关系。(2)对于任意的i(1in),j(1jn),ij,s(1sK),t(1tK),st,ProducerI 向空闲缓冲区BufferKs放入物品的同时,ProducerJ 是可以向另一空闲缓冲区BufferKt放入物品的。因此ProducerI 和ProducerJ 之间不存在针对缓冲区的互斥关系。(3)

22、对于任意的i(1im),j(1jm),ij,s(1sK),t(1tK),st,ConsumerI 从空闲缓冲区BufferKs中取出物品的同时,ConsumerJ 是可以从另一空闲缓冲区BufferKt 中取出物品的。因此ConsumerI 和ConsumerJ 之间不存在针对缓冲区的互斥关系。(4)对于任意的i(1in),j(1jn),ij,s(1sm),t(1tm),st,尽管ProducerI 和ProducerJ 之间、ConsumerS 和ConsumerT 之间、ProducerI 和ConsumerS 之间不存在针对缓冲区的互斥关系,但由于ProducerI、ProducerJ、

23、ConsumerS 和ConsumerT 都需要在操作缓冲区的同时对缓冲区队列进行维护,缓冲区队列成为所有进程间的新的临界资源,因此ProducerI 和ProducerJ 之间、ConsumerS 和ConsumerT 之间、ProducerI 和ConsumerS 之间出现了针对缓冲区队列的互斥关系。以上这四种情形是逐个包含关系,所以我们只要设计出能完成第四种条件下的生产者-消费者模拟系统。2 系统需求分析2.1 任务概述2.1.1 目标学生通过该演示系统能形象的看到进程的调度,以便能更加透彻的理解操作系统中消费者-生产者的同步互斥问题。2.1.2 运行环境操作系统:WINDOWS 98/

24、2000/XP。2.1.3 编程工具编程工具:microsoft visual c+。 Visual C+是一个功能强大的可视化软件开发工具。自1993年Microsoft公司推出Visual C+1.0后,随着其新版本的不断问世,Visual C+已成为专业程序员进行软件开发的首选工具。Visual C+6.0不仅是一个C+编译器,而且是一个基于Windows操作系统的可视化集成开发环境(integrated development environment,IDE)。Visual C+6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导Class Wizard等开发

25、工具。 这些组件通过一个名为Developer Studio的组件集成为和谐的开发环境。2.2 演示系统的分析2.2.1 功能需求分析1. 操作系统进程管理演示系统是采用动画和交互的方式对生产者-消费者问题进行演示、教学。2. 学生可以输入生产者,消费者的数量来进行不同情形的的演示。 2.2.2 系统功能模块划分 系统已经设定一个大小固定的缓冲池(缓冲池大小11),缓冲池可以实时的显示生产者生产情况和消费者的消费情况,同时用户可以设定生产者的数目来进行生产(生产者数目1-10);设定消费者的数目来进行消费(消费者数目1-10),由此系统可以模拟上面所描述的四种生产者-消费者模型,同时用户可以实

26、时的停止生产者及消费者的动作,做到分步展示的效果,有效率的起到教学的作用。 2.2.3 系统流程分析1.算法的设计 P,V原语是操作系统中定义的,通过对信号量控制从而实现进程间同步的最基本操作。采用P、V 原语解决生产者-消费者问题的算法描述4。采用P、V 原语解决生产者/ 消费者问题的算法如下: (1)信号量和互斥量的设置:设代表缓冲池中空白缓冲区和满缓冲区的信号量分别为Empty 和Full ,Empty 和Full 的初值分别为n (缓冲池中缓冲区数) 和0 。设两个互斥量MuxProducer 和MuxCustomer ,它们的初值都为1。(2) 生产者算法:采集生成数据; P( Em

27、pty) 申请一个空白缓冲;P (MuxPro2ducer)申请对空白缓冲资源独占使用;找出一空白缓冲区,把数据拷贝到缓冲区;V(MuxPro2ducer)释放对空白缓冲资源独占使用;V(Full)产生一个满缓冲区。消费者算法:做好接收准备;P( Full)申请一个满缓冲;P(MuxCustomer)申请对满缓冲资源独占使用。找出一满缓冲区;把满缓冲区中数据拷贝到用户数据区。V (MuxCustomer) 释放对满缓冲资源独占使用;V(Empty)产生一个空白缓冲区进行数据处理。2.算法流程图入 口sem=sem-1 sem=sem-1S=0唤醒等待队列中的一个进程式返回或转进程调度 返回否是

28、 图2.1 P操作流程图入 口sem=sem-1 sem=sem-1Sm_Parent; int temp=0;int t=0;while(pDlg-m_continue) DWORD temp=WaitForMultipleObjects(SIZE_OF_BUFFER,pDlg-m_hEmptySemaphore,FALSE,INFINITE);pDlg-m_PArraytemp=1;pDlg-m_PStrtemp=this-m_name;pDlg-InvalidateRect(CRect(17+temp*40,17,20+(temp+1)*40,200);srand( (unsigned)

29、time( NULL ) ); t=rand()%5;t+=1;Sleep(t*750+500);pDlg-m_Arraytemp=1;pDlg-m_PArraytemp=0;pDlg-m_PStrtemp=;pDlg-InvalidateRect(CRect(17+temp*40,17,20+(temp+1)*40,200);srand( (unsigned)time( NULL ) ); t=rand()%10;t+=10;ReleaseSemaphore(pDlg-m_hFullSemaphoretemp,1,NULL);Sleep(t*100); this-ExitInstance()

30、;return CWinThread:Run();3.1.2 消费者模拟函数代码int CConsumerThread:Run() / TODO: Add your specialized code here and/or call the base classCPCDlg *pDlg;pDlg=(CPCDlg*)this-m_Parent; int temp=0;int t=0;CString str;while(pDlg-m_continue) DWORD temp=WaitForMultipleObjects(SIZE_OF_BUFFER,pDlg-m_hFullSemaphore,FA

31、LSE,INFINITE);pDlg-m_CArraytemp=1;pDlg-m_CStrtemp=this-m_name;pDlg-InvalidateRect(CRect(17+temp*40,17,20+(temp+1)*40,200);srand( (unsigned)time( NULL ) ); t=rand()%5;t+=1;Sleep(t*750+500);pDlg-m_Arraytemp=0;pDlg-m_CArraytemp=0;pDlg-m_CStrtemp=;pDlg-InvalidateRect(CRect(17+temp*40,17,20+(temp+1)*40,2

32、00);srand( (unsigned)time( NULL ) ); t=rand()%10;t+=10;ReleaseSemaphore(pDlg-m_hEmptySemaphoretemp,1,NULL);Sleep(t*100); this-ExitInstance();return CWinThread:Run();3.2 MFC界面的设计3.2.1 MFC的介绍MFC (Microsoft Foundation Class Library)中的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立Windows下的应用程序,这是一种相对SDK来说更为简单的方法

33、。因为总体上,MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓。Microsoft Visual C+提供了相应的工具来完成这个工作:AppWizard可以用来生成初步的框架文件(代码和资源等);资源编辑器用于帮助直观地设计用户接口;ClassWizard用来协助添加代码到框架文件;最后,编译,则通过类库实现了应用程序特定的逻辑。1封装 构成MFC框架的是MFC类库。MFC类库是C+类库。这些类或者封装了Win32应用程序编程接口,或者封装了应用程序的概念,或者封装了OLE特性,或者封装了ODBC和DAO数据

34、访问的功能,等等,分述如下。(1)对Win32应用程序编程接口的封装用一个C+ Object来包装一个Windows Object。例如:class CWnd是一个C+ window object,它把Windows window(HWND)和Windows window有关的API函数封装在C+ window object的成员函数内,后者的成员变量m_hWnd就是前者的窗口句柄。(2)对应用程序概念的封装使用SDK编写Windows应用程序时,总要定义窗口过程,登记Windows Class,创建窗口,等等。MFC把许多类似的处理封装起来,替程序员完成这些工作。另外,MFC提出了以文档-视

35、图为中心的编程模式,MFC类库封装了对它的支持。文档是用户操作的数据对象,视图是数据操作的窗口,用户通过它处理、查看数据。(3)对COM/OLE特性的封装OLE建立在COM模型之上,由于支持OLE的应用程序必须实现一系列的接口(Interface),因而相当繁琐。MFC的OLE类封装了OLE API大量的复杂工作,这些类提供了实现OLE的更高级接口。(4)对ODBC功能的封装以少量的能提供与ODBC之间更高级接口的C+类,封装了ODBC API的大量的复杂的工作,提供了一种数据库编程模式。2继承 首先,MFC抽象出众多类的共同特性,设计出一些基类作为实现其他类的基础。这些类中,最重要的类是CO

36、bject和CCmdTarget。CObject是MFC的根类,绝大多数MFC类是其派生的,包括CCmdTarget。CObject 实现了一些重要的特性,包括动态类信息、动态创建、对象序列化、对程序调试的支持,等等。所有从CObject派生的类都将具备或者可以具备CObject所拥有的特性。CCmdTarget通过封装一些属性和方法,提供了消息处理的架构。MFC中,任何可以处理消息的类都从CCmdTarget派生。针对每种不同的对象,MFC都设计了一组类对这些对象进行封装,每一组类都有一个基类,从基类派生出众多更具体的类。这些对象包括以下种类:窗口对象,基类是CWnd;应用程序对象,基类是C

37、winThread;文档对象,基类是Cdocument,等等。程序员将结合自己的实际,从适当的MFC类中派生出自己的类,实现特定的功能,达到自己的编程目的。3虚拟函数和动态约束 MFC以“C+”为基础,自然支持虚拟函数和动态约束。但是作为一个编程框架,有一个问题必须解决:如果仅仅通过虚拟函数来支持动态约束,必然导致虚拟函数表过于臃肿,消耗内存,效率低下。例如,CWnd封装 Windows窗口对象时,每一条Windows消息对应一个成员函数,这些成员函数为派生类所继承。如果这些函数都设计成虚拟函数,由于数量太多,实现起来不现实。于是,MFC建立了消息映射机制,以一种富有效率、便于使用的手段解决消

38、息处理函数的动态约束问题。这样,通过虚拟函数和消息映射,MFC类提供了丰富的编程接口。程序员继承基类的同时,把自己实现的虚拟函数和消息处理函数嵌入MFC的编程框架。MFC编程框架将在适当的时候、适当的地方来调用程序的代码。本书将充分的展示MFC调用虚拟函数和消息处理函数的内幕,让读者对MFC的编程接口有清晰的理解。4MFC的宏观框架体系 如前所述,MFC实现了对应用程序概念的封装,把类、类的继承、动态约束、类的关系和相互作用等封装起来。这样封装的结果对程序员来说,是一套开发模板(或者说模式)。针对不同的应用和目的,程序员采用不同的模板。例如,SDI应用程序的模板,MDI应用程序的模板,规则DL

39、L应用程序的模板,扩展DLL应用程序的模板,OLE/ACTIVEX应用程序的模板,等等。为了支持对应用程序概念的封装,MFC内部必须作大量的工作。例如,为了实现消息映射机制,MFC编程框架必须要保证首先得到消息,然后按既定的方法进行处理。又如,为了实现对DLL编程的支持和多线程编程的支持,MFC内部使用了特别的处理方法,使用模块状态、线程状态等来管理一些重要信息。虽然,这些内部处理对程序员来说是透明的,但是,懂得和理解MFC内部机制有助于写出功能灵活而强大的程序。总之,MFC封装了Win32 API,OLE API,ODBC API等底层函数的功能,并提供更高一层的接口,简化了Windows编

40、程。同时,MFC支持对底层API的直接调用。MFC提供了一个Windows应用程序开发模式,对程序的控制主要是由MFC框架完成的,而且MFC也完成了大部分的功能,预定义或实现了许多事件和消息处理,等等。框架或者由其本身处理事件,不依赖程序员的代码;或者调用程序员的代码来处理应用程序特定的事件。MFC是C+类库,程序员就是通过使用、继承和扩展适当的类来实现特定的目的。例如,继承时,应用程序特定的事件由程序员的派生类来处理,不感兴趣的由基类处理。实现这种功能的基础是C+对继承的支持,对虚拟函数的支持,以及MFC实现的消息映射机制13。3.2.2 MFC界面效果这是系统界面设计的截图: 图3.1 M

41、FC界面界面上有2个静态文本,2个编辑框和7个按纽组成:1. 启动生产者按纽的代码:void CPCDlg:OnPstar() UpdateData(true);this-m_continue=true;this-SetTimer(100,1000,NULL);if( this-m_np0&this-m_np11) m_sp.EnableWindow(false); CString str; for( unsigned i=0; im_np;i+) str.Format(P%d,i);this-m_PTi =new CProducerThread(this,str);this-m_PTi-Cr

42、eateThread(CREATE_SUSPENDED);VERIFY(this-m_PTi-SetThreadPriority(THREAD_PRIORITY_IDLE);this-m_PTi-ResumeThread(); else MessageBox(生产者数目必须在1-10之间,出错了);2. 启动消费者按纽的代码:void CPCDlg:OnStartc() UpdateData(true); this-m_continue=true;if( this-m_nc0&this-m_nc11) m_sc.EnableWindow(false); CString str; for( un

43、signed i=0; im_nc;i+) str.Format(C%d,i);this-m_CTi =new CConsumerThread(this,str);this-m_CTi-CreateThread(CREATE_SUSPENDED);VERIFY(this-m_CTi-SetThreadPriority(THREAD_PRIORITY_IDLE);this-m_CTi-ResumeThread(); else MessageBox(消费者数目必须在1-10之间,出错了);3. 初始状态按纽的代码:void CPCDlg:OnRefresh() / TODO: Add your c

44、ontrol notification handler code herem_continue=false;for( int i=0;iSIZE_OF_BUFFER;i+)m_hFullSemaphorei=CreateSemaphore(NULL,0,1,NULL);m_hEmptySemaphorei=CreateSemaphore(NULL,1,1,NULL);m_Arrayi=0;m_CArrayi=0;m_PArrayi=0;m_CStri=;m_PStri=; Invalidate();m_sc.EnableWindow(true);m_sp.EnableWindow(true);

45、4. 退出按纽的代码:void CPCDlg:OnExit() EndDialog(0);3.3 系统功能的实现程序中共有6 个线程, 两个生产者线程, 两个消费者线程,另外两个线程则根据相同概率改变身份来模拟生产者或者消费者, 以便构建任意多个生产者- 消费者的可视化环境。为方便观察生产和消费进展情况, 设置了两个时间控制变量控制生产者和消费者的生产和消费周期( 即: 线程的run 方法) , 它们是用两个文本输入框分别实现数据输入的。生产者和消费者问题需要的界面效果是, 生产者在消费者前面不停地生产, 而消费者则在生产者后面不停的消费, 呈现追赶的态势。但是不能约定推进顺序和速度。因此,

46、用了11个正方形方框代表11个缓冲区 。生产者放一个产品, 就在生产者当前指针位置的方框用红色填充, 指针顺时针前进一格, 指向下一个可以放产品的缓冲区; 如果当前没有空缓冲区位置可以放货, 就进入等待状态, 等待消费者消费并让出监控器。以后当消费者消费后唤醒它。消费者则在生产者后面, 消费掉消费者指针当前位置缓冲区内的产品, 方框重新改变为白色,然后消费者指针也顺时针前进一格, 指向下一个存放了产品的缓冲区; 如果当前没有产品可以消费, 则等待生产者放产品并让出监控器, 当生产者放了货物后唤醒它14。 4 系统演示4.1 系统演示的准备 为了验证上述生产者-消费者问题实现方案的正确性,系统将

47、演示模拟效果。由于系统缓冲区的大小已经设定,所以我们将演示下面两种情况的模拟效果。1. 单生产者-单消费者问题模型。2. 多生产者-多消费者问题模型。4.2 系统演示的效果4.2.1 单生产者-单消费者模拟效果首先设定缓冲区全红,既缓冲区为满的情况。此类问题较简单,对于生产者进程,他的活动过程如下:首先判断该单缓冲区是否为空,如果不是,则生产者进程自我阻塞;反之,生产者就可以把生产出来的数据放入该缓冲区块中,然后判断当前阻塞队列中是否有消费者进程阻塞,如果有则将其唤醒。消费者进程的活动为:先判断该单缓冲区中是否有数据(即是否满) ,如果没有,那么它就自我阻塞;反之,消费者从该缓冲区块中取出数据

48、消费,然后再判断阻塞队列中是否有生产者进程需要被唤醒。 图4.1消费者进入缓冲区当消费者C0消费掉第一个缓冲区后,生产者P0产品进入第一个缓冲区,如图4.2图4.2 生产者产品进入缓冲区4.2.2 多生产者-多消费者模拟效果上面分析了较简单的单缓冲区的情形,但是在实际的问题中,更一般的情况是在生产者和消费者之间存在多个缓冲区,生产者可以将生产出来的数据放入缓冲区的不同缓冲区块中,只要该缓冲区块空闲;消费者也可以从缓冲区中已存有数据的缓冲区块中取数消费。但要注意,不论是生产者之间,消费者之间,还是生产者与消费者之间,他们对于临界资源缓冲区的访问必须是互斥的,也就是说,在1个生产者或消费者线程访问

49、完该缓冲区之前,是决不允许其它的生产者或消费者线程访问的。这就是基于多缓冲区的生产者与消费者问题。再多生产者-多消费者模拟演示时设置生产者数目为3,而消费者数目为4,这样更有利于观察系统模拟的准确性。图 4.3 3个生产者生产情况图4.4 4个消费者消费的4个缓冲池内的产品4.3 系统演示结论单生产者-单消费者模拟:从结果可以看出,生产者和消费者线程是在并发的执行。在单缓冲区中没有数据的情况下,如果有消费者到达,这时该消费者阻塞。只有当生产者将数据放入单缓冲区后,才可以唤醒1个消费者取数消费。如果已经有生产者将数据放入了单缓冲区中,这时其它的生产者只能阻塞,直到有消费者将数据提走后才允许某一个

50、生产者放数17。多生产者-多消费者模拟:当循环缓冲区队列空时,消费者线程阻塞; 当循环缓冲区满时,生产者线程阻塞。当有1个生产者线程往循环缓冲区中放了数据后,它会查看阻塞队列中是否有消费者线程需要被唤醒;同样,当有1个消费者线程从循环缓冲区中取走1个数据后,它会唤醒阻塞着的生产者线程。系统准确的模拟了在多缓冲区下的单生产者-单消费者及多生产者-多消费者问题的模拟情况,停止按纽的功能让模拟系统实时的反映生产者-消费者模拟的情况,实现了教学演示的要求。5 总结本文从P,V操作实现进程同步与互斥出发,研究了操作系统中经典的同步问题生产者-消费者问题,提出了解决此问题的模型及解决方案,并设计了基于mi

51、crosoft visual c+而开发,在WINDOWS 98/2000/XP上运行的操作系统进程管理演示系统(生产者-消费者)。通过可视化设计,使我们很快地就理解并掌握了操作系统中生产者-消费者进程调度的原理及算法,并通过设计验证了进程调度;同时,在设计中,我的程序设计能力大大提高了,巩固了数据结构、计算机算法等知识。在计算机专业教学中,可视化设计将会用得越来越多,效果将会越来越明显,将是计算机教学发展的主要方向之一。参考文献1 杨贵和. 操作系统课中进程调度的可视化设计J. 中国科教创新导刊, 2007,072 谢印宝,田爱奎,谢印智. 关于操作系统生产者消费者问题J. 淄博学院学报(自

52、然科学与工程版),2001,033 宋新丽,何永强. 用信号量机制与PV 操作解决进程同步互斥问题的方法J. 河南纺织高等专科学校学报,20054 张贤达. 现代信号处理(第二版)M.北京:清华大学出版社,2002.5 胡小龙,等. Windows 操作系统进程通信机制J.计算机应用研究,2002 ,19 (12)6 贾广雷.多线程技术及其在串口通信中的应用J.计算机工程,2003 ,29 (1)7 陈周造.精通C + Builder 5 程序设计高级教程M.中国青年出版社,2001.8 帖 军,陈幼均.进程同步中的生产者消费者模型分析J.武汉科技学院学报2007,049 帖军. 同步互斥机制

53、中的读者-写者模型J.中南民族大学学报(自然科学版),2005 24(3)10 陆松年.作系统教程(第2版)M.电子工业出版社,200611 胡明庆,高巍,钟梅.操作系统教程与实验.清华大学出版社M.200712 曹聪,范廉明.操作系统原理与分析.科学出版社M.2003,0913 美 David Chappell. 华中科技大学出版社M.2002.0914 彭民德.计算机操作系统网络教学课件M.清华大学出版社,2004,09 15 Lamport L: On Interprocess Communications: I. Basic Formalism. Distributed Computi

54、ng, 1: 77-85 (1986)16 戴树贵.利用P,V操作实现进程同步与互斥J. 滁州师专学报,2002.6致谢本次毕业设计以及论文是在汪杭军老师的精心指导和大力支持下,顺利完成的,汪老师认真负责的工作态度,严谨的治学精神和大胆创新的进去精神,对我产生了重要影响。汪老师给了我很大的帮助,使我得到了很大的提高,这对于我以后的工作和学习有非常大的帮助,非常感谢他的耐心指导。 另外我还要感谢在大学期间所有传授我知识的老师,是你们悉心指导使我有了良好的专业课知识,这也是论文得以完成的基础。感谢所有帮助过我的老师和同学,谢谢你们!最后感谢我的母校浙江林学院四年来对我的大力栽培。外文翻译:Elec

55、tric circuit exchange networkand vb transfer database The result of the connection setup with circuit switching is the reservation of bandwidth all the way from the sender to the receiver. All packets follow this path. Among other properties, having all packets follow the same path means that they c

56、annot arrive out of order. With packet switching there is no path , so different packets can follow different paths, depending on network conditions at the time they are sent. They may arrive out of order.Packet switching is more fault tolerant than circuit switching. In fact, that is why it was invented. If a switch goe

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!