基于GeekOS的操作系统课程设计实践
周会娟 刘 伟 李景峰
摘 要 本文针对操作系统实践教学环节的改革,在分析现有课程设计方法存在不足后,详细讨论了基于GeekOS的操作系统课程设计教学内容体系,它包含6个项目,包括了操作系统课程的核心内容。通过GeekOS操作系统实验平台,可帮助学员合理运用相关理论知识了解实际操作系统的内部结构,实现操作系统核心运行机制。
关键词 操作系统;实践教学;开源软件; GeekOS
一、引言
随着我军信息化建设不断向纵深发展,部队各用人单位对毕业学员在计算机应用和实践能力方面的要求越来越高。作为计算机专业重要的专业基础课程,操作系统课程的任务是使学员理解现代操作系统的基本原理、主要功能和相关设计技术,掌握当今主流操作系统的应用模式和管理方法,了解其运行环境和实现细节,为今后学习、剖析、使用和开发新的操作系统及设计、编写大规模应用程序打下坚实的理论及实践基础。
但是,操作系统课程具有教学内容理论性强、抽象、概念广、内容多、难度大、知识体系复杂的特点,被学员戏称为计算机课程中的哲学课。操作系统实践环节能够帮助学员深刻理解操作系统理论知识,增强学员的实际动手能力和创新能力,是操作系统课程的重要组成部分。
二、操作系统课程设计现状
传统的操作系统实践教学过程,主要是让学员使用Windows操作系统提供的功能,通过调用Windows API函数编写程序,模拟实现操作系统的典型运行机制或者算法。这种实践教学方式对操作系统本身没有多少触及,无法帮助学员很好地理解操作系统内部协作机制,掌握操作系统理论知识。
当前,国内高等院校普遍采用源码阅读方式进行操作系统实践教学,选择公开、完整的Linux、Minix等操作系统源代码供学员阅读,使其了解和掌握操作系统内部运行机制的实现过程。这种方式同样存在一些缺点:第一,这些操作系统结构庞大,过于复杂,学员在短时间内很难理解;第二,这些操作系统已实现所有功能,学员无法自行实现或者扩充一些子系统,因此不能提升动手能力。
三、GeekOS教学内容体系
教学实践证明,最好的操作系统实践教学平台应该是一种接近实用操作系统,但规模相对较小、易于理解、便于调试的系统。此外,该系统还应留有符合操作系统教学所需的扩充接口,能够让学员自行动手实现部分扩充子系统,从而达到熟悉和掌握操作系统内部运行机制的实践目的。
(一) GeekOS简介[2]
美国马里兰大学开发的GeekOS,就是一种满足操作系统课程要求的实践教学平台。GeekOS用C语言开发,学员可在Linux或UNIX环境下实现功能扩充,也可在Windows环境下使用Cygwin工具进行开发。GeekOS的优点可以概括为:可运行于通用x86架构的PC机,采用经典微内核结构,是GPL开源软件,可免费修改和使用,使用便捷。国内外多家著名高等院校的实际教学效果证明,基于GeekOS的操作系统实践教学平台可以帮助学员在短时间内理解操作系统的抽象理论知识,掌握操作系统内部运行机制的设计与实现方法。
(二)构建GeekOS实践环境[2]
进行GeekOS课程设计,首先需要构建GeekOS的开发环境。GeekOS开发调试环境可以在Windows下使用Cygwin模拟Linux的开发环境,也可以在PC机上直接安装Linux进行开发调试或在虚拟机上安装Linux进行开发调试。
其次,还需要构建GeekOS的运行环境。GeekOS运行于Windows(或Linux)下的Bochs PC模拟器,Bochs是用C++开发的可移植的IA-32(x86) PC模拟器,它包括对Intel x86 CPU、通用I/O设备和可定制的BIOS的模拟,几乎可以运行在所有流行的平台上。
在进行教学过程中,我们采用的GeekOS环境如图1所示。
图1 GeekOS实验环境
在进行GeekOS项目设计时,还需要熟悉以下GeekOS开发工具集合的安装和使用:
GNU gcc编译器:编译C语言程序代码;
NASM汇编器:编译汇编语言程序代码;
GNU gdb调试器:查找程序代码错误;
Bochs PC模拟器:运行GeekOS系统;
Source Insight:程序编辑器和代码浏览器。
(三)实践教学内容设计[2]
以geekOS为平台,对操作系统课程设计的内容进行了设计。GeekOS操作系统实践教学内容包括6个项目,具体如表1所示。
这六个项目,是难度逐渐增加的项目。其中,项目1和项目2对应了操作系统的进程管理功能,项目3对应了操作系统的处理机调度章节,项目4对应了操作系统的存储器管理功能,项目5对应了操作系统的文件管理功能,因此,这六个项目涉及了操作系统的几乎全部管理功能,包括了操作系统课程的核心内容。通过完成这六个项目,可帮助学员了解实际操作系统的内部结构,合理运用相关理论知识实现操作系统核心运行机制,逐步将操作系统原理与应用融会贯通。
表1 实践教学内容表
(四)项目实践过程
在GeekOS实践教学平台中,每个项目的实践过程包括源码阅读、设计项目和课程设计报告写作3个步骤。
通过阅读源码,学员可以了解操作系统内部结构,为设计项目提供依据。
通过设计项目,学员可加深对操作系统理论知识的理解,并能够将理论知识灵活运用到实践中。通过此环节,学员可亲自动手来实现操作系统核心运行机制,从而提高动手能力,提高分析问题,解决问题的能力,激发学习操作系统课程的兴趣。
最后,通过撰写课程设计报告,包括设计思路、采取的方案、取得的成果、总结与体会,以提高学员的综合能力。
我们以项目1为例进行说明:
步骤一源码阅读。通过源码阅读,从而熟悉ELF文件格式,了解GeekOS系统如何将ELF格式的用户可执行文件装入到内存,如何建立内核进程并运行的实现技术。
在项目1中,应仔细阅读include/geekos/elf.h中定义的ELF Header、program-Header和Exe_Format数据结构,可执行程序的装入以及在src/libc/entry.c中定义的外壳程序。应知道void_Entry(void)是入口函数,负责调用用户程序的main函数。src/geekos/main.c、src/geekos/lprog.c、src/usr/a.c这几个源文件也是必须仔细阅读的。(www.xing528.com)
步骤二项目设计。在了解了GeekOS源码的基础上,按照项目设计要求,学员自己动手,修改src/geekos/elf.c,在函数Parse_ELF_Executable()中添加代码,分析ELF格式的可执行文件(包括分析得出ELF文件头、程序头,获取可执行文件长度,代码段、数据段等信息),并填充Exe_Format数据结构中的域值。
int Parse_ELF_Executable(char* exeFileData,ulong_t exeFileLength,struct Exe_Format* exeFormat)
{
inti;
el fHeader*hd=(el fHeader*)exeFileData;
programHeader*phd=(programHeader*)(exeFi leData+hd->phof f);
st ructExe_Segment*segm=exeFormat->segment List;
f o r(i=0; i<hd->phnum; i++)
{
segm->of fset InFi le=phd->of fset;
segm->lengthInFi le=phd->f i leSize;
segm->star tAddress=phd->vaddr;
segm->size InMemory=phd->memSize;
phd++;
segm++;
}
exeFormat->numSegment s=hd->phnum;
exeFormat->ent ryAddr=hd->ent ry;
return0;
}
然后,在Linux环境下编译得到GeekOS镜像文件。编写相应的Bochs配置文件,修改表示此项目执行的程序放在disk.img磁盘映像中。最后,在Bochs中运行GeekOS。
步骤三课程设计报告写作。学员撰写项目1设计思路、采取的方案、取得的成果、总结与体会以及源代码。
四、教学效果和存在问题
基于GeekOS的操作系统教学实践平台是课程组对操作系统教学体系中实践环节的改革尝试,取得了以下教学效果:
学员对课程设计的兴趣浓厚
学员理论联系实际的能力增强
学员分析问题、解决问题的能力增强
提高学员的团队协作能力
学员可独立完成项目0、项目1,个人提交实践报告,其余几个项目,是较大项目,学员组成项目组,在有限时间内完成较完整的项目,之后项目组成员共同总结,课程设计中各组成员在协作、讨论的进程中,彼此取长补短,有利于增强和培养学员的团队协作精神。
但是,这种操作系统实践教学方式仍然存在着问题,如:与原有的教学方法相比较,教员的工作量提高;学员对课程设计需要的知识能力有待提高,应建议在教学计划中加强汇编语言和C语言等。这些问题都有待在今后的教学总体配套改革中进一步完善和提高。
五、结语
操作系统课程是一门理论性强又比较抽象的课程,只有不断加强实践教学课程,操作系统原理知识才能不断得到理解与巩固。通过GeekOS的操作系统课程设计实践,帮助学员了解了实际操作系统的内部结构,并让学员合理运用相关理论知识实现操作系统核心运行机制。
随着课程设计实践的不断深入,我们需要不断研究并总结教学经验,使整个课程设计实践环节更加能完善。
[1]黄延辉,王宇英.计算机操作系统实践教程.北京:清华大学出版社,2007.
[2]汤小丹,等.计算机操作系统.西安:西安电子科技大学出版社,2007.
[3]邹恒明.上海交通大学“操作系统”精品课程的立体化建设.计算机教育,2006(7).
[4]王知非,等.操作系统课程教学改革与实践.计算机教育,2008(6).
[5]黄廷辉,等.“操作系统”课程实践教学的研究与实践.计算机教育,2007(11).
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。