APP下载

Linux内核在嵌入式操作系统课程建设中的应用

2011-12-31原仓周吕卫锋康一梅宋友申雪萍王华锋赵衡

计算机教育 2011年18期

  摘要:随着智能手机、网络通信以及多媒体娱乐设备的高速发展,各种版本的Linux系统在这些嵌入式系统中得到了广泛的应用。文章提出一种基于Linux内核的嵌入式操作系统课程教学方案。针对在教学实施过程中遇到的一些关键问题,从培养目标、知识体系、实验设计以及教学手段等多方面进行了分析和探讨。实施效果表明,这些方法和手段的采用能够有效提高学生对理论知识的掌握,强化对问题分析能力和动手编程能力的培养。
  关键词:Linux内核 嵌入式操作系统 教学方法
  文章编号:1672-5913(2011)18-0029-04 中图分类号:G642 文献标识码:B
  基金项目:北航研究生院精品课程项目(201010);软件开发环境国家重点实验室开放课题(SKLSDE-2009KF-2-0X)。
  随着嵌入式系统中处理器性能和内存容量的快速提高,Linux在智能手机、网络通信以及多媒体娱乐设备等领域得到了广泛应用。国内外高校也对嵌入式相关课程进行了探索[1-2]。
  针对软件学院高层次工程化创新型人才的培养目标,结合国家Linux技术培训与推广中心的建设,我们在嵌入式操作系统的教学内容中融入Linux的新概念、新技术,以就业需求为导向,系统而全面地进行了课程的教改研究和建设。
  当然,作为实用操作系统,将Linux系统应用到实际教学中,也有很多问题需要讨论和探索,如庞大的代码量,繁杂的基础概念和应用工具等。针对这些困难,文献[3-4]进行分析并给出了一些尝试方案。
  基于我们在相关课程中的知识和经验积累,结合国内外针对Linux教学已经取得的成果,我们设计了一套具有自己特色的课程体系和实施方案。学生通过该课程的学习,不仅可采用实例方式对嵌入式操作系统和计算机组成原理等核心专业基础课程进行深入系统地拔高,而且可强化C语言编程能力和UNIX平台的系统开发能力,学会以“系统”的观点来看待嵌入式系统的组成,理清软件和硬件之间的相互依赖关系,为将来从事嵌入式软件的研发奠定坚实的理论和实践基础。
  1 课程群的发展历程
  北航软件学院自2004年起为一年级研究生和高年级本科生开设“Linux内核分析与实践”课程(该课程2009年得到教育部-英特尔精品课程项目支持),最初强调对操作系统本身原理(即内核机制、进程管理、内存管理、文件系统和设备管理等部分)的理解。在经过一轮授课实践后,相当部分学生反映对课程内容学习有相当困难。认真分析后,我们结合软件学院承担的北航“国家Linux技术培训与推广中心”的建设任务,引入了Novell公司的SUSE Linux的使用和系统管理课程,并另外增加了Linux环境下应用程序设计内容,用于解决学生Linux基础知识不足的问题。我们发现根本原因是由于这些学生不具备Linux的相关基本概念和使用经验,在直接学习操作系统相关知识时,出现了知识断档。课改的实施旨在改善课程的教学效果。
  嵌入式操作系统是该专业一年级研究生第二学期的专业限选课程,该课程和上述两门Linux相关的课程相互结合,强调嵌入式系统中的操作系统的实时性、可定制等特点,紧密结合实际就业需求,在课程中设置内核移植、硬件驱动和中断并发内核机制等跟硬件平台相关且实践性较强的内容,并通过μCOSII原理的对比,来加强学生对嵌入式操作系统中相关概念的掌握和理解。
  综合以上课程群的内容,驱动程序与内核的学习是相互促进的,即先学习一些简单的驱动程序的知识,有利于对内核相关原理的学习。反过来,对内核知识的深入学习,也是进行高级驱动程序开发的前提。这样做的好处是,不仅强调驱动程序学习的重要性,而且重视相关的内核原理对驱动程序设计的相关性,将课程定位于培养高端的嵌入式系统实用人才,
  结合以上教改内容,可以总结出自顶向下和自底向上相结合的课程学习路线图,在自顶向下部分,通过对Linux基本使用和应用编程的学习,学生可由Linux外部使用特性对内核相关机制形成一些感性认识。在自底向上部分,通过首先学习一种硬件平台,包括一些基本接口及其驱动,学生可对硬件提供的对内核的支撑机制有个初步了解。
  
  在具备上下两方面的基础后,再逐步从应用需求和资源管理两种角度引入操作系统内核的功能需求,通过内核相关实现将上层的应用接口和下层的硬件原理衔接起来。这种知识的组织结构既符合内核设计的原则,也有利于学生将平台开发和计算机组成知识融合起来。
  2 课程内容与实施
  鉴于嵌入式操作系统相关知识点繁杂、涉及面广、相互之间关联性强从而造成学习时难于入门的特点,基于对实际开源操作系统具体实现方式的分析和对比,我们确定了“理论和实践相结合,强调课程‘边界’知识点,关注并及时融入新技术”的课程内容设置原则。
  2.1 课堂讲授内容
  课程首先介绍嵌入式操作系统的基本功能和发展历程,总结嵌入式操作系统特点。然后,讲述实时系统的相关概念,包括临界区、可重入、同步和任务切换等内容。
  课程内容基于i386处理器,但在涉及硬件细节时一般会适当对比ARM平台,并考虑64位结构对内核的影响。课堂讲授的关键知识点还包括Linux的模块编程、进程管理、内核机制(如中断和下半部、时钟和定时器、多处理器和内核同步等基础机制)、内存管理、文件系统、设备管理和驱动开发等部分。各知识点相应的部分,通常都会与μCOSII的实现方式进行适当对比。由于内容和细节繁多,且相互之间关联性强,所以在课堂上只选择讲授各大部分中关键和基础性的知识点,而对于具体细节等需要深入学习的部分则通过实验进行涵盖。在具体内容组织时采用“理论与实践”的组织方式,即首先针对各相关内容设计实验(分为源代码分析和动手编码两类),然后再根据实验内容确定课堂上的讲授内容。
  嵌入式操作系统处于硬件与应用程序之间,这决定了学习操作系统时存在一些“边界”知识。比如,编译链接时的地址重定位、硬件的支撑机制、内核的启动过程等。尽管这些知识不属于核心知识点,但它们是完整理解核心知识点的基础,因此需要在课程讲授时明确指出。
  对于软硬件领域出现的新技术,如虚拟化、多核等与操作系统内核密切相关的一些新技术,在课程中也会适当解释。
  2.2 实验内容
  为适应不同基础和能力的学生,我们设计了分层次的实验内容,形式上分为源代码阅读分析和上机实验两大类。
  2.2.1 源代码阅读分析
  源代码阅读分析实验的主要目标是使学生深入理解Linux或μCOSII操作系统的核心工作机制,并熟悉内核代码的组织方式和编程风格。这类实验的主要内容涉及内核的启动、内存映射、进程的创建、打开文件、信号量的实现等。
  要求学生选择2项以上的题目进行分析,并完成分析报告。报告的内容包括所选内容的技术背景和应用价值、所使用的算法和数据结构、具体实现时函数的调用关系,并对各函数的基本功能进行说明。报告最后还要求从操作系统原理的角度对所选择技术的优缺点及可能存在的改进方法进行分析。
  2.2.2 上机实验
  上机实验的主要目的是培养学生C语言和系统平台的编程能力,并对课堂和源代码阅读所学习的原理进行验证式或创造式的动手技能训练。这类实验的主要内容包括内核的编译与安装、模块编程与管理、为内核增加一种新的同步对象[5]、共享内存和内存映射文件、字符设备驱动程序以及复杂设备驱动程序等,内容的设置在涵盖主要原理的同时,兼顾实际就业时的技能需求。
  
  2.3 教学实施
  作为以动手能力培养为目标的课程,强调以学生为主体,但同时也重视教师的引导作用。本课程综合运用以下多种教学方法和手段,以达到高层次工程化创新型人才的培养目标。
  1) 课堂专题讨论。针对操作系统各部分知识相关性强,不易理清的特点,在课堂上给出一些引导性的问题,让学生分组进行讨论。老师根据各组的讨论情况进行相应的引导,从而使学生在讨论的过程中将各相关的知识点进行整理、组合,达到灵活应用的目的
  2) 实验指导教师引导小组讨论。实验指导老师定期组织其指导的学生小组进行讨论,依据实验报告和项目文档对其中存在的难题进行解答并展开讨论,对一些有争议的话题进行引导,鼓励学生进行发散型思考,以提高其创新能力。
  3) 综合考评方式。采用源代码分析论文(25%)、实验报告(25%)和期末笔试(50%)相结合的考核方式。源代码分析论文强调学生从分析获得的个人体会,实验强调学生的动手能力和代码规范性,而笔试则全部采用简答题形式,注重对概念与具体实现方式的理解与对接。
  4) 现代教学手段的运用。针对课程中的一些重要内容,制作相关的图形、动画或视频,以增强教学效果。利用网络环境展开教师与学生、学生与学生之间的及时沟通和交流,促进学生的学习主动性和自主性。
  3 课程特色
  1) 针对课程特点,合理组织教学内容。针对该课程相关知识点繁杂,涉及面广,相互之间关联性强从而造成学习时难于入门的特点,本课程采用两种实际的软件硬件平台的具体实现技术相对比的方式进行教学,以场景的形式对进程创建和切换、虚存映射等操作系统核心知识进行组织,有利于学生对相关知识的理解。另外,为了使学生理解操作系统和应用程序运行的来龙去脉,增加了(动态)连接、系统的引导和启动、可执行文件的格式和组成等“边界”内容。
  2) 明确课程目标,注意理清同时涉及软硬件的概念之间的关系。作为软硬件密切结合的嵌入式系统,嵌入式操作系统的深入学习离不开对硬件平台的深入理解。但很多技术,比如中断处理、地址绑定等概念,操作系统中的设计都需要依赖于处理器提供的支持才能实现。因此,在讲述这类知识点时,强调哪些是硬件的技术,哪些是软件的技术。这种做法非常有利于学生理解硬件中有哪些技术是为了操作系统的存在而设计的,操作系统中有哪些技术的实现是为了在多种硬件平台上“通用”而设计的,从而达到培养创新型高级“系统”设计人才的目的。
  3) 强调实用技能,采用源代码分析和编程实验相结合的实践形式。为了达到高效运行的设计目的,操作系统的源代码通常设计得非常“精美”,因此可作为编程能力培养的经典范例来使用。而上机编程实验,则需学生综合运用所学的相关原理和编程技术,设计并实现一种系统功能,因此强调实际动手技能的培养。这种代码分析与上机实验相结合,真正做到了理论与实践相结合的培养模式。
  4 结语
  以上教改的实施显著提高了学生的学习兴趣和学习主动性,通过学生反馈的课程评估结果及其就业表现验证了课程建设的有效性。
  我们深知,课程的建设和改进没有止境,教学内容和教学方法需要根据教学效果的反馈不断地进行循环优化。希望能通过进一步借鉴国内外同行的宝贵经验,把我们的教学水平提高到一个新的层面。
  参考文献:
  [1] Ian McLough