操作系统原理实验教学环境建设的探讨
2022-05-30王晓东
王晓东
摘 要:实验教学是操作系统原理课程教学的一项重要内容,重点之一是实验教学环境的建设。本文简述了在实验教学环节中引入EOS的经验和方法,并且解释了在建设实验环境时可能遇到的一些问题。
关键词:操作系统;实验;EOS;建设
一、引言
操作系统原理是计算机相关专业很重要的一门专业理论课程,做好操作系统实验,对学生理解并掌握操作系统的基本理论和算法有很大的帮助。如果建设了一个完善的操作系统原理实验环境,再以此为基础设计具体的操作系统原理实验项目,会显得事半功倍,也有利于学生全面了解操作系统编程的方法。经过考察调研,结合学校实际情况,选择了EOS教学软件来构建操作系统原理实验环境。
EOS由国内的一家科技公司开发,是一个可以在Intel X86平台上运行的、面向教学的开源操作系统。为了让EOS适合于教学,EOS被设计得十分小巧,并且尽量保持架构简单,但是EOS仍然涵盖了系统引导、进程管理、内存管理、设备管理、文件系统等重要的操作系统概念。EOS完全由汇编语言和C语言编写,开放了全部源代码,同时在源代码中添加了大量的注释,让阅读和理解源代码更加容易。EOS操作系统提供的API(应用编程接口)与Windows基本一致,在编写EOS应用程序时可以直接调用这些API函数,使得EOS系统编程可以和Windows系统编程较好地衔接与融合。
二、集成实验环境
EOS有配套的IDE(Integrated Development Environment)实验环境。该IDE环境可以直接在Windows操作系统上安装和卸载,用户界面和操作习惯与Visual Studio完全类似,而学生C语言编程就是在Visual Studio环境下完成的,所以可以迅速上手。这样就避免了由于手工构建实验环境所带来的学习成本,从而可以将主要精力放在对操作系统原理和EOS源代码的分析与理解上。使用该IDE环境提供的强大功能可以方便、迅速地编辑、编译和调试EOS源代码,编辑功能可以用来阅读和修改EOS源代码;编译功能可以将EOS源代码编译为二进制文件(包括引导程序和内核);调试功能可以将编译好的二进制文件写入一个软盘镜像(或软盘),然后让虚拟机(或裸机)运行此软盘中的EOS,并对其进行远程调试。IDE环境提供的调试功能十分强大,包括设置断点、单步调试,以及在中断发生时显示对应位置的C语言源代码、查看或修改表达式的值、显示调用堆栈和指令对应的汇编代码等功能。灵活运用各种调试功能,这对学生分析EOS的源代码有很大帮助。
IDE环境除了提供以上的主要功能外,还提供了一些工具软件。使用Floppy Image Editor工具提供的可视化用户界面,学生可以像编辑软盘驱动器中的软盘一样来编辑软盘镜像文件,从而可以在Windows操作系统中直接观察到EOS操作系统对软盘的修改。IDE环境与多种免费的第三方虚拟机软件进行了无缝融合,主要的虚拟机包括Bochs和Virtual PC,学生在调试时可以使用这些虚拟机来运行EOS操作系统。
EOS操作系统与IDE环境共同组成了操作系统原理集成实验环境,学生在做操作系统实验时,通过使用IDE环境编辑、编译和调试EOS源代码,从而观察操作系统的运行过程,理解操作系统的一些常用算法。
三、从源代码到可运行的操作系统
无论是EOS操作系统内核还是EOS应用程序,开始时它们都只是一些源代码文件,当编译器、链接器、软盘镜像编辑器等工具对这些源代码文件进行逐步转化后,就变成了可以在虚拟机上运行的EOS操作系统内核与EOS应用程序。虽然IDE环境可以使用以上的各种工具自动地完成上述转化过程,但是学生还是应该弄清楚上述过程内部的细节,这对于他们理解操作系统原理是有很大帮助的。操作系统和应用程序之间一个重要的纽带就是API,操作系统通过开放API为应用程序提供服务,应用程序通过使用这些API实现其功能。在操作系统和应用程序运行时,API可能只是一个简单的调用和被调用的关系,但是在编写操作系统的源代码时,必须要解决如何才能开放API的问题。在编写应用程序的源代码时,又必须要解决如何才能使用API的问题。SDK是Software Development Kit的缩写,即软件开发工具包。操作系统通过向程序员提供SDK来开放其API,开发者在为操作系统编写应用程序时,通过使用SDK来调用API。所以如果学生要为操作系统开发应用程序,就需要首先获得操作系统的SDK。
SDK一般采用文件的形式并结合特定的编程语言,向程序员提供系统的API,有些SDK还会提供相关的文档、编程范例和工具软件等。SDK为了向程序员提供系统API,往往会包含头文件、导入库文件和动态链接库文件。头文件一般会被放在SDK中的Include文件夹中,它的主要作用是导出系统使用的一些数据类型(例如系统中使用的结构体类型)和API函数的声明,在为系统开发应用程序时,往往需要使用和头文件相同或兼容的编程语言来编写源代码文件。并且只有在源代码文件中包含了这些头文件后,才能使用系统提供的数据类型和API函数。在IDE环境将EOS操作系统内核源代码文件生成二进制文件时,会将boot.asm文件生成为boot.bin文件(软盘引导程序),将loader.asm文件生成为loader.bin文件(加载程序),将其它的源代码文件生成为kernel.dll文件和libkernel.a文件。其中kernel.dll文件是EOS操作系统的内核,EOS操作系统的API函数就是从此文件导出的,所以在生成此文件的同时还要生成导入库文件libkernel.a,当EOS应用程序的可执行文件与此导入库文件链接后,就可以调用kernel.dll文件导出的API函数了。在IDE环境启动执行EOS操作系统时,会将boot.bin、loader.bin和kernel.dll三个二进制文件写入软盘镜像文件中,然后让虚拟机来执行软盘中的EOS操作系统。
在編写EOS应用程序的源代码之前,必须首先获得EOS SDK文件夹。然后在EOS应用程序的头文件eosapp.h中,包含SDK/INC文件夹中的三个头文件。实际上eosapp.h只需要包含eos.h文件即可,因为在eos.h文件中已经包含了eosdef.h和error.h文件。在IDE环境将EOS应用源代码文件生成二进制文件时,链接器会将由eosapp.c文件和C运行时库源代码文件生成的目标文件与SDK/BIN文件夹中的导入库文件libkernel.a一同链接,生成EOS应用程序的可执行文件eosapp.exe。在IDE环境运行EOS应用程序时,会将SDK/BIN文件夹中的boot.bin、loader.bin和kernel.dll写入软盘镜像,这样EOS操作系统才能够启动运行。同时会将EOS应用程序的可执行文件eosapp.exe和一个内容为“eosapp.exe”的文本文件autorun.txt写入软盘镜像,这样在EOS操作系统成功启动后,操作系统会自动运行autorun.txt文件中记录的应用程序可执行文件eosapp.exe。
四、结语
以上主要介绍了EOS操作系统和与其配套的集成实验环境,引入EOS建设操作系统原理课程的实验环境,实践证明其效果还是较为理想的。教师可以精心设计基于EOS环境的操作系统实验,提高操作系统原理课程的教学质量。
参考文献:
[1] 庞丽萍. 操作系统原理(第四版)[M].武汉: 华中科技大学出版社, 2008.