论文摘要:操作系统的地位举足轻重。基于内核分析的实验模式。如果结合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及虚拟机工具进行集成,从而将命令行工作方式转换为视窗工作方式,大大简化实验步骤,使学生更容易集中注意力到实验内容本身。
3 集成实验环境的搭建
搭建集成实验环境的目的是避免实验时频繁的执行GNU工具集对应的各种命令,使实验步骤尽可能简洁。其主要组成为:虚拟机BOCHS、Windows下的GNU工具集以及主控程序。集成实验环境的开发过程本身涉及许多操作系统课程中的知识点,比如进程间通讯、管道、共享存储器等。对学有余力的学生,阅读其实现代码有助于编程能力和对操作系统整体认识的提高。
3.1 虚拟机BOCHS