操作系统课程教材问题探讨
2010-12-31李勇
计算机教育 2010年8期
摘要:本文通过分析30本操作系统教材,从核心内容深度广度、具体讲授方法、教材章节安排、教材细节等方面指出存在的问题,其根本原因是对操作系统教学的相关研究工作太少,特别是缺乏课程标准方面的研究。
关键词:操作系统;教学方法;教材问题
文章编号:1672-5913(2010)08-0091-04
中图分类号:G642
文献标识码:A
操作系统是高等学校计算机专业的核心骨干课程,是帮助学生建立对计算机系统运行机理的系统化认识的关键课程之一,此课程的学习过程是提高学生计算机水平的重要阶段。但其教材和教学从历史到现在一直存在很多问题需要探讨解决。
20世纪80年代初期本人学习操作系统课程用的教材是文献,参考书是文献,当时就感觉到操作系统空洞抽象,难以理解。20世纪80年代中期本人承担操作系统课程教学前,翻遍了可选的教材(文献),最终选用的教材是文献,主要考虑该教材比较结合实际,另外UNIX系统代表操作系统的先进技术开始流行。但当时学生的实践环节条件跟不上,教师经验有限,再加上教材内容繁杂,教学效果不够理想。因此开始考虑选用讲述操作系统一般原理的教材。
进入90年代情况有所改观,一些比较有特色的教材(文献)进入了可选范围:文献篇幅很多、内容详尽,但考虑课时及学生的接受能力有限,最终没有选作教材;文献内容略少一点:文献和文献内容比较适中;经过权衡最后选择文献作为教材,教学效果得以改善。
20世纪90年代本人参加过几次全国操作系统教学研讨会,交流中大家普遍感觉操作系统课程内容繁杂,概念多且抽象,不易理解,教师和学生都感觉到困难。很多高校的教师一直在寻求更适合的教材和教学方法。
进入21世纪又出现了一大批操作系统教材,文献是其中的一部分,文献讲述操作系统的一般原理,文献是讲述UNIX/LINUX具体操作系统的。这些教材的作者在章节安排、讲述内容重点、讲述方法等方面都在寻求创新或改变。但近期阅读了从CNKI按照“操作系统教学”主题词检索出的30余篇关于操作系统教学和教材的文章(文献为其代表),发现大家目前依然普遍认为操作系统还是一门比较难教难学的课程,大家还在寻求解决办法。
笔者查阅、比较和分析了近30本操作系统教材的基础上,归纳出了以下问题。
1 核心内容深度广度及具体讲授方法的问题
CC2001、CCC2002乃至CC2004列出了操作系统课程的核心章节,但这些章节到底应该包含哪些内容、应该如何讲授、哪些需要重点讲授、讲授到什么程度等并不明确。以并发与共享这样的核心内容为例,该如何讲授、要求理解和掌握到什么程度,很多教材之间差异很大。
图1为完成基本文件拷贝功能的并发拷贝程序,是比较简单的:图2为展示该程序运行过程的一种手段,对图2的理解和掌握是检验学生是否掌握操作系统核心内容的很好方法。
![](https://img.fx361.cc/images/2025/0114/KCFVA6M534aNeVNRTKDFtK.webp)
图2中,假设D1读比D2写略快一点。其中D1、D2分别代表两个不同的磁盘。s表示进程调度切换;ID表示磁盘中断处理;第i次读源文件的系统调用read(fdr,…)分为Ri和Ri两段完成:第i次读管道文件的系统调用read(fdp[0],…)分为RPi和RPi两段完成,管道非空时RPi为空;第i次写管道文件的系统调用write(fdp[1],…)分为WPi和WPi两段完成,管道非满时WPi为空;Wi对应第i次写目的文件的系统调用write(fdw,…)。
操作系统核心内容深度广度及具体讲授方法的问题还需要研究探讨。这些在现有的各种操作系统教材中没有见到。
2 教材章节安排的问题
尽管有了CC2001、CCC2002乃至CC2004,但操作系统教材的编者在决定教材的内容、讲述方法和深度广度要求等方面具有较大的灵活性和自主性。文献作为从国外引进的操作系统的经典之作,与CC2004(就操作系统课程来说CC2004与CC2001几乎一样)有较大差异,在章节安排上与国内的操作系统教材也有较大差异。国内的教材大多按照操作系统内核的四大模块组织教材章节的,把存储管理、设备管理、文件(系统)管理三个模块各安排为一章,比较一致,但每章内节的组织有较大差异,每节讲述的内容及讲述的深度差异更大。在章这个层次,进程管理部分的章节组织差异较大:如放在一章讲授的教材有文献(进程和处理机管理)、文献(处理机管理)、文献(进程管理)、文献(进程机制与并发程序设计)、文献(处理机管理)和文献(进程管理);放在两章讲授的有文献(进程管理、处理机调度)、文献(进程及其管理、调度与死锁)、文献(处理机管理、进程通信)和文献(进程与线程、处理机调度);放在三章讲授的有文献(进程描述与控制、并发控制——互斥与同步、死锁处理)和文献(进程描述与控制、进程同步与通讯、调度与死锁);放在四章讲授的有文献(进程、线程与作业、中断与处理机调度、互斥、同步与通讯、死锁与饥饿)和文献(进程管理、中断与处理机调度、并发性:互斥、同步和通信、并发性:死锁)。这也反映了这部分内容的讲述方法差异较大。
在作业管理及用户接口章节的分类与归并方面教材之间差异较大。有作业管理的教材有文献,14,19,21,23-24,261;无作业管理的教材有文献[11,13,15,18,22,25-28](文献[22]有“操作系统接口”;文献[25]在“1_3,3 Windows XP/2003命令行的使用”中介绍了Windows系统的命令和命令行解释器:文献在“9.6 shell程序设计”中介绍了操作系统外壳和接口;文献在“第2部分应用和开发篇”介绍了UNIX系统的命令界面和使用;文献有“第2章操作系统的界面”;文献前五章讲授UNIX系统的命令界面和使用方法)。作业管理的内容是否没有必要讲?
![](https://img.fx361.cc/images/2025/0114/EoczGqrd57ZTB94VNWFAKe.webp)
如果作业管理省略不讲,那么用户接口是否可以省略不讲?用户接口讲述操作系统的使用手段和方法,帮助学生了解如何在不同的层次使用操作系统,建立对操作系统的感性认识。如果学生不会使用用操作系统,就很难理解原理。有了感性认识才能加深理性认识,笔者认为,讲解系统调用处理过程可以使学生理解系统的真实运转过程。
3 教材的细节问题
在一些细节问题的讲授方面,教材之间的差异就更大一些。
3,1文件系统
文件系统讲述内容及深浅差异很大。如没有讲述文件系统调用(打开、关闭、读、写)实现内容的教材有文献;有少量文件系统调用实现内容的教材有文献:讲述文件系统调用实现内容较多的教材有文献;没有讲述记录式文件结构及查找方式的教材有文献:讲述记录式文件结构及存取方式的教材有文献。
到底哪些内容该讲哪些内容不该讲?该讲的内容如何讲?讲到什么程度?笔者认为记录式文件的内容应该在数据库或数据结构课程中讲述,UNIX等流行的操作系统没有实现记录式文件;而流式文件系统调用(打开、关闭、读、写)的实现的讲授是基本的,是很有必要的。掌握这些内容有利于更好地理解数据结构,但要把握好讲解的粗细程度。 一些概念术语的定义不统一,例如文件控制块、文件目录、文件目录表、文件目录项等。文件卷作为文件系统的基本概念,很多教材没有介绍,只在文献中出现过。另外RAID技术这样的实用新内容也只在文献的设备管理一章出现。
3,2进程管理
互斥、同步和通信作为进程管理模块的基本概念和基本内容很容易和现实生活中的事例进行类比,应该是比较容易讲解也比较容易理解的,但有些教材把它们的描述复杂化了。例如文献中第42-44页介绍互斥概念所引用的例子让人感觉一头雾水。很多教材(文献等)在介绍引出临界区和互斥概念时都引用了不同进程交替执行修改共享变量的一条语句对应的三条指令的例子,通过这样一个最简单例子的分析让学生理解产生临界区和互斥问题的根本原因,同时可以帮助学生加深理解进程调度现场概念和进程调度工作过程,但这些教材基本上都用到了R1和R2两个寄存器,问题被人为复杂化了,也难以解释。本来是一条语句编译成的三条指令对应的同一个程序段被不同进程交替执行所产生的问题,引用一个寄存器就可以讲清楚,无需要引用两个寄存器。在最先给出此例子的文献中进程调度章节内容放在后面讲述,在引出临界区和互斥概念时因为学生没有进程调度现场概念也不了解进程调度工作过程,不得不引用了R1和R2两个寄存器,但有些后来出版的教材在进程调度章节内容放在前面讲述的情况下仍引用了R1和R2两个寄存器就说不通了,难免产生抄袭的嫌疑。实际的系统中不同进程执行例如countp=countp+1(甚至countp=countp-1)这样一条语句对应的三条指令必然只用同一个寄存器,要准确清楚地讲解临界区和互斥问题必须要用到进程调度现场概念和进程调度工作过程知识,所以进程调度的内容应该先讲授。
关于并发程序的特性,文献概括为“不可再现性、间断性、通信性、独立性”四点;文献概括为“交叉性、非封闭性、不可再现性”三点;文献概括为“间断性、失去封闭性、不可再现性”三点;文献概括为“动态性、制约性、并发性”三点;文献概括为“失去程序的封闭性、程序和计算不在一一对应、不可再现性”三点等。这样的不一致不应该出现。
大多数教材对生产者消费者问题及其解答的讲述给学生的印象是信号量mutex用于生产者消费者之间需要互斥,特别是文献第35页明确写出“生产者消费者之间还有互斥关系”。而实际上生产者消费者之间的互斥已经通过两个同步信号量解决,而mutex实际上用于解决多个生产者之间互斥和多个消费者之间互斥,这一点只在文献中被明确指出。
3,3存储管理
现有的教材存在页号、页面号等名词的所指不一致及虚地址空间、虚拟存储器等概念的定义不一样等问题,很多教材没有明确指出页表放在哪里,是存放在PCB中吗?实际操作系统中各个进程的页表所占用的内存是在堆上动态分配,如果不明确指出这一点,会让学生甚至教师感觉迷茫。
4 结论
CC2001、CCC2002乃至CC2004主要的成果是详细设计了整个学科的核心课程,计算机科学专业方向知识体系划分为知识领域、知识单元和知识点三个层次,共有14个知识领域,132个知识单元,560个核心学时。CC2004把CS-OS操作系统课程作为一个知识领域划分为8个核心知识单元和4个选修知识单元,进一步地还给出了每个知识单元的知识点和学习目标。但这仍然是粗线条的。每个知识点到底要讲解到什么程度?要求学生掌握到什么深度?衡量标准是什么?评价指标是什么?到底需要多少学时?细节问题:例如文件系统核心知识单元知识点中包含“文件中的数据和元数据”,“文件中的元数据”到底指什么?现有的操作系统教材中几乎见不到这个概念,“元数据”是否是操作系统课程应该讲授的内容?用户接口或作业管理的内容是否应该讲解?包含在哪一个知识单元里?
存在上述问题的根本原因是缺乏对操作系统的知识体系结构和标准化方面的研究,解决问题的根本途径是加强操作系统的教学研究工作,而这种研究还需要由国家级的专业教学委员会来组