论文导读::操作系统的地位举足轻重。基于内核分析的实验模式。如果结合Linux或Windows平台设计实验内容。从而使跨平台调试成为可能。
论文关键词:操作系统,内核分析,Linux,跨平台调试
0 引言
作为计算机科学与技术专业的一门重要专业基础课程,操作系统的地位举足轻重。但在高校本科教学过程中,学生普遍反映该课程难学,教师在教学中也困难重重。究其原因,操作系统课程自身的知识结构以及研究对象特有的复杂性使上述情况成为必然。而知识体系的复杂性直接导致该课程给人理论性强、抽象的印象。因此,如何有效开展操作系统课程的实验教学,加深学生对该课程的直观理解和把握就显得至关重要。传统实验方法以验证和仿真为主,实验很难发挥应有的作用,且容易混淆系统级和应用级的许多概念,反而使学生更难把握知识结构,难以对系统软件形成宏观认识。结合多年教学实践,我校在操作系统课程的本科教学过程中结合实验平台软件的开发和应用,探索出一种直观有效的实验教学模式,使得教学效果得到较显著的提高。
1 操作系统实验教学现状
1.1 实验比重
由于操作系统课程涉及的理论知识多杂志铺,系统级的验证和实验难度较大,导致教学过程中容易出现避重就轻的情况,教师易偏重理论课而轻视实验课教学,实验的课时设置在各高校中也不同程度地偏少。另一方面,学生受考试形式的引导,也偏重理论学习而忽视实践动手能力的培养。实践证明,不注重实验、验证环节,学生很难对该课程涉及的大量概念和方法形成直观认识,导致对许多知识点的认识出现偏差,反而不利于理论课的学习。例如,目前选用的教材在行文时经常变换研究的“角度”,一些知识点是面向应用的,而一些是研究操作系统内部实现的,但在讲述中并未明确说明,比如:在“进程同步与互斥”部分,大部分教材是从“应用”的角度来描述P、V操作的,并附带伪码算法。但在学习过程中,许多同学搞不清这些算法用在何处,是在应用程序层次还是在操作系统实现层次。如果结合Linux或Windows平台设计实验内容,补充P、V操作对应的系统调用和有关函数的用法,真正写出可运行的程序,就可以大大加深对知识点的理解。
1.2 实验方式
与大部分应用类课程相比,操作系统课程的研究目标是系统软件,知识结构偏重底层软件,且往往涉及到硬件知识,开展实验所需的软硬件平台复杂,传统教学模式很难真正实施“系统级”的实验项目,故常用模拟算法代替。这样容易导致所学知识和方法比较抽象和“遥不可及”,很难形成对操作系统整体上的理解和把握。
1.3 现有的一些改革和尝试
针对操作系统课程实验教学中的问题杂志铺,各高校进行了许多有益的改革和尝试。例如,使用逐渐被认同的Linux实验平台[1],整理更加规范的实验内容[2],以及按照归类和划分层次的原则对实验目标进行细化等方法[3]。但操作系统实验内容自身的复杂性与实验方式尽量简单、有效的要求之间的矛盾依然存在。
2 基于内核分析的实验模式
针对上述问题,本校操作系统教研组在操作系统实验教学中不断探索和尝试,总结出一种基于内核分析的实验教学方法。实施过程中,在保障36个实验学时的前提下,直接面向具体的操作系统对所学的概念和算法进行验证、设计,配合跨平台编译和调试技术,有效地降低了实验实施的难度,且不增加学生的额外负担。
2.1 内核分析
内核分析,就是选择一个开源的操作系统作为对象,通过阅读源代码来分析其实现原理和必要细节,并在特定的地方修改部分代码以验证自己的算法。但是,为了降低实验的复杂度并适应本科生的知识结构,实验对象不应太复杂。基于上述考虑,可以选择Linux0.11版本作为实验的目标系统。Linux0.11版是Linux的早期版本,其总的代码量只有1万行左右,且结构清晰,功能较完整(能够覆盖实验教学中的知识点),几乎包含了目前较新版本内核的所有基本功能和原理[4],能够较好的满足实验要求。
2.2 跨平台编译和调试
单纯的代码阅读是枯燥无味的,特别是操作系统这种系统软件。为了提高实验的直观性,可借助动态调试技术来实现内核代码的阅读和分析工作。通过调试过程可以较轻松的跟踪内核执行的流程、关键算法的运行效果以及关键变量和寄存器的取值情况。
但由于操作系统是系统软件,其修改、编译和调试过程远比一般的应用程序复杂。目前常见的实验环境是在微机上直接安装Linux的发行版本或在Windows系统中通过虚拟机安装Linux开展实验。但这些方法都需要在修改内核后重新编译并重启系统,其过程繁琐且需要掌握Linux的大量命令,从而加重了学生的负担并容易导致其失去学习兴趣。
得益于自由软件基金组织GNU对Linux的支持,目前有许多Linux相关的工具软件可以使用,并且有对应的Windows版本。其中杂志铺,著名的编译器GCC和调试工具GDB可以巧妙解决实验过程繁琐的问题。其主要思路是:利于GCC、GDB、MAKE工具和虚拟机软件,实现一种跨平台的内核编译和调试方法,即在Windows平台下编辑、编译并调试运行Linux系统。这和用VC、VB等应用程序开发工具编程调试的工作方式几乎没用区别。另外,通过开发一个集成实验环境(Windows下的应用程序),可将GCC、GDB、MAKE及虚拟机工具进行集成,从而将命令行工作方式转换为视窗工作方式,大大简化实验步骤,使学生更容易集中注意力到实验内容本身。
图1描述了这种基于跨平台编译调试技术的工作流程。

图1 跨平台内核编译、调试流程
3 集成实验环境的搭建
搭建集成实验环境的目的是避免实验时频繁的执行GNU工具集对应的各种命令,使实验步骤尽可能简洁。其主要组成为:虚拟机BOCHS、Windows下的GNU工具集以及主控程序。集成实验环境的开发过程本身涉及许多操作系统课程中的知识点,比如进程间通讯、管道、共享存储器等。对学有余力的学生,阅读其实现代码有助于编程能力和对操作系统整体认识的提高。
3.1 虚拟机BOCHS
传统的Linux内核调试方法是使用KGDB进行远程调试。这种方法必须要求有一台目标机和一台调试机,因此用于实验有很多困难,难以实施。而利用虚拟机软件,可以在一台微机上虚拟另一微机并满足实验的要求。另外,选择BOCHS而非其它软件的主要原因在于它使用的是仿真技术而非虚拟技术,从而更适合充当调试服务器的角色。
3.2 Windows下的GNU工具集
为了实现跨平台的内核编译和调试,实验环境需要使用Windows下的GNU最小工具集(Minimalist GNU for Windows),主要包括的工具有:AS、LD、GCC、MAKE以及GDB。其主要作用是保证在Windows平台下GNU开发环境仍然可用。但需要注意的是,基于该工具集生成的可执行程序是PE格式的,即Windows下的可执行程序格式,不能作为内核镜像执行,因此需要一个简单的转换过程。但这种首先将内核编译为exe再转换为内核镜像的过程恰好可以为GDB保留内核符号表,从而使跨平台调试成为可能。
3.3 集成实验环境
这是一个用VC开发的Windows应用程序,其功能包括内核源码的管理、编辑、编译、内核镜像的生成、调试、MINIX根文件系统的维护以及实验项目的管理。
(1)内核源码以及实验项目的管理
该功能主要结合操作系统实验教学中的系统引导、进程管理、存储管理、设备管理、文件系统等内容,针对相应的内核源码给出注释、快速索引、实验指导以及实验步骤。它可以帮助学生通过真正的内核代码分析,更深刻理解相关知识点,且形式直观、易于理解。
(2)内核镜像的生成、调试
该功能是实验环境的核心部分。基于该功能可以快速对修改过的内核生成新的镜像,并通过调试器看到真正的运行情况,从而使内核分析实时、动态进行杂志铺,并且像调试应用程序一样简单。具体实现时,将GCC、GDB、BOCHS等作为子进程执行,并通过管道和I/O重定向等方法将繁琐的控制台工作方式转变为视窗工作方式。例如,进行调试时,不再需要记忆GDB的调试命令和频繁的控制台输入,只需点击鼠标设置断点、单击菜单项或按快捷键即可实现字符环境下几十条命令才能实现的功能,操作简单、界面更友好。
(3)根文件系统的维护
在Windows下维护根文件系统的目的是便于将可执行程序加载到磁盘镜像中。由于Linux0.11功能简单,并且为了保证磁盘镜像尽可能小,Linux0.11本身不包含GCC等编译工具,因此,要在目标系统中运行的程序必须在Windows系统中编辑、编译,最后再加载到根文件系统中。
图2为集成实验环境运行的情况。

图2 集成实验环境
4 结语
操作系统课程实验教学的必要性和重要性已被广泛认同,而对教学方法、手段的探索和改革还任重道远。这种基于内核分析的实验方法试图让学生真正接触操作系统实现细节的同时,力争简化实验步骤,使实验环节易于实施。实践证明,该教学模式容易被学生接受、取得了较好的教学效果。
参考文献
[1]钟少丹.“操作系统”课程实验设计的思考[J]. 计算机教育,2008(12):120-121.
[2]张其亮,韩斌.操作系统课程实验教学改革探析[J]. 计算机教育,2010(7):91-93.
[3]邹恒明.操作系统课程实验中的五重奏哲学[J]. 计算机教育,2009(20):109-112.
[4]赵炯.Linux内核完全注释.[M]. 北京:机械工业出版社,2004.9.
|