美章网 资料文库 启发式教学计算机专业论文范文

启发式教学计算机专业论文范文

本站小编为你精心准备了启发式教学计算机专业论文参考范文,愿这些范文能点燃您思维的火花,激发您的写作灵感。欢迎深入阅读并收藏。

启发式教学计算机专业论文

1问题描述

通过学习,学生已经熟悉“生产者-消费者”模型,知道各进程应该互斥地使用缓冲池,且生产者进程和消费者进程之间需要用信号量同步。生产者和消费者进程通过信号量实现同步和互斥的伪代码如表1所示。表1中,P操作实现信号量的申请,V操作实现信号量的释放。缓冲池是临界资源,用长度为n的数组buffer[]表示,每个元素buffer[i]都是一个缓冲区,用来存储生产者生产的产品。互斥量mutex保证各进程互斥地访问缓冲池,初始值为1。生产者和消费者分别用in和out来操作缓冲池中的各缓冲区,并通过信号量full和empty同步。full代表缓冲池中存有产品的缓冲区的个数,初始值为0;empty代表缓冲池中没有存放产品的缓冲区的个数,初始值为n。

2组织实施

为减少学生对教师的依赖,加大他们在实验中的参与度,培养他们的系统能力,我们把“生产者-消费者”实验的组织划分为三个阶段:课前布置任务、课内检查引导、课后收集反馈。

2.1课前布置任务为加大学生对实验的参与度,我们在实验课前向学生明确实验任务并提供相关API函数的简单说明,要求学生学习资料并思考“生产者-消费者”模型实现的方法。

2.1.1明确实验任务在理解“生产者-消费者”模型的基础上,利用多线程技术模拟实现一组生产者和消费者;并假设这些生产者和消费者等效,即:只要缓冲池未满,生产者就可将产品送入缓冲池;只要缓冲池非空,消费者就可以从中取产品进行消费。

2.1.2提供学习资料由于大多数学生在本次实验前未接触过多线程编程,因此我们向学生提供一些与伪代码中各操作相对应的WindowsAPI。“生产者-消费者”实验涉及到创建生产者与消费者、操作信号量及使用临界资源。我们整理了与之对应的三类函数供学生预习,分别是多线程操作函数、信号量操作函数和互斥量操作函数(通过互斥量保证生产者和消费者对临界资源互斥访问)。多线程操作函数包括创建线程的函数_beginthreadex()和等待多个线程结束的函数WaitForMultipleObject()。信号量操作函数包括创建信号量的函数CreateSemaphore()、申请信号量的函数WaitForSingleObject()和释放信号量的函数ReleaseSemaphore()。互斥量操作函数包括创建互斥量的函数CreateMutex()、申请互斥量的函数WaitForSingleObject()和释放互斥量的函数ReleaseMutex()。当生产者和消费者完成所有工作后,需要销毁线程、信号量和互斥量等资源。线程、信号量和互斥量都是内核级资源,用CloseHandle()函数销毁。需要注意的是,我们只对上述函数进行简单说明,学生需要借助互联网等资源学习它们的具体使用方法。

2.1.3提出具体要求提供预习资料的同时要求学生思考:实现“生产者-消费者”模型应考虑哪些技术细节?

2.2课内检查引导与教师详细讲解实验原理、目的、步骤及注意事项,学生只需按部就班地操作不同,启发式教学法注重发挥学生在实验课上的主动性,积极引导学生思考并对学生的结论进行总结,从而完成实验。本阶段又可分为预习成果检查和总结引导两部分。

2.2.1预习成果检查实验课开始时我们通过提问检查学生的预习情况,重点考察他们对实验中可能会遇到的技术问题的思考。检查预习的好处在于:一方面,教师的监督可以强迫学生独立思考,减少学生对教师的依赖;另一方面,通过提问教师能够了解学生对实验的理解程度,有助于总结引导。

2.2.2总结引导根据经验,大部分学生会对实验中可能遇到的技术问题进行思考,但可能不够全面。因此,在听取学生对问题的回答后,应进行总结,并进一步启发学生。我们以共用缓冲池(包含10个缓冲区)的二个生产者和二个消费者为例,实现该“生产者-消费者”模型需要考虑以下三个技术细节。⑴该模型使用的数据结构;⑵程序的流程;⑶实现生产者和消费者的具体操作。以上三个技术细节的实现是本实验的关键。学生在课前已经对相关函数进行了预习,因此我们并不立即给出答案,而是启发学生基于预习和已有的编程知识,尝试解决这三个问题。问题一:由表1中伪代码可知,生产者和消费者之间通过信号量同步,并互斥地访问缓冲池。因此,信号量和临界区是实现该模型必不可少的数据结构。问题二:程序的流程在main函数中设定。具体可分为数据结构的初始化、创建多线程和资源回收。其中,资源的初始化及回收可以直接调用相关函数,较为复杂的是创建多线程。讲解创建多线程的方法时可以这样启发学生:每调用一次_beginthreadex()函数可以创建一个线程(用来模拟生产者或消费者),因此,创建多个生产者和消费者要多次调用_beginthreadex(),这种重复执行相同的动作显然要用循环结构,从而引导学生写出创建多线程的语句。创建2个生产者和2个消费者的示例代码如下。上述代码中的ProducerFun和ConsumerFun分别是生产者和消费者线程的入口函数,即生产者和消费者将执行的具体操作,需要重点实现。问题三:实现生产者和消费者的具体操作,即编程实现函数ProducerFun()和ConsumerFun()。由于生产者和消费者类似,我们以实现ProducerFun()函数为例,启发学生在此基础上独立完成ConsumerFun()函数的编写。在本例中,信号量empty的初始值为10,full的初始值为0,它们的最大值与缓冲池中缓冲区的个数相同(都为10);互斥量mutex保证缓冲池被互斥地访问。可根据生产者的伪代码对应写出源程序。函数ProducerFun()与生产者Producer的伪代码之间的对应关系如表2所示。

2.3课后收集反馈学生的课后反馈是对实验课的重要补充。可由课代表收集学生对本次实验的感受和仍存在的疑问,统一反馈给教师。这种反馈能够加强教师和同学之间的联系,帮助教师掌握学生的整体情况,并对教学手段进行改进。在此阶段,可以向编程基础较差的学生提供示例代码,并对其辅导,尽量照顾到各层次的学生。

3结束语

以知识传授为核心的静态实验教学方式要求学生按教师讲解的步骤按部就班进行实验,容易使学生陷于被动,失去对实验课的兴趣。本文针对操作系统课程的特点,提出了适用于操作系统实验课的“启发式”教学方法,并以“生产者-消费者”实验为例,阐述了该方法在教学过程中的应用。经验证,采用启发式教学法能够加大学生在实验课中的参与度,提高学生的独立思考能力,对学生系统能力的培养取得了初步成效。同时,该方法对计算机操作系统课程其他问题及实验的讲解具有一定的借鉴作用。

作者:杨雪单位:浙江警察学院计算机与信息技术系