张玉宏1,张 玉2,程红霞2
(1.河南工业大学 信息科学与工程学院,河南 郑州450001;
2.郑州师范学院 信息科学与技术学院,河南 郑州 450044)
摘 要:针对操作系统实践教学环节存在的不足,提出利用设计简易操作系统来完成操作系统课程设计的实践教学模式:通过搭建操作系统虚拟实验室环境,在Bochs平台下完成操作系统设计的5个“机器问题”,加深学生对操作系统重要概念和原理的理解。
教育期刊网 http://www.jyqkw.com
关键词 :操作系统;课程设计;Bochs
基金项目:河南工业大学高等教育教学改革研究项目 (2014GJYJ-A19);河南工业大学省属高校基本科研业务费专项资金项目(2015QNJH17);河南省教育厅自然科学项目(14A520018)。
第一作者简介:张玉宏,男,讲师,研究方向为高性能计算,yhzhang@haut.edu.cn。
0 引 言
由于操作系统课程本身具有理论性强、概念较为抽象等特点,导致教师授课难度大,学生学习难度高[1-2]。操作系统课程设计可视为一座桥梁,能够加强学生对操作系统重要概念和原理的理解。
1 实施课程设计改革的动机
操作系统是计算机类的专业主干课,但在大多数高校中,与其配套的课程设计通常是演示性和验证性的,即编写一个用户层应用程序来模拟操作系统中某种算法的实现,未能对操作系统的整体设计给予代码实现。不少学生虽然学习了很多操作系统的基本原理,但对设计一个操作系统仍无从下手。由于大多数计算机科学类的学生缺乏足够的实践能力,导致从事操作系统研发的人才基数非常有限,质量也无法达到业界要求[3]。
为了改善目前操作系统课程设计的窘境,我们尝试将计算机科学与技术专业的两个教学班作为教改实验对象,使用开源虚拟机Bochs作为操作系统开发平台,采用美国德克萨斯A&M大学(TAMU)的操作系统原型系统[4]指导学生完成简易的操作系统设计。该课程设计涵盖操作系统的重要概念,即系统的启动、存储器管理、虚拟内存管理、多线程调度、文件系统等,旨在通过课程设计增强学生对操作系统重要概念和原理的理解,培养学生开发操作系统的基本能力。
2 系统课程设计的实施
为了方便操作系统课程设计的实施,我们在Ubuntu平台下搭建虚拟实验室环境Bochs[5]。在虚拟实验室环境下,学生可在自己的电脑上直接使用或部署Linux开发环境。
2.1 Bochs虚拟实验室的构建
能便捷地使用合适的开发工具,对于操作系统课程设计非常重要。我们选择Bochs作为开发操作系统的虚拟平台主要是基于以下原因:①Bochs是一个免费的X86硬件平台的开源模拟器;②Bochs功能强大,可模拟各种硬件配置,包括I/O设备、BIOS(基本输入输出系统)、内存等。Bochs主要用于操作系统开发,当虚拟操作系统(guest operating system)崩溃时,并不会导致主机操作系统(host operating system)崩溃,仅需重启Bochs这个软件即可,因此,可方便地调试仿真操作系统。
Bochs虚拟实验室的配置环境为Ubuntu 14.04-32位Linux操作系统。使用Ubuntu平台下提供的apt-get 软件包安装工具时,要安装如下软件包:
Bochs (Bochs主程序,用于模拟主机,运行所开发的操作系统);
Bochs-x(Bochs图形显示程序);
Bochs-sdl(Bochs图形显示的插件),如果使用sdl显示模式,则需在bochs的启动配置文件中添加display_library:sdl,用以明确告知bochs显示模式;
G++(C++编译器,用于开发操作系统);
Nasm (汇编语言编译器,开发操作系统中部分代码为汇编语言)。
2.2 虚拟启动软盘的构建
学生通过编写Makefile,编译源代码生成对应的操作系统内核kernel.bin,但这样的操作系统并不能被Bochs识别,启动操作系统还需要引导程序。为了简化课程设计的难度,实验选择GNU GRUB(grand unified bootloader)进行引导,这是一个来自GNU项目的成熟的多操作系统启动程序。为了完成操作系统的调试,要在终端依次输入如下指令:
(1)sudo mount -o loop dev_kernel_grub.img /mnt/floppy:将系统引导镜像文件挂载至目录/mnt/floppy,如果该目录不存在,则需要学生自己创建。
(2)sudo cp kernel.bin /mnt/floppy:将生成的操作系统内核kernel.bin拷贝至上述创建的镜像文件中。
(3)sudo umount -l -f /mnt/floppy:卸载镜像文件,其中-l选项表示延迟卸载(lazy unmount),程序会立即清理目录中的文件系统,等到设备不忙时才卸载所有相关资源;-f选项表示强制(force)卸载。若是不用这两个选项,调试操作系统要频繁挂载和卸载/mnt/floppy目录,很容易造成“设备忙(device is busy)”错误,无法进行后续调试。
(4)bochs -f bochsrc.bxrc:启动Bochs虚拟机。-f选项指明Bochs启动的配置文件是bochsrc.bxrc。在这个文件中指定bochs的BIOS和VGA镜像文件,操作系统的磁盘镜像文件为dev_kernel_grub.img,而启动介质为软盘(floppy)。
3 构建 “Hello World”版的操作系统,激发学生解决问题的欲望
在学习某一门编程语言时,我们编写的第一个程序通常就是输出“Hello World”。类似地,指导学生编写一个“Hello World”版的操作系统,对激发学生继续深入设计更复杂的操作系统具有同样的功效。为了避免初学者迷失于具体的代码中(比如汇编语言代码),我们提供了这个操作系统的绝大部分代码,仅仅保留输出语句的修改。
对于“Hello World”版操作系统,在指导老师的牵引下,学生的认识可浅可深。对于一般学生而言,它就是一个测试虚拟实验室环境是否成功的程序;而对编程功底较好的学生,教师可以进一步引导。该“Hello World”版操作系统事实上并不能输出“你好,世界!”,也就是说目前它并不支持中文。如何让操作系统支持中文呢?这就要求学生深入看懂代码并改造代码,甚至需要掌握汉字编码。
4 简易操作系统的功能分解
设计一个简易的操作系统来完成操作系统课程设计的好处在于:在学生具有一定的程序设计与实现能力后,可以锻炼学生学会设计和构建大型系统,积累一定的工程经验,最终可实现学生综合能力的提升。为了简化整个操作系统课程设计实施的难度,我们将操作系统课程设计分解为5个待解决的问题,这些待解决的问题统称为机器问题(machine problem,MP)。其中第1个问题MP1其实就是上述的“Hello World”版操作系统,其设计目的在于搭建虚拟实验环境,为后续的4个机器问题服务,其他4个机器问题见表1。
在实践上,学生在教师的指导下独立完成课程设计。由于课程设计时间有限,仅有一周,课程设计中大部分代码已经提供给学生。项目要求学生能读懂并理解现有代码并能修改简单的程序块,而部分项目仅要求学生编写用户空间测试程序。在任务分解上,操作系统课程设计是有层次的,难度逐步加深,并和课本的章节知识点基本对应。
5 教学效果的验证
在2014—2015学年,我们以河南工业大学和郑州师范学院计算机科学与技术专业两个本科班共计96名学生为课程对象,使用基于Bochs的系统作为虚拟实验室载体,进行了以设计简易操作系统来完成操作系统课程设计的教学尝试。尽管在实施过程中面临诸多困难,但是学生的整体评价是正面的,取得了一定的改革成效。课程设计完毕后,通过问卷调查的形式,我们了解了学生对这种新模式下操作系统课程设计的评价,有效问卷回收89份,回收率为92.7%。调查情况参见表2。
由表2可看出,大部分学生(86.51%)认为喜欢使用操作系统设计来理解与学习操作系统原理与概念,认为可增强动手编程能力。87.64%的学生认为Linux系统下开发程序比桌面系统(如Windows)的程序开发更有趣味性,开拓了他们的编程视野。91.01%的学生认为,虽然在课程设计中遇到的问题很多,但在老师的指导下,逐个解决,收获亦多,因此推荐新年级也使用设计简易操作系统的模式来完成操作系统的课程设计。第3项调查持肯定态度的百分比(91.01%)比前两项要高,课下回访得知,原因在于部分前两项选择“否”的学生认为,之前自己对Linux环境开发了解不多,所以收获不尽如人意,如果前期课程设置合理,会降低此类课程设计理解的门槛,因此还是推荐新年级学生以这种模式来进行操作系统的课程设计。
事实上,我们的调查问卷还设计了第4个问题,即询问学生有什么建议和意见。最后的结果有一些负面的反馈,但这些负面的反馈其实是很宝贵的,所指出的问题正是我们目前课程设计教学的薄弱环节,也是我们教学改革下一步需要重点考虑的方向。一些具有典型意义的反馈如下。
(1)学生Linux编程基础欠佳。不少学生认为Linux基础不好,“实验有趣味性,但是有些实验虽然在老师的指导下做出来了,但还不是太理解其中的内涵”。这表明,我们后期的课程设置需要向Linux编程倾斜,否则,课程设计项目再好,曲高和寡,教学效果也会打折。
(2)题目难度较高,应该分组完成。目前,每个同学独立在机房完成项目,且部分参考资料为英文,导致部分学生跟不上课程设计的进度,建议“组成多个小团队或者小组,互帮互助”。
(3)课程设计时间太短,无法充分消化设计内容。学生普遍反映一周的课程设计时间太短,且集中在期末完成,建议将这5个“机器问题”分布在平时的教学过程中。事实上,这几个课程设计问题在学期初就公布给班级中部分编程较强的志愿者,这些志愿者独立完成了部分“机器问题”,并在本次课程设计中充当了“助教”角色。
(4)助教人数过少,指导教师辅导不过来。应对的策略是,扩大助教团队的人数,并可用高年级的(已经完成过本次课程设计实验的)学生来辅导低年级的学生。这样不仅对低年级的学生有好处,他们若有问题可以得到更加细致的回答,对高年级的学生也是一种锻炼和提升。
6 结 语
为了适应我国信息科学技术发展的需要,我们开展了利用设计简易的操作系统来完成课程设计的教学尝试,加深了学生对操作系统原理和重要概念的理解,取得了一定的教学效果和经验。为培养符合社会需求的计算机科学与技术专业的人才,我们需要与时俱进,有针对性地对大学生课程体系进行改革[6]。课程体系的改革,牵一发而动全身,我们任重而道远。
教育期刊网 http://www.jyqkw.com
参考文献:
[1] 张玉宏, 李歆, 马宏琳. Android平台下操作系统课程设计的教学改革[J]. 计算机教育, 2014(18): 32-35.
[2] 杨柳, 胡志刚, 李玺. 面向CDIO的“操作系统”教学改革探讨与实践[J]. 计算机教育, 2009(14): 24-26.
[3] Aviv A J, Mannino V, Owlarn T, et al. Experiences in teaching an educational user-level operating systems implementation project [J]. ACM SIGOPS Operating Systems Review, 2012, 46(2): 80-86.
[4] Teresa L. Operating Systems[EB/OL]. (2014-12-10)[2015-06-30]. http://courses.cs.tamu.edu/teresa/csce410/csce410-index.html.
[5] Bochs. The Open Source IA-32 Emulation Project[EB/OL]. (2014-12-10)[2015-06-30]. http://bochs.sourceforge.net/.
[6] 蒋宗礼. 计算机类专业人才专业能力构成与培养[J]. 中国大学教学, 2011(10): 11-14.
(编辑:孙怡铭)