“操作系统”课程实验教学探讨

2009-08-28 09:09
计算机教育 2009年14期
关键词:操作系统实验教学

陈 渝 向 勇

摘要:“操作系统”作为计算机科学与技术专业的一门重要基础课程,强调理论知识和实践的相互促进。本文针对如何为不同能力不同基础的学生提供更有效的实验指导模式,使操作系统实验教学能够让学生更全面和深入地理解操作系统的有关知识,从而全面掌握操作系统的整体框架和流程,做了有益探讨。

关键词:操作系统;实验;教学;

中图分类号:G642 文献标识码:B

1前言

“操作系统”作为计算机科学与技术专业的一门重要基础课程,高校的操作系统实验是对操作系统原理的具体实现。通过对操作系统源代码的分析和功能实现的实践,可以使学生深入了解操作系统的功能,加深对操作系统所涉及的概念、原理等的理解,体验操作系统原理中很少涉及的复杂软件架构的具体实现等。因此,本文就“操作系统”实验课实验内容的设置及实验环境和教学方法加以分析探讨。

2当前国内外操作课程实验的特点

把“实际设计操作系统”作为“操作系统”课程实验的教学目标是一个看似情理,却很难有效操作的事情。当前国内外高校操作系统实验的几种形式如下所示:

第一类是模拟验证型实验,即选择操作系统原理中的一些典型技术,如内存页替换算法、进程调度算法等,用基于应用程序编程的方法来实现相关技术,算法所涉及的资源是实际不存在的。这种类型实验的特点是可以方便地对操作系统原理中所涉及的典型技术进行实现,有助于对操作系统原理的理解。但学生较难体会实际操作系统对计算机硬件的交互,以及操作系统的实际框架和部分运行机制(如中断)的特点。

第二类是使用验证型实验,即选择某实际操作系统(Windows、Linux、OpenSolaris等)作为实验环境,通过具体使用、编写应用程序和采用相关系统工具来观察和验证实际操作系统中一些技术。这种类型实验的特点是让学生置身于真实的操作系统中,可了解这些技术的具体实现 情况。但学生较难涉足操作系统设计的锻炼,对操作系统内部细节了解不深。

第三类是剖析验证型实验,即结合操作系统原理来分析一个具体的操作系统实现(如Linux、WRK、MINIX等),比较原理和实现之间的差异。这种方法的目的是将操作系统的基本原理与操作系统的具体实例结合起来,并通过实验来替换或改变操作系统中已有的功能。采用这种方法的教师对所讲授的操作系统的结构和实现要非常熟悉,对教师的要求较高。另一方面要求学生理解具体的操作系统实现,对学生分析操作系统源码的能力要求也较高。

第四类是扩展设计型实验,即提供一个从无到有的渐进式操作系统原型,由学生对其功能进行完善和扩充。如首先设计引导程序,然后再设计内存的管理、外设管理等一系列实验,由学生在渐进式操作系统原型的基础上来完成实际的大部分功能、策略和算法等。如何让学生理解一个完整的操作系统的架构是此类型实验的难点。

为了更好地开展“操作系统”教学,我们这几年分析了解了国内外重点大学的操作系统实验教学,并重点参考了MIT“操作系统”课程6.828的实验内容,对上述四种类型实验都进行了一定得尝试和改进。我们认为对于研究型大学,第四类实验是一种比较好的实验方式。这种实验方式需要一个简洁的功能齐全的微型教学用操作系统,需要一个方便的运行调试环境和详细的实验指导书,这三者缺一不可。下面我们将就这些方面对目前正在开展的操作系统实验教学进行阐述。

3操作系统实验课程设计

3.1实验内容设计

我们的操作系统实验教学为扩展设计型实验,即提供一个从无到有的渐进式操作系统原型,由学生对其功能进行完善和扩充。通过实验课程学习,让学生最终能够自己设计并实现一个操作系统。为此我们的操作系统实验环节分为8个主要部分,每个部分相对独立、也有一定的依赖性。清华大学操作系统实验内容如下:

(1) 引导程序和OS启动: 个人完成

(2) 中断与设备管理: 个人完成

(3) 内存管理: 个人完成

(4) 进程管理: 个人完成

(5) 处理器调度: 个人完成

(6) 同步互斥与死锁: 个人完成

(7) 文件系统: 个人完成

(8)OS监控器: 小组完成

前7实验部分就可以构建成一个简单且功能全面的操作系统,第8个实验让学生能够对操作系统有一个更好的全局了解。我们重视个性化培养,倡导层次教学法,鼓励学生积极讨论学习,从个性化发展的角度考察学生的创新思维能力和理解问题的能力。根据学生的学习能力和兴趣的不同,对学生的要求也要分出层次。通过设置扩展实验来让水平高的学生有更多的锻炼的机会。通过细化实验指导书、设置简单实验并提前公布答案来让水平低的学生能够理解实验的内容和目标。

3.2实验用操作系统设计

实验用操作系统要求功能全面(便于学生理解原理)、代码量很小(便于学生分析源码和架构)、能在实际的常用计算机上运行;这几方面者是相互矛盾的。我们通过调研,采用MIT的xv6教学用操作系统作为我们的基础。xv6的特点是模拟了早期的Unix V6实现,并改进在Intel x86上运行,且支持SMP架构。我们在xv6的基础上进行了重新设计和改进,采用渐进的方式形成8个实验内容单元,每个单元的代码量都很小,第一个实验中的源代码一共只有不到300行代码,第六个实验中的源代码页只有5000多行。

xv6基于典型的UNIX操作系统设计思路。简单地说,xv6是一种能区分内核态和用户态,基于扁平(或虚存)内存管理的层次型单体内核,应用程序和操作系统是处于不同的特权状态和地址空间。代表应用程序的用户态进程运行在CPU的用户态(又称非特权模式,用户模式),无法直接访问系统硬件和操作系统中的系统数据,而操作系统运行在CPU的核心态(又称特权模式,内核模式),可以访问系统硬件和核心数据。下面分别从系统调用接口、进程/线程管理、内存管理、文件系统、I/O管理等几个方面进行总体分析。

系统调用是应用程序访问操作系统的接口。在系统调用接口上,通用操作系统与基于此操作系统的应用程序处于两个不同的CPU特权态,操作系统处于核心态,而应用程序处于用户态。在核心态可以执行CPU特权指令,而用户态无法执行特权指令,且只能通过特定的指令或中断来访问操作系统提供的各种功能。这在一定程度上保证了系统整体的安全,避免应用程序对操作系统可能的破坏。

在内存管理方面,xv6操作系统采用了虚拟内存管理方式,这样一般情况下不同进程的地址空间不能直接访问,且应用程序不能直接访问内核地址空间。所以一个错误的应用程序不会导致系统的崩溃,从而增加了系统的可靠性。在内存分配和释放的管理上,xv6相对实现得比较简单,采用基于可变分区分配的首次适配算法,容易产生内存碎片。

在进程管理方面,当前操作系统结合虚存管理,采用进程的管理方式。进程代表了一个程序执行的过程以及其所占用的计算机资源(包括CPU、内存、文件等),进程的执行流可用线程来表示。操作系统的调度单位可以是进程。一个进程可以包含多个线程,属于同一进程的多个线程共享进程管理的资源,比如属于同一进程的多个线程共享进程所管理的内存,这些线程可以直接访问属于进程的全局地址空间。 xv6操作系统实现了一个基于进程的简单进程管理机制。

在文件系统管理方面,当前通用操作系统结合虚存管理,实现了多种复杂、高效且可靠的文件系统,且建立了一个统一的虚拟文件系统层,屏蔽不同文件系统的差异,对上层提供统一的接口。且与用户管理和进程管理结合,可实现安全管理,保证对文件的安全访问。xv6操作系统实现了一个相对简单的基于inode索引方式的文件系统。

在I/O管理方面,xv6操作系统与通用操作系统(特别是类UNIX操作系统)差别不是特别大,都把设备“看成”是一种特殊的设备文件,有设备号,用文件的访问接口来进行打开、关闭、读、写和控制等操作。在灵活性方面,xv6驱动程序不能像通用操作系统那样根据硬件情况动态加载,而是在编译时候就静态确定的。

4结束语

经过多年的探索与实践,“操作系统”课程已成为清华大学计算机系的重要的专业基础课。操作系统的发展,依赖于教、学双方的共同参与和努力,以及不断改革创新的教学方法。

猜你喜欢
操作系统实验教学
“自我诊断表”在高中数学教学中的应用
声波实验
关于植物的小实验
智能手机操作系统的分析与比较
国产桌面操作系统中虚拟化技术应用研究
在遗憾的教学中前行
计算教学要做到“五个重视”
教育教学
最酷的太空实验
让合作探究走进实验课堂