面向系统能力培养的操作系统课程教学改革探索

2018-08-22 10:26朱小军王立松
计算机教育 2018年8期
关键词:内核理论课知识点

朱小军,王立松

(南京航空航天大学 计算机科学与技术学院,江苏 南京 211106)

0 引 言

在每个学期操作系统课程的第一节课上,笔者都会向学生发问卷调查,其中一个问题是“你最想从本课程中学到什么”。每年都会有同学回答,想实现一个“麻雀虽小五脏俱全”的小型操作系统。在主流搜索引擎上搜索“如何学习操作系统”,也会有大量建议是“读一个小型操作系统的源码”。因此,以一个小型操作系统为基础开展操作系统教学符合学生的期望,也是很多“过来人”的建议。

笔者探索了以修改小型操作系统内核为内容的实验教学方案,同时修改理论教学内容和方法,以期实现理论与实践同步开展,相辅相成,强化教学效果。相对于传统的以理论为中心的教学,笔者认为应将侧重点向实验倾斜。

1 设计内核实验的起因和难点

目前在部分高校,如南京航空航天大学,操作系统课程理论部分讲解的是“设计”操作系统,而课程的实践部分以“用”操作系统为主,多是验证性实验,这不可避免地造成了矛盾。以信号量知识点为例,理论部分讲解如何设计信号量以满足进程同步的需求,而实验部分则是用已经实现的信号量去解决应用问题。由于这种差异的存在,虽然操作系统的教学已探索出多种教学方法[1-3],但是少有关注理论部分与实践部分紧密结合的方案,甚至有教师提议直接舍弃实验部分的教学[2]。为了将理论部分和实践部分结合,需要将实践部分从“用”改为“设计”,也即设计、修改一个操作系统的内核。

在设计内核实验时,面临以下问题。

(1)虽然国外有大量教学案例,但无法直接应用到国内的教学中,因为国内无法提供足够的师资力量对学生进行辅导,国内的学生也没有足够的时间完成课程任务。比如,MIT的操作系统课程逐步引导学生从零开始设计、实现一个操作系统,但MIT会为此配备足够多的高质量助教,而且每个学生在一个学期只修读几门课程(教务建议是每学期3~4门)。目前,这两点在国内无法做到。

(2)国内能够公开找到资料且是修改内核的教学案例大多采用了发行版Linux内核,实际教学效果有限。这是因为发行版内核代码量大,易使学生产生畏难情绪无法通读源码。此外,代码过多也增加了调试内核的难度。

(3)内核实验需要和理论教学同步开展,笔者认为理想的情况是每个理论教学的知识点都有一个配套的内核实验,理论讲授和实验教学同步开展,同步结束。为达到预期目的,有两个问题需要解决:一是,内核实验可能会影响理论教学中知识点的讲授次序和讲授方法;二是,部分理论教学的知识点可能没有对应的内核实验。当然,有的高校是在理论教学结束后单独开设综合性实验课程[4],但这样延后安排的实验无法促进理论教学,还可能出现学生遗忘理论课内容的情况。

在经过对比权衡后,笔者选择了MIT开发的教学用操作系统xv6[5]。首先,xv6是开源免费软件,只有约五千行代码,学习和调试相对容易。其次,xv6只实现了内核的基本功能,大量未实现的功能可作为实验项目。最后,xv6有大量国内外资料供参考,既减轻了教师设计新实验的压力,学生也有足够的参考资源。

2 基于xv6的内核实验

内核实验的内容及安排见表1,共6个实验,其中部分实验源自MIT的开放课程。每个实验结束时学生需要提交一次源码和项目报告,教师评分。学生的总成绩由6个实验加权求和得到。教师在布置实验任务时,需要确保先导的理论知识已经讲授完毕。由于理论和实验的紧密结合,如果二者分属两门课程,建议由同一个教师讲授。每个实验预计学生需要10个小时完成,所有实验共60小时。从学生反馈的情况来看,虽然不同实验的用时不同,但所有实验的累计用时相差不大。

2.1 通过提示信息动态调整实验的难度

由于课程的动态增减和多个先导课程持续不断的教学改革,每年学生的基础有所不同,所以内核实验的难度应随之动态改变,这可以通过增减提示信息来控制。例如实验0的添加用户命令部分,可以大致提示学生参考已有命令,也可以具体提示学生留意哪几个文件的哪几行代码。提示信息的多少取决于学生的基础,可以通过与学生的交流以及问卷调查获得。事实上,实验0较简单,目的是让学生熟悉环境,增加完成任务的信心。

2.2 通过问答题引导学生理解内部原理

实际教学过程中会出现部分学生在对原理不理解的情况下依然完成了任务。有两种情况,一是学生参考了xv6已有的类似实现,例如实验0和实验1中添加系统调用部分;二是参考了网上的代码,例如实验1中的定时任务部分。笔者不反对学生参考任何资源(只要不是相互间的抄袭),因为寻找资料本身就是学习,但希望学生能理解内部原理。为此,建议在实验中增加问答题,既是引导,也是强制要求。例如,实验0或实验1中可以要求学生使用GDB跟踪一个系统调用的执行过程,并指出引起CPU内核态和用户态切换的具体指令。

2.3 通过及时总结强化实验效果

在目前的教学体制下,学生一般更重视理论课。为此,在每个实验项目批改结束后,建议在理论课上对其进行总结,并分析讲解典型错误,以此为契机复习先导理论知识点。例如,实验0结束后复习内核态、用户态以及系统调用。由于学生已经阅读过相应的内核源码,所以此时复习有事半功倍的效果。再比如,信号量一直是理论课的教学难点,在实验3完成后再次讲解信号量,学生的认识将会更加透彻。

2.4 通过规范化项目文档减轻学生负担

需要对学生提交的实验报告在格式和内容上做出要求,以避免学生既要思考内容又要调整格式。操作系统的实验不可避免需要粘贴部分代码,对一些学生而言这是负担,因为普遍采用的word软件不支持代码的高亮显示。如果报告的格式混乱,教师读起来费力,学生自己也不愿仔细修改。此外,当课程结束需要将所有报告汇总时,学生又需要花费较多精力统一格式。为此,经过往届学生的建议,笔者统一要求学生用Markdown写实验报告,并给出模板,将学生从调格式的工作中解放出来,将注意力集中在报告内容而不是格式上。由于报告看起来美观,学生也愿意花精力写报告。

2.5 通过引入适度的竞争增加学生的动力

为了提高学生的积极性,建议引入适度的竞争,并在成绩上予以体现。例如,可以将思路清晰的报告在课堂上演示并予以表扬。实验4中可以增设开放性实验,让学生自己实现其他节省物理内存的技术,以节省物理内存的数量对学生的实现进行排名,并邀请前几名学生在课堂上分享经验。

3 理论课程的调整

为了与内核实验紧密结合,需要对理论课程的内容作出调整。由于需要在理论课上总结实验的内容,所以需要对原有的部分理论知识点进行弱化,即减少教学时间。笔者采用的教材[6]建议弱化的知识点见表2。需要注意,不是因为这些知识点不重要,而是无法在有限的课堂时间内全部覆盖。

表2 理论知识点的调整

如第1节所述,如果理论知识点没有配套的内核实验,则与笔者的初衷不符。在此采用的方法是减少这些知识点的课时。例如,关于死锁有较多知识点,但目前主流操作系统,如Windows和Linux,均未处理死锁。当然教师也不容易设计内核实验,考虑到教学效果,不建议在课堂上详细讲解关于死锁的算法。此外,因为主流操作系统未采用,分段存储管理及引申的存储管理方法也无必要设计对应内核实验(事实上xv6的早期版本采用了分段存储管理,现已更新为分页存储管理)。

该理论和实验教学方案自2016年春开始在南航计算机软件培优班试点,已试点两年,图1为试点前后学生对课程的评教成绩。虽然不同年份学生不同、教师不同,但可以确定的是采用新方案后学生对课程的评价并没有降低。学生虽然在新方案下的工作量较大,但从中学到了知识和技能,对课程的正面评价较多。

图1 操作系统课程的学生评教成绩(平均值±标准差)

4 结 语

操作系统课程是一门传统的计算机类专业的核心课程,已有多种成熟的教学方法。近来一般认为应当培养学生的系统能力,即结合组成原理、操作系统、编译原理等核心课程,培养学生的系统观。笔者认为培养系统能力的关键在于以实验为中心,通过实验将各课程的知识点重新组织。为此,笔者探索了一系列基于xv6的内核实验,并相应调整了理论课程的知识点。以此为主要组成部分的成果“计算机软硬件协同贯穿式人才培养的创新与实践”获得2017年江苏省教学成果二等奖。

猜你喜欢
内核理论课知识点
大数据时代下高校体育理论课教学模式研究
多内核操作系统综述①
一张图知识点
一张图知识点
第四页 知识点 歼轰-7A
强化『高新』内核 打造农业『硅谷』
活化非遗文化 承启设计内核
微软发布新Edge浏览器预览版下载换装Chrome内核
关于G20 的知识点
独立学院公共体育理论课教学现状研究