




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、浙江林学院天目学院本科生毕业设计(论文)PAGE PAGE 29 本 科 生 毕 业 设 计(论文(lnwn))( 2008 届)工程技术系题 目: 操作系统进程(jnchng)管理演示系统开发(生产者-消费者) 学生(xu sheng)姓名: 学 号: 专业名称: 班 级: 指导教师 姓名: 系(部): 信息工程学院 职称: 副教授 2008年 5 月 16 日操作系统(xtng)进程管理演示系统的研究与实现摘要(zhiyo):操作系统是计算机专业最重要(zhngyo)的基础课程之一,其中同步问题是最难的部分。本文通过分析操作系统进程同步与互斥的问题,然后利用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
3、 analyze the process of the operating system simultaneously 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 de
4、monstration system about the process of management (producers - consumers) can be used for the teaching of the operating system.Key words: producers; consumers; the process of synchronization,;mutex目录(ml) TOC o 1-4 h z u HYPERLINK l _Toc199329677 1 引言(ynyn) PAGEREF _Toc199329677 h 1 HYPERLINK l _Toc
5、199329678 1.1 选题(xun t)的意义 PAGEREF _Toc199329678 h 1 HYPERLINK l _Toc199329679 1.1.1 开发系统的背景 PAGEREF _Toc199329679 h 1 HYPERLINK l _Toc199329680 1.1.2开发系统的目的 PAGEREF _Toc199329680 h 1 HYPERLINK l _Toc199329682 1.1.3 开发系统的意义 PAGEREF _Toc199329682 h 2 HYPERLINK l _Toc199329683 1.2 P,V操作的简介 PAGEREF _To
6、c199329683 h 2 HYPERLINK l _Toc199329684 1.2.1 P,V操作的介绍 PAGEREF _Toc199329684 h 2 HYPERLINK l _Toc199329685 1.2.2 进程同步的实现 PAGEREF _Toc199329685 h 3 HYPERLINK l _Toc199329686 1.2.3 进程互斥的实现 PAGEREF _Toc199329686 h 3 HYPERLINK l _Toc199329687 1.3 生产者-消费者问题的描述 PAGEREF _Toc199329687 h 3 HYPERLINK l _Toc1
7、99329688 1.3.1 问题的描述 PAGEREF _Toc199329688 h 4 HYPERLINK l _Toc199329689 1.3.2 模型分析 PAGEREF _Toc199329689 h 4 HYPERLINK l _Toc199329691 2 系统需求分析 PAGEREF _Toc199329691 h 7 HYPERLINK l _Toc199329692 2.1 任务概述 PAGEREF _Toc199329692 h 7 HYPERLINK l _Toc199329693 2.1.1 目标 PAGEREF _Toc199329693 h 7 HYPERLI
8、NK l _Toc199329694 2.1.2 运行环境 PAGEREF _Toc199329694 h 7 HYPERLINK l _Toc199329695 2.1.3 编程工具 PAGEREF _Toc199329695 h 7 HYPERLINK l _Toc199329696 2.2 演示系统的分析 PAGEREF _Toc199329696 h 7 HYPERLINK l _Toc199329697 2.2.1 功能需求分析 PAGEREF _Toc199329697 h 7 HYPERLINK l _Toc199329698 2.2.2 系统功能模块划分 PAGEREF _To
9、c199329698 h 7 HYPERLINK l _Toc199329699 2.2.3 系统流程分析 PAGEREF _Toc199329699 h 7 HYPERLINK l _Toc199329700 3 系统(xtng)实现 PAGEREF _Toc199329700 h 10 HYPERLINK l _Toc199329701 3.1 程序结构 PAGEREF _Toc199329701 h 10 HYPERLINK l _Toc199329702 3.1.1生产者模拟函数(hnsh)代码 PAGEREF _Toc199329702 h 10 HYPERLINK l _Toc19
10、9329704 3.1.2 消费者模拟(mn)函数代码 PAGEREF _Toc199329704 h 11 HYPERLINK l _Toc199329705 3.2 MFC界面的设计 PAGEREF _Toc199329705 h 12 HYPERLINK l _Toc199329706 3.2.1 MFC的介绍 PAGEREF _Toc199329706 h 12 HYPERLINK l _Toc199329707 3.2.2 MFC界面效果 PAGEREF _Toc199329707 h 14 HYPERLINK l _Toc199329709 3.3 系统功能的实现 PAGEREF
11、_Toc199329709 h 17 HYPERLINK l _Toc199329710 4 系统演示 PAGEREF _Toc199329710 h 19 HYPERLINK l _Toc199329711 4.1 系统演示的准备 PAGEREF _Toc199329711 h 19 HYPERLINK l _Toc199329712 4.2 系统演示的效果 PAGEREF _Toc199329712 h 19 HYPERLINK l _Toc199329713 4.2.1 单生产者-单消费者模拟效果 PAGEREF _Toc199329713 h 19 HYPERLINK l _Toc19
12、9329714 4.2.2 多生产者-多消费者模拟效果 PAGEREF _Toc199329714 h 20 HYPERLINK l _Toc199329717 4.3 系统演示结论 PAGEREF _Toc199329717 h 22 HYPERLINK l _Toc199329718 5 总结 PAGEREF _Toc199329718 h 23浙江林学院天目学院本科生毕业设计(论文)1 引言(ynyn)1.1 选题(xun t)的意义 操作系统(co zu x tn)(简称OS-operating system)是高等教育计算机应用专业教学计划中一门重要的专业基础课程。众所周知,计算机是
13、各种信息系统的核心,CPU被喻为计算机系统的心脏,OS 被喻为计算机系统的大脑,是用户与计算机系统打交道的环境界面,心脏和大脑的紧密配合,才使计算机系统成为电子时代、信息社会无所不在的基础设施1。OS是在计算机原理与数据结构的基础上的一门提高性课程,是了解和掌握计算机应用系统的基础。其任务是了解操作系统的基本概念,理解计算机系统的资源(软件资源和硬件资源)如何组织,OS 如何有效地管理这些系统资源,用户如何通过OS与计算机系统打交道。通过学习OS可以进一步理解在计算机系统上运行的其他各类OS并懂得在OS支持下建立自己的应用系统,因此OS是计算机应用的基础2。进程同步包括进程的互斥和进程的同步两
14、个方面,是操作系统管理共享资源的一种手段.也是操作系统学习中的难点。操作系统教学中有最经典的四个同步、互斥问题为: 生产者消费者问题、哲学家进餐问题、理发师在空闲中的睡眠问题、读者作者问题, 深入地分析和理解这些问题, 对全面掌握同步、互斥问题大有益处,对学校操作系统这门课也有很重要的意义。1.1.1 开发系统的背景有关操作系统的教材大多注重理论,而绝大多数学习者一生都不可能参于操作系统的研究工作,他们需要的是对理论的理解和对实用系统的灵活应用。进程同步与互斥的实现是操作系统中的重点内容,也是学习的难点部分。生产者-消费者问题是经典同步问题之一,不但在操作系统中很重要, 而且在分布式应用开发、
15、实时数据库管理系统、CIMS 网络工程中都会遇到。但是以往人们只能从原理上加以理解, 没有直观的认识, 因而无法实际使用它。在现代操作系统UNIX、Windows 多进程环境下,我们将利用C语言实现多个生产者-消费者可视化同步运行。开发(kif)系统的目的操作系统是计算机学科(xuk)中的一门重要课程。对于学习者来说, 进程(jnchng)的同步与互斥问题是个令人头痛的问题, 尤其是进程同步与互斥算法的实现, 更让人往往不知如何下手。本文通过具体实例, 给出了利用、操作解决进程同步与互斥问题的简单方法。在操作系统教学过程中,因为部分教科书中对生产者和消费者问题的解释不够全面,学生在理解应用过程
16、中经常出现一些问题。所以本文对生产者和消费者问题算法进行描述,利用操作系统进程管理演示系统(生产者-消费者)进行模拟演示。1.1.3 开发系统的意义采用信号量机制与PV操作来协调进程的同步, 一直是操作系统教学中的一个难点问题, 而且由它引出的一系列问题, 如: 生产者与消费者、读者与写者、哲学家进餐、理发师等问题都是很典型的进程同步与互斥问题。这类题型变化多、实例多,又与实际生活中的问题有着紧密联系3。“进程调度”涉及到操作系统的内核操作,原理性较强,也较为抽象,如只是依靠书本的文字和图形,学生理解起来会很吃力。在操作系统课教学中,就引入了可视化设计帮助学生理解。操作系统进程管理演示系统(生
17、产者-消费者)可以可视化的向学生展示进程调度,便于教学工作,提高学生的学习效率。1.2 P,V操作的简介1.2.1 P,V操作的介绍在操作系统中P,V操作是一种原语操作, 是不可分割的操作, 它要么执行完毕, 要么就不执行, 也就是说P,V操作一旦执行就不允许被中断, 直到执行完成为止。P,V操作主要通过对信号量的操作来实现对资源的控制, 从而控制进程的执行。信号量是和特定资源相对应的数据结构, 由整型数值和指针两部分所组成, 其中整型数值表示资源情况,只能由P,V操作来改变, 它有三种值:S0 表示当前可用资源(zyun)的数量;S0 其绝对值表示当前等待该类资源(zyun)的进程数量;=0
18、 表示(biosh)当前没有可用资源也没进程等待该类资源。P 操作相当于申请资源, 进程在使用资源之前, 应先调用操作申请所须资源, 若资源申请被满足, 则进程可以继续执行, 否则进程将调用阻塞原语阻塞自己。P(S)的具体执行过程如下:S=S-1;若S0, 则进程继续执行;若S0, 则进程继续执行;若S0, 则调用唤醒原语唤醒等待该资源的进程, 原进程继续执行。 1.2.2 进程同步的实现进程同步是指为了共同完成某项任务, 具有伙伴关系的进程在执行时间次序上必须遵循确定的规律。多个进程为了共同完成任务, 须要按照一定的次序去执行, 各个进程在执行时在时间上具有明显的先后次序, 即进程必须按照一
19、定的顺序去执行。这和进程互斥明显不同。实现进程同步的关键在于当一个进程执行以后, 确定下一个将要执行的进程, 并用V操作使该进程可以执行。在实现时, 我们可以在各进程中完成特定功能的程序段两端加上P操作和V操作, 它们分别使用不同的信号量, 用以在各进程间传递信息。通常, 能够最先执行的进程中, P操作中所使用的信号量的初值大于, 而其它进程中, 第一个P操作所对应的信号量的初值为零。这样, 在执行时,第一个进程先执行, 执行完V操作后, 使另一个进程可以执行, 依次传递下去, 就可以实现各个进程按照一定的顺序执行了。1.2.3 进程(jnchng)互斥的实现进程(jnchng)互斥是进程间由
20、于竞争资源而产生的相互(xingh)制约关系。对于多个使用同一资源的进程, 它们对于资源的竞争导致它们在执行时的异步性特征。竞争到资源的进程可以立即投入运行, 而没有竞争到资源的进程只能阻塞自己以等待资源。进程中用以访问这种被竞争的独占资源(临界资源)的程序段叫做临界区。要使多个进程不会同时访问临界资源, 只需要让它们在执行时不会同时执行临界区内的代码就可以了。因此我们可以在各进程的临界区的两端分别加入对于同一个初值为的1信号量的P,V操作, 就可以实现当一个进程进人临界区后, 其它进程不能够再进入临界区, 直到先前进人临界区的进程退出临界区后,通过V操作唤醒其它某个等待进程后, 才会有进程再
21、次访问临界资源, 从而实现多个进程对于临界资源的互斥访问。1.3 生产者-消费者问题的描述1.3.1 问题的描述设有若干个生产者进程P1, P2, P3,Pl; 若干个消费者进程C1, C2, C3,Cm, 它们通过一个由n 个缓冲区组成的有界缓冲池联系起来。每个缓冲区存放一个“产品”, 生产者进程不断地生产产品, 并把它们放入缓冲池内, 消费者进程不断地从缓冲池内取产品并消费之。这里既要求同步, 也需要恰当地互斥。同步存在于p、c 两类进程之间: 当缓冲池已放满了产品(供过于求) , 生产者进程必须等待; 当缓冲池已空( 供不应求) , 消费者应等待。互斥存在于所有进程之间, 各自需要独占地
22、使用缓冲区。1.3.2 模型(mxng)分析1单缓冲区的单生产者-单消费者问题模型限制条件:整个(zhngg)系统仅有唯一的一个缓冲区,活动进程仅有一个生产者Producer 和一个(y )消费者Consumer。进程关系分析:同步关系:只有在Producer 向缓冲区放入物品后,Consumer 才能够从缓冲区中取出物品消费;因此存在Consumer 对于Producer 的同步依赖。(2)只有在Consumer 从缓冲区取出物品后,Producer 才能够继续向缓冲区中放入新生产的物品;因此存在Producer 对于Consumer 的同步依赖。互斥关系:Producer 放入物品的同时,
23、Consumer 是不能从缓冲区中取出物品的;反之亦然。因此存在Producer 和Consumer 之间的互斥关系。2单缓冲区的多生产者-多消费者问题模型限制条件:整个系统仅有唯一的一个缓冲区,活动进程有n 个生产者Producer 和m 个消费者Consumer。进程关系分析同步关系:(1)对于任意的i(1in),j(1jm),只有在ProducerI 向缓冲区放入物品后,ConsumerJ才能够从缓冲区中取出物品消费;因此存在ConsumerJ 对于ProducerI的同步依赖。 (2)对于任意的i(1in),j(1jm),只有在ConsumerJ从缓冲区取出物品后,ProducerI才
24、能够继续向缓冲区中放入新生产的物品;因此存在ProducerI 对于ConsumerJ 的同步依赖。互斥关系:(1)对于任意的i(1in),j(1jm),ProducerI 放入物品的同时,ConsumerJ是不能从缓冲区中取出物品的;反之亦然。因此存在ProducerI 和ConsumerJ之间的互斥关系。 (2)对于任意的i(1in),j(1jn),ij,ProducerI 放入物品的同时, ProducerJ是不能放入物品的。因此存在ProducerI 和ProducerJ 之间的互斥关系。(3)对于(duy)任意的i(1im),j(1jm),ij, ConsumerI 从缓冲区中取出物
25、品(wpn)的同时,ConsumerJ 是不能从缓冲区中取出物品的。因此(ync)存在ConsumerI 和ConsumerJ 之间的互斥关系。3多缓冲区的单生产者-单消费者问题模型限制条件:整个系统有K 个缓冲区,活动进程仅有一个生产者Producer 和一个消费者Consumer。进程关系分析同步关系:(1)只有在Producer 向缓冲区放入物品后,Consumer 才能够从缓冲区中取出物品消费;因此存在Consumer 对于Producer 的同步依赖。(2)只有在Consumer 从缓冲区取出物品后,Producer 才能够继续向缓冲区中放入新生产的物品;因此存在Producer 对
26、于Consumer 的同步依赖。互斥关系:(1)对于任意的i(1iK),j(1jK),ij,Producer 向空闲缓冲区BufferKi放入物品的同时,Consumer 可以从满缓冲区BufferKj中取出物品;反之亦然。因此Producer 和Consumer 之间不存在针对缓冲区的互斥关系。(2) 尽管Producer 和Consumer 之间不存在针对缓冲区的互斥关系,但由于Producer和Consumer 都需要在操作缓冲区的同时对缓冲区队列进行维护,缓冲区队列也就成为两者间新的临界资源,因此Producer 和Consumer 之间出现了针对缓冲区队列的互斥关系。4多缓冲区的多生
27、产者-多消费者问题模型限制条件:整个系统有K 个缓冲区,活动进程有n 个生产者Producer 和m 个消费者Consumer。进程(jnchng)关系分析同步(tngb)关系:(1)对于(duy)任意的i(1 i n),j(1jm),只有在ProducerI 向缓冲区放入物品后,ConsumerJ 才能够从缓冲区中取出物品消费;因此存在ConsumerJ 对于ProducerI 的同步依赖。(2)对于任意的i(1in),j(1jm),只有在ConsumerJ 从缓冲区取出物品后,ProducerI 才能够继续向缓冲区中放入新生产的物品;因此存在ProducerI 对于ConsumerJ 的同
28、步依赖。互斥关系:(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 之间不存在针对缓冲区的互斥
29、关系。(3)对于任意的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、Prod
30、ucerJ、ConsumerS 和ConsumerT 都需要在操作缓冲区的同时对缓冲区队列进行维护,缓冲区队列成为所有进程间的新的临界资源,因此ProducerI 和ProducerJ 之间、ConsumerS 和ConsumerT 之间、ProducerI 和ConsumerS 之间出现了针对缓冲区队列的互斥关系。以上(yshng)这四种情形是逐个包含关系,所以我们只要设计出能完成第四种条件下的生产者-消费者模拟系统。2 系统(xtng)需求分析2.1 任务(rn wu)概述2.1.1 目标学生通过该演示系统能形象的看到进程的调度,以便能更加透彻的理解操作系统中消费者-生产者的同步互斥问题。
31、2.1.2 运行环境操作系统:WINDOWS 98/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由许多组件组成,包括编辑器、调试器以及程序向导Ap
32、pWizard、类向导Class Wizard等开发工具。 这些组件通过一个名为Developer Studio的组件集成为和谐的开发环境。2.2 演示(ynsh)系统的分析2.2.1 功能需求(xqi)分析1. 操作系统进程管理(gunl)演示系统是采用动画和交互的方式对生产者-消费者问题进行演示、教学。2. 学生可以输入生产者,消费者的数量来进行不同情形的的演示。 2.2.2 系统功能模块划分 系统已经设定一个大小固定的缓冲池(缓冲池大小11),缓冲池可以实时的显示生产者生产情况和消费者的消费情况,同时用户可以设定生产者的数目来进行生产(生产者数目1-10);设定消费者的数目来进行消费(消
33、费者数目1-10),由此系统可以模拟上面所描述的四种生产者-消费者模型,同时用户可以实时的停止生产者及消费者的动作,做到分步展示的效果,有效率的起到教学的作用。 2.2.3 系统流程分析1.算法的设计 P,V原语是操作系统中定义的,通过对信号量控制从而实现进程间同步的最基本操作。采用P、V 原语解决生产者-消费者问题的算法描述4。采用P、V 原语解决生产者/ 消费者问题的算法如下: (1)信号量和互斥量的设置:设代表缓冲池中空白缓冲区和满缓冲区的信号量分别为Empty 和Full ,Empty 和Full 的初值分别为n (缓冲池中缓冲区数) 和0 。设两个互斥量MuxProducer 和Mu
34、xCustomer ,它们的初值都为1。(2) 生产者算法:采集生成数据; P( Empty) 申请一个空白缓冲;P (MuxPro2ducer)申请对空白缓冲资源独占使用;找出一空白缓冲区,把数据拷贝到缓冲区;V(MuxPro2ducer)释放对空白缓冲资源独占使用;V(Full)产生一个满缓冲区。消费者算法(sun f):做好接收(jishu)准备;P( Full)申请(shnqng)一个满缓冲;P(MuxCustomer)申请对满缓冲资源独占使用。找出一满缓冲区;把满缓冲区中数据拷贝到用户数据区。V (MuxCustomer) 释放对满缓冲资源独占使用;V(Empty)产生一个空白缓冲区
35、进行数据处理。2.算法流程图入 口sem=sem-1 sem=sem-1S=0唤醒等待队列中的一个进程式返回或转进程调度 返回否是 图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-Invalid
36、ateRect(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=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(pD
37、lg-m_hFullSemaphoretemp,1,NULL);Sleep(t*100); this-ExitInstance();return CWinThread:Run();3.1.2 消费者模拟(mn)函数代码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) DWOR
38、D temp=WaitForMultipleObjects(SIZE_OF_BUFFER,pDlg-m_hFullSemaphore,FALSE,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
39、-m_CStrtemp=;pDlg-InvalidateRect(CRect(17+temp*40,17,20+(temp+1)*40,200);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界面(jimin)的设计3.2.1 MFC的介绍(jisho)MFC (Microsoft Foundation Cl
40、ass Library)中的各种类结合起来构成了一个应用程序框架,它的目的就是让程序员在此基础上来建立Windows下的应用程序,这是一种相对SDK来说更为简单的方法。因为总体上,MFC框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是通过预定义的接口把具体应用程序特有的东西填入这个轮廓。Microsoft Visual C+提供了相应的工具来完成这个工作:AppWizard可以用来生成初步的框架文件(代码和资源等);资源编辑器用于帮助直观地设计用户接口;ClassWizard用来协助(xizh)添加代码到框架文件;最后,编译,则通过类库实现了应用程序特定的逻辑。1封
41、装 构成MFC框架的是MFC类库。MFC类库是C+类库。这些类或者封装了Win32应用程序编程接口,或者封装了应用程序的概念,或者封装了OLE特性,或者封装了ODBC和DAO数据访问的功能,等等,分述如下。(1)对Win32应用程序编程接口的封装用一个C+ Object来包装一个Windows Object。例如:class CWnd是一个C+ window object,它把Windows window(HWND)和Windows window有关的API函数封装在C+ window object的成员函数内,后者的成员变量m_hWnd就是前者的窗口句柄。(2)对应用程序概念(ginin)的
42、封装使用SDK编写Windows应用程序时,总要定义窗口过程,登记Windows Class,创建窗口,等等。MFC把许多类似的处理封装起来,替程序员完成这些工作(gngzu)。另外,MFC提出了以文档-视图为中心的编程模式,MFC类库封装了对它的支持。文档是用户操作的数据对象,视图是数据操作的窗口,用户通过它处理、查看数据。(3)对COM/OLE特性(txng)的封装OLE建立在COM模型之上,由于支持OLE的应用程序必须实现一系列的接口(Interface),因而相当繁琐。MFC的OLE类封装了OLE API大量的复杂工作,这些类提供了实现OLE的更高级接口。(4)对ODBC功能的封装以少
43、量的能提供与ODBC之间更高级接口的C+类,封装了ODBC API的大量的复杂的工作,提供了一种数据库编程模式。2继承 首先,MFC抽象出众多类的共同特性,设计出一些基类作为实现其他类的基础。这些类中,最重要的类是CObject和CCmdTarget。CObject是MFC的根类,绝大多数MFC类是其派生的,包括CCmdTarget。CObject 实现了一些重要的特性,包括动态类信息、动态创建、对象序列化、对程序调试的支持,等等。所有从CObject派生的类都将具备或者可以具备CObject所拥有的特性。CCmdTarget通过封装一些属性和方法,提供了消息处理的架构。MFC中,任何可以处理
44、消息的类都从CCmdTarget派生。针对每种不同的对象,MFC都设计了一组类对这些对象进行封装,每一组类都有一个基类,从基类派生出众多更具体的类。这些对象包括以下种类:窗口对象,基类是CWnd;应用程序对象,基类是CwinThread;文档对象,基类是Cdocument,等等。程序员将结合自己的实际,从适当的MFC类中派生出自己的类,实现特定的功能,达到自己的编程目的。3虚拟函数和动态约束 MFC以“C+”为基础,自然支持虚拟函数和动态约束。但是作为一个编程框架,有一个问题必须解决:如果仅仅通过虚拟函数来支持动态约束,必然导致虚拟函数表过于臃肿,消耗内存,效率低下。例如,CWnd封装 Win
45、dows窗口对象时,每一条Windows消息对应一个成员函数,这些成员函数为派生类所继承。如果这些函数都设计成虚拟函数,由于数量太多,实现起来不现实。于是,MFC建立了消息映射机制,以一种富有效率、便于使用的手段解决消息处理函数的动态约束问题。这样,通过虚拟函数和消息映射,MFC类提供了丰富的编程接口。程序员继承基类的同时,把自己实现的虚拟函数和消息处理函数嵌入MFC的编程框架。MFC编程框架将在适当的时候、适当的地方来调用程序的代码。本书将充分的展示MFC调用虚拟函数和消息处理函数的内幕,让读者对MFC的编程接口有清晰的理解。4MFC的宏观(hnggun)框架体系 如前所述,MFC实现了对应
46、用程序概念的封装,把类、类的继承、动态约束、类的关系和相互作用等封装起来(q li)。这样封装的结果对程序员来说,是一套开发模板(或者说模式)。针对不同的应用和目的,程序员采用不同的模板。例如,SDI应用程序的模板,MDI应用程序的模板,规则DLL应用程序的模板,扩展DLL应用程序的模板,OLE/ACTIVEX应用程序的模板,等等。为了支持(zhch)对应用程序概念的封装,MFC内部必须作大量的工作。例如,为了实现消息映射机制,MFC编程框架必须要保证首先得到消息,然后按既定的方法进行处理。又如,为了实现对DLL编程的支持和多线程编程的支持,MFC内部使用了特别的处理方法,使用模块状态、线程状
47、态等来管理一些重要信息。虽然,这些内部处理对程序员来说是透明的,但是,懂得和理解MFC内部机制有助于写出功能灵活而强大的程序。总之,MFC封装了Win32 API,OLE API,ODBC API等底层函数的功能,并提供更高一层的接口,简化了Windows编程。同时,MFC支持对底层API的直接调用。MFC提供了一个Windows应用程序开发模式,对程序的控制主要是由MFC框架完成的,而且MFC也完成了大部分的功能,预定义或实现了许多事件和消息处理,等等。框架或者由其本身处理事件,不依赖程序员的代码;或者调用程序员的代码来处理应用程序特定的事件。MFC是C+类库,程序员就是通过使用、继承和扩展
48、适当的类来实现特定的目的。例如,继承时,应用程序特定的事件由程序员的派生类来处理,不感兴趣的由基类处理。实现这种功能的基础是C+对继承的支持,对虚拟函数的支持,以及MFC实现的消息映射机制13。3.2.2 MFC界面(jimin)效果这是系统(xtng)界面设计的截图: 图3.1 MFC界面(jimin)界面上有2个静态文本,2个编辑框和7个按纽组成:1. 启动生产者按纽的代码:void CPCDlg:OnPstar() UpdateData(true);this-m_continue=true;this-SetTimer(100,1000,NULL);if( this-m_np0&this-
49、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-CreateThread(CREATE_SUSPENDED);VERIFY(this-m_PTi-SetThreadPriority(THREAD_PRIORITY_IDLE);this-m_PTi-ResumeThread(); else MessageBox(生产者数目必须(bx)在1-10之间,出错
50、了);2. 启动(qdng)消费者按纽的代码:void CPCDlg:OnStartc() UpdateData(true); this-m_continue=true;if( this-m_nc0&this-m_nc11) m_sc.EnableWindow(false); CString str; for( unsigned 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
51、-SetThreadPriority(THREAD_PRIORITY_IDLE);this-m_CTi-ResumeThread(); else MessageBox(消费者数目必须(bx)在1-10之间,出错了);3. 初始状态按纽的代码(di m):void CPCDlg:OnRefresh() / TODO: Add your control notification handler code herem_continue=false;for( int i=0;iSIZE_OF_BUFFER;i+)m_hFullSemaphorei=CreateSemaphore(NULL,0,1,NU
52、LL);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);4. 退出(tuch)按纽的代码:void CPCDlg:OnExit() EndDialog(0);3.3 系统功能的实现程序中共有6 个线程, 两个生产者线程, 两个消费者线程,另外两个线程则根据相同概率改变身份来模拟生产者或者消费者, 以便构建任意多个生产
53、者- 消费者的可视化环境。为方便观察生产和消费进展情况, 设置了两个时间控制变量控制生产者和消费者的生产和消费周期( 即: 线程的run 方法) , 它们是用两个文本输入框分别实现数据输入的。生产者和消费者问题需要的界面效果是, 生产者在消费者前面不停地生产, 而消费者则在生产者后面不停的消费, 呈现追赶的态势。但是不能约定推进顺序和速度。因此, 用了11个正方形方框代表11个缓冲区 。生产者放一个产品, 就在生产者当前指针位置的方框用红色填充, 指针顺时针前进一格, 指向下一个可以放产品的缓冲区; 如果当前没有空缓冲区位置可以放货, 就进入等待状态, 等待消费者消费并让出监控器。以后当消费者
54、消费后唤醒它。消费者则在生产者后面, 消费掉消费者指针当前位置缓冲区内的产品, 方框重新改变为白色,然后消费者指针也顺时针前进一格, 指向下一个存放了产品的缓冲区; 如果当前没有产品可以消费, 则等待生产者放产品并让出监控器, 当生产者放了货物后唤醒它14。 4 系统(xtng)演示4.1 系统(xtng)演示(ynsh)的准备 为了验证上述生产者-消费者问题实现方案的正确性,系统将演示模拟效果。由于系统缓冲区的大小已经设定,所以我们将演示下面两种情况的模拟效果。1. 单生产者-单消费者问题模型。2. 多生产者-多消费者问题模型。4.2 系统演示的效果4.2.1 单生产者-单消费者模拟效果首先
55、设定缓冲区全红,既缓冲区为满的情况。此类问题较简单,对于生产者进程,他的活动过程如下:首先判断该单缓冲区是否为空,如果不是,则生产者进程自我阻塞;反之,生产者就可以把生产出来的数据放入该缓冲区块中,然后判断当前阻塞队列中是否有消费者进程阻塞,如果有则将其唤醒。消费者进程的活动为:先判断该单缓冲区中是否有数据(即是否满) ,如果没有,那么它就自我阻塞;反之,消费者从该缓冲区块中取出数据消费,然后再判断阻塞队列中是否有生产者进程需要被唤醒。 图4.1消费者进入(jnr)缓冲区当消费(xiofi)者C0消费掉第一个缓冲区后,生产者P0产品进入第一个缓冲区,如图4.2图4.2 生产者产品(chnpn)
56、进入缓冲区4.2.2 多生产者-多消费者模拟(mn)效果(xiogu)上面分析了较简单的单缓冲区的情形,但是在实际的问题中,更一般的情况是在生产者和消费者之间存在多个缓冲区,生产者可以将生产出来的数据放入缓冲区的不同缓冲区块中,只要该缓冲区块空闲;消费者也可以从缓冲区中已存有数据的缓冲区块中取数消费。但要注意,不论是生产者之间,消费者之间,还是生产者与消费者之间,他们对于临界资源缓冲区的访问必须是互斥的,也就是说,在1个生产者或消费者线程访问完该缓冲区之前,是决不允许其它的生产者或消费者线程访问的。这就是基于多缓冲区的生产者与消费者问题。再多生产者-多消费者模拟演示时设置生产者数目为3,而消费
57、者数目为4,这样更有利于观察系统模拟的准确性。图 4.3 3个生产者生产情况图4.4 4个消费者消费的4个缓冲(hunchng)池内的产品4.3 系统(xtng)演示结论(jiln)单生产者-单消费者模拟:从结果可以看出,生产者和消费者线程是在并发的执行。在单缓冲区中没有数据的情况下,如果有消费者到达,这时该消费者阻塞。只有当生产者将数据放入单缓冲区后,才可以唤醒1个消费者取数消费。如果已经有生产者将数据放入了单缓冲区中,这时其它的生产者只能阻塞,直到有消费者将数据提走后才允许某一个生产者放数17。多生产者-多消费者模拟:当循环缓冲区队列空时,消费者线程阻塞; 当循环缓冲区满时,生产者线程阻塞
58、。当有1个生产者线程往循环缓冲区中放了数据后,它会查看阻塞队列中是否有消费者线程需要被唤醒;同样,当有1个消费者线程从循环缓冲区中取走1个数据后,它会唤醒阻塞着的生产者线程。系统准确的模拟了在多缓冲区下的单生产者-单消费者及多生产者-多消费者问题的模拟情况,停止按纽的功能让模拟系统实时的反映生产者-消费者模拟的情况,实现了教学演示的要求。5 总结(zngji)本文(bnwn)从P,V操作实现进程同步与互斥出发,研究了操作系统中经典的同步问题生产者-消费者问题,提出了解决此问题的模型及解决方案,并设计(shj)了基于microsoft visual c+而开发,在WINDOWS 98/2000/
59、XP上运行的操作系统进程管理演示系统(生产者-消费者)。通过可视化设计,使我们很快地就理解并掌握了操作系统中生产者-消费者进程调度的原理及算法,并通过设计验证了进程调度;同时,在设计中,我的程序设计能力大大提高了,巩固了数据结构、计算机算法等知识。在计算机专业教学中,可视化设计将会用得越来越多,效果将会越来越明显,将是计算机教学发展的主要方向之一。参考文献1 杨贵和. 操作系统课中进程调度(diod)的可视化设计J. 中国科教(k jio)创新导刊, 2007,072 谢印宝,田爱奎,谢印智. 关于(guny)操作系统生产者消费者问题J. 淄博学院学报(自然科学与工程版),2001,033 宋
60、新丽,何永强. 用信号量机制与PV 操作解决进程同步互斥问题的方法J. 河南纺织高等专科学校学报,20054 张贤达. 现代信号处理(第二版)M.北京:清华大学出版社,2002.5 胡小龙,等. Windows 操作系统进程通信机制J.计算机应用研究,2002 ,19 (12)6 贾广雷.多线程技术及其在串口通信(tng xn)中的应用J.计算机工程(gngchng),2003 ,29 (1)7 陈周造.精通(jngtng)C + Builder 5 程序设计高级教程M.中国青年出版社,2001.8 帖 军,陈幼均.进程同步中的生产者消费者模型分析J.武汉科技学院学报2007,049 帖军.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 濮阳县2025年五年级数学第二学期期末监测模拟试题含答案
- 提升自动化水平选择好的电磁阀解决方案
- 供应商选择与评估管理制度制度
- 投影水幕设计施工方案
- 宁波单层厂房施工方案
- 电力抢修施工方案
- 汽车尾灯资料
- 2025年家居业务面试题及答案
- 6个红包纸折灯笼的制作方法
- 5年级下册英语单词第三单元带读音朗读
- 2025年合肥幼儿师范高等专科学校单招职业适应性测试题库新版
- 2025年浙江宁波交投公路营运管理限公司招聘12人高频重点模拟试卷提升(共500题附带答案详解)
- 劳务派遣劳务外包项目方案投标文件(技术方案)
- 第四单元 第三课 拍摄学校创意短视频教学设计 2024-2025学年西交大版(2024)初中信息技术七年级上册
- 2025年苏州工业职业技术学院高职单招职业技能测试近5年常考版参考题库含答案解析
- 2024年尖叶菠菜种子项目可行性研究报告
- DB3306T 074-2025 餐用具消毒房管理规范
- 2025年重庆市初中学业水平暨高中招生考试数学试题预测卷(二)
- “记忆中的人、事儿”为副标题(四川眉山原题+解题+范文+副标题作文“追求”主题)-2025年中考语文一轮复习之写作
- 2024年吉安职业技术学院单招职业技能测试题库附答案
- 消化系统疾病患者的睡眠质量改善及失眠应对措施
评论
0/150
提交评论