马立肖 张翠军
摘要:针对操作系统的课程特点和实践教学现状,进行了深入的实践教学改革,尤其是针对操作系统实验课程的教学内容和实施方案进行逐步探索和精心设计,并在教学实践中进行了具体实施,取得了理想的教学效果。
关键词:操作系统;实践教学;课程内容;实施方案
中图分类号:G424 文献标识码:A 文章编号:1009-3044(2016)18-0101-03
操作系统是高等学校计算机类专业的一门核心专业基础课程,其在计算机课程体系中处于重中之重的地位。学习本课程有助于学生对前期的专业基础知识进行整合、应用与提升,形成对计算机系统的整体认识。设计好该课程的实验课有助于学生形象和深刻地理解理论课中讲述的概念、原理和技术,提升学习兴趣,提高理论水平和大型软件的开发能力。
1操作系统实践教学现状
操作系统实践教学一直是操作系统课程中的重点和难点。因重视程度、师资水平、学生基础等种种因素的影响,各高校对实验内容的选取不一,难度也有差异。目前,国内外高校操作系统实践教学主要采用四种模式[1][2]:1)模拟性实验是针对操作系统中一些典型功能或算法,如进程调度、内存分配、页面置换、文件系统、死锁检测、磁盘调度等进行编程实现,这种模式并不对真实的系统资源进行访问和修改;2)源代码阅读实验是通过阅读并理解具体操作系统的源代码以达到理解操作系统原理和技术的目的;3)操作系统内核扩展实验是选择一个内核简单的教学用操作系统,对基础系统进行完善和扩展。根据内核提供的接口,对相关模块如进程管理、进程调度、进程同步、虚拟存储以及文件系统功能进行设计实现,通过实验学生可以对操作系统有一个相对完善的整体认识;4)独立设计实现内核实验。国内部分一流研究型大学要求学生独立或合作实现一个结构相对简单但功能较完备的小型操作系统。通过构造真正的操作系统来建立操作系统原理的整体概念,实验难度较大。
2河北地质大学操作系统实践教学内容探索
为了配合河北地质大学计算机科学与技术专业“试点班”的教学改革,我院在操作系统课程实践教学上进行了深入的研究和探讨,实践教学内容经历了难度逐步加大的过程。第一阶段,即在2010级和2011级学生中,借鉴了北京大学操作系统课程实践教学模式,使用Nachos作为操作系统的实践教学平台,要求学生对Nachos操作系统进行改进和完善;第二阶段,即在2012级和2013级学生中,借鉴了南京大学操作系统实践课程教学模式,要求学生设计并实现一个微型操作系统内核。
2.1 基于Nachos操作系统的实践教学内容设计
Nachos是美国加州大学伯克莱分校在操作系统课程中已多次使用的操作系统课程设计平台,在美国很多大学中得到了应用。Nachos(C++语言版)建立在一个软件模拟的虚拟机之上,模拟了MIPS R2/3000的指令集、主存、中断系统、网络以及磁盘系统等操作系统所必须的硬件系统,源码有一万多行。Nachos不是向学生展示一个成功的操作系统,而是让学生在一个框架下发挥自己的创造性进行扩展[3-4]。
该实验主要是要求学生在阅读和分析Nachos操作系统源码的基础上,掌握该操作系统框架,对线程管理模块、内存管理模块和文件管理模块进行扩展。具体如下:
1)线程管理模块扩展
在阅读Nachos线程管理模块源码的基础上,对线程管理模块进行扩充。具体包括:扩展线程的数据结构,增加“用户ID、线程ID”两个数据成员,同时在Nachos现有的线程管理机制中增加对这两个数据成员的维护机制;增加全局性线程管理机制,在Nachos中增加对线程数量的限制,使得Nachos中最多能够同时存在128个用户线程;扩展同步机制,实现锁和条件变量,并应用Nachos中的信号量、锁和条件变量,实现“生产者—消费者问题”;扩展线程调度算法,实现基于优先级的抢占式调度算法。
2)存储管理模块扩充
在阅读Nachos存储管理部分源码的基础上,对存储管理模块进行扩展。具体包括:扩展TLB管理机制,增加异常处理功能,并为TLB机制实现一种合适的页面替换算法,以尽可能避免系统颠簸的产生;设计并实现一个全局性的数据结构(如空闲链表、位图等)来进行内存的分配和回收,并记录当前内存的使用状态;打破Nachos的单线程限制,使得Nachos系统支持多个线程同时存在于内存中;基于TLB机制的异常处理和页面替换算法的实践,实现缺页中断处理。
3)文件管理模块扩充
在阅读Nachos文件系统相关源码的基础上,理解Nachos文件系统的工作原理,对文件管理模块进行扩充。具体包括:扩展文件属性,增加文件描述信息,尝试突破文件名长度的限制;扩展文件长度,改直接索引为间接索引,以突破文件长度不得超过4KB的限制,并可以动态调整文件长度;对文件的创建操作和写入操作进行适当的修改,以使其符合实践要求。
2.2 基于微型操作系统内核的实践教学内容设计
微型操作系统内核设计是从建立操作系统整体概念的思想出发,选择最能反映操作系统核心技术的实验内容,像“搭积木”一样逐步构建操作系统[5-6]。基于Ubuntu操作系统上搭建的Bochs虚拟环境作为微型操作系统的硬件平台,设计下述几个循序渐进的实验单元[7-8]。
1)引导程序
引导程序的本质是将位于外存上的应用程序或系统加载到内存指定位置,并为其准备好运行环境。本实验单元分层次、循序渐进展开以下实验内容:在引导程序中实现实模式到保护模式的切换;加载程序到内存指定位置,并进行实验测试。该实验阶段,学生利用汇编语言搭建引导程序,深刻理解计算机启动之后至操作系统工作之前,计算机内部的工作情况,为理解操作系统工作原理和操作系统内核的设计和开发打下基础。
2)进程管理
在实验(1)基础之上实现微内核操作系统的进程管理功能。该实验单元依次展开以下实验环节:进程创建、进程调度、进程同步机制、进程通信机制。
学生在完成理论课学习及部分Linux相关源码阅读的基础上,完成该部分实验。其中进程创建实验内容包括进程PCB定义、内核初始化、idel进程创建、内核进程创建等;进程调度实验需要进行系统中断设置、进程队列管理、调度算法设计等;进程同步机制实验主要实现PV操作,并通过生产者消费者问题进行验证。进程通信实验主要实现基于消息的进程通信机制,保证内核进程之间的正确通信。通过该实验单元,学生可站在内核角度,深刻理解进程实体、调度机制;掌握进程同步及通信原理,为深刻理解操作系统并发的概念奠定基础。
3)内存管理
在实验(2)基础之上进行微内核操作系统内存管理模块的设计和开发。该实验单元主要包括物理内存管理、分页机制及地址映射、用户进程创建等内容。在实现内存管理基础之上,构建用户进程。通过该实验单元,学生可站在内核角度,深刻理解分页机制、地址映射等概念,把握操作系统内存管理的本质。
4)系统调用
在实验(3)基础之上实现简单的系统调用fork()、exit()等。通过该实验单元,帮助学生理解操作系统为用户提供服务的方式,体会系统调用的本质。
3 操作系统实践教学的实施方案
为了保质保量地完成操作系统实践教学内容,获得理想的教学效果,在实施过程中采取了下述措施。
1)本着“理论和实践两手都要硬”的原则,对操作系统的实验课程实行单列,即脱离其理论课程母体,独立作为一门课程设置。
2)在操作系统理论教学过程中渗入linux源代码分析环节。例如,对进程控制部分原理讲解后,对 Linux0.11版本中相应的代码片段进行分析,以达到原理与实现相结合的目的,从而给实践教学中相应实验单元的代码实现提供参考。
3)为了协调理论讲解和实验项目的进度,在时间安排上进行了跨学期设计。例如,基于Nachos操作系统的前两个实验与理论课同学期安排;因操作系统理论课中的文件管理部分内容在学期末讲解,则将第三个实验即文件管理模块扩充实验安排在暑假,利用两周时间集中完成,第二学期再进行项目验收;因为基于微型操作系统的引导实验跟操作系统的先修课程结合紧密,并且可以打破一个实用操作系统装载运行的神秘感,为此安排在操作系统开课前的寒假集中完成,其他实验与理论课同学期进行。
4)UNIX程序设计课程与操作系统实践教学协调安排。首先让学生通过UNIX程序设计课程掌握系统调用的功能及应用,产生感性认识,使得其在完成操作系统实验单元的某些系统调用的实现时目标明确,思路清晰。
5)加强实验过程管理,弱化对实验结果的评判。教师严格把控实验进度,每个实验单元完成后,教师逐一严格验收程序,认真批改实验报告,并进行总结和讲评,帮助学生在实践中不断总结经验,从感性认识上升为理性认识。
4 操作系统实践教学效果
2010、2011级计算机科学技术“试点班”所有学生都能读懂Nachos操作系统给的源码并进行改进和功能扩充,大大提高了其开发和调试底层软件的能力、开发大型复杂软件的能力和独立解决实际问题的能力,部分学生的软件开发能力达到甚至超过国内著名重点大学学生的水平。国防科大计算机学院的教师来我院访问交流,对学生的操作系统的设计成果进行了观摩,给予了充分肯定。2010级秦栋同学在求职面试时讲述了自己完成Nachos操作系统的项目经历,收到面试官的认可;2010级刘欢、2011级石雯、2012级杨超杰等同学在中科院软件所研究生复试时汇报了自己的操作系统设计作品,均获得了较高的复试成绩。2011级田天和陈瑞同学在中科大选择跟操作系统相关的研究题目并能顺利完成毕业设计,这跟他们在操作系统实验中动手能力的提高不无关系。学生们的种种表现说明这些学生的实践动手能力不逊于重点大学的学生,也是对我们实践教学改革的极大肯定。
5 结束语
操作系统是计算机系统的核心组成部分,课程的实践教学内容也随着教学改革的进展进行合理调整和更新。该课程实践教学内容的设计使学生在复杂软件系统设计与实现方面得到一次十分重要的工程训练,在专业能力方面获得显著提升。而这一训练与能力的提升是其他任何课程不可替代的。该课程的教学改革仍在探索之中,提高操作系统实践教学的质量,需要从课程实践的内容设置、实施等方面进行思考、探索、实践和总结,结合每一学年具体的教学进度和学生实际能力的差异进行调整,由浅入深、循序渐进地展开,以达到培养学生的专业综合能力,激发学生的学习兴趣,提升教学质量的目的,为学生未来从事高性能应用软件的开发打下坚实的基础。
参考文献:
[1] 张其亮,韩斌.操作系统课程实践教学改革探析[J].计算机教育,2010(7):91-93.
[2] 孙自广,唐培和,黄镇谨.操作系统课程的实践教学模式探讨[J].2010(8):146-148.
[3] Peiyi Tang. Study Book.CSC2404/66204:Operating Systems.2002.
[4] 赵炯.Linux内核完全剖析——基于0.12内核[M].北京:机械工业出版社,2009.
[5] 费翔林,李敏,叶保留.Linux操作系统实验教程[M]. 北京:高等教育出版社,2010
[6] 陈渝,向勇.操作系统实验指导[M].北京:清华大学出版社,2013.
[7] 张亚英,戚正伟.UNIX环境高级编程[M].北京:人民邮电出版社,2006.
[8] 于渊.Oranges一个操作系统的实现[M].北京:电子工业出版社,2009.