操作系统课实验项目分析

时间:2022-08-30 11:03:44

操作系统课实验项目分析

摘要:本文总结了国内外一些一流大学操作系统课实验项目的设置情况,分析了各类项目的特点、难点及效果,介绍了相应的实验环境建设的方法以及为客观地评价学生实验成果而设计的评价准则。

关键词:操作系统;实验项目;实验平台

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

文章编号:1672-5913 (2007) 22-0021-04

1引言

操作系统课程是一门内容丰富,包含许多概念、方法、算法的课程,解决好理论与实践相结合的问题是提高操作系统教学质量的关键。例如,如果在讲解同步机制前先指导学生设计并发运行的多线程程序,当他们直接观察到由于缺乏同步机制导致程序结果出错的情景,就会激发出对解决方案的学习热情。国内外许多大学针对操作系统课的实践环节提出了丰富的多层次的实验方案,下面分别从实验内容、实验环境、考核方法与标准等方面进行分析介绍。

2实验内容

对于操作系统课程实验,实验平台在很大程度上决定了实验的内容和难度以及效果,所以我们下面主要按照实验平台或实现层次划分项目的类型。

1.1教学用操作系统

这类实验又可以分为基于模拟器的和直接运行于裸机上的实际OS源代码。基于模拟器的有伯克利的OPS、Toy、Nachos、MPX、OPS、上海交大开发的MOS操作系统等。直接运行于裸机上有MINIX、XINU等。基于模拟器的系统是面向实验设计的,会设置一些便于的调试与项目管理的特征。例如,OPS系统允许学生周期地查看系统的状态信息,包括设备表、PCB池、事件队列等。学生也有机会修改模拟参数[1]。OPS的项目产生器能自动生成模板文件,包含过程头和所需的数据结构声明,只由学生完成过程体。

作为一个教学用操作系统,Nachos的目标不是展示一个成功的操作系统,而是提供一个便于扩展的框架。例如它的文件系统实现了所有必要的数据结构,只是在很多方面做了一定的限制,可将实验项目内容设置为消除某些限制。

MINIX是一个虽小但完整的教学用操作系统,可运行于实际的机器硬件上。与基于模拟器上的系统比,它可以给学生更切实的感受。包含有3000行注释的12000行源代码使整个系统较为容易阅读和理解,MINIX“小”到学生可以理解它的主体部分,“大”到足够让学生体会到一处小小的修改会影响到表面上看起来不相关的函数里。学生项目可以是修改调度器或增加新的文件系统等。但是从教学的角度看,上万行的代码仍过于庞大,并且MINIX的“完整”也限制它的扩展余地。所以近年来出现了面向“简单、真实、容易理解的”的雏型操作系统,例如瑞士ETHZ大学的Topsy、美国马里兰大学的GeekOS,以及北京大学的PTOS等。

除了用于操作系统课的教学,近年来随着嵌入式系统的兴起,教学类操作系统正由于规模小而受到越来越多的关注。

1.2通用操作系统内核

由于Linux操作系统是开放源码的,所以这类实验通常以Linux作为目标平台。此类实验较早的提倡者是Gary Nutt[2],他提出的一些实验项目内容被许多学校沿用、发展,在美国有10多所大学采用修改Linux内核的实验[3]。分析Linux源代码能锻炼学生分析大型软件代码的能力,对高质量代码分析、理解的过程也同时是一个学习好的编程风格和设计思想的过程。所以虽然它们是操作系统类的实验,但从某种程度上也是软件工程类的实验。

基于Linux的修改内核实验通常包含如下几类内容:

Linux内核编译与配置方法

在分析阅读源代码基础上修改调度算法

实现新的同步原语

增加系统调用

增加可动态加载模块

驱动程序设计

1.3仿真实验

这类项目通常采取仿真实现操作系统中的一些典型技术,如进程调度算法,但实现中涉及的资源和数据结构都是虚拟的,实现程序并不需要对实际资源进行真正的访问。国内大多数高校都设置这类的实验[2]。这类实验不需特定的支撑平台,教师避免了安装和配置支撑平台软件的工作,学生避免了花在熟悉实验平台方面的时间,通常调试也更容易一些。而且教师可选择更广范围的OS概念来分配项目。学生可以在任意计算机上使用任意程序设计语言来编程实现。

这类实验最大的缺点是通常只要求实现一个孤立的模块,无法体现操作系统系统各模块之间复杂的联系,只关注于某一个功能的实现,实际上相当于简化了问题。设想一个实现进程调度算法的模块,如果只是实现一个单独的调度策略,而不是像一个实际的系统中那样会综合运用多个策略;如果简化系统的状态为只是运行与就绪;如果不考虑响应信号会影响状态转换;如果系统调度的时机只是运行完与时钟中断;如果不考虑实现定时唤醒机制;如果不考虑核心数据的保护等等;这样的一个实现与实际系统中的复杂性不可同日而语,对辅助学习操作系统理论的效果很有限。

所以,为了能够真切体会操作系统作为一个大型系统软件的复杂性,仿真实验项目内容的选择与设计很重要。我们认为操作系统内核中的底层功能模块不适合做这类实验的题目,因为考虑到实现的效率,通常很难将它们孤立地设计。反之,高层功能模块因为本来就设计为系统可灵活配置与扩展的部分,与其他部分处于较松散的连接方式。这样既能体会操作系统针对某一功能的设计思想,又避免纠缠于硬件相关的细节。例如,用户空间的文件管理器就是这样的项目[4],实验内容的实现通过系统调用使用内核中文件物理组织和设备管理模块,项目的内容聚焦在文件和目录的管理方面。

1.4系统程序设计

系统程序设计是指编写与操作系统紧密相关的程序,这些称为系统软件的模块可看成是操作系统的部分。为了编制这些系统程序,需要详细考察操作系统内核提供的相关资源和服务,所以此类编程实践能促使学生对系统调用和相关数据结构的深入理解。为强调系统程序设计与操作系统教学的紧密联系,美国斯坦福和加州伯克利大学没有设置单独的操作系统课,而是操作系统和系统程序设计课。UNIX类操作系统的命令解释器的实现就是这类项目。在理论课程中只介绍命令解释器所处的层次与功能,正好可以在实验中讲解它的实现方法,使学生进一步领会fork、exec、wait等系统调用设计上的精妙之处。

用户空间的线程库的实现也是这种实验项目。在理论课程中通常只介绍用户级线程与内核级线程的不同,而对用户级线程怎样在内核不察觉的情形下进行切换,学生往往感到困惑。通过这个实验既可以帮助学生进一步理解线程的概念,内容本身也可以归类为对内核调度机制的仿真。怎样既不失去仿真的“真”,又能够控制实现的难度,通过提供支持库实现对CPU寄存器的处理是一个比较好的方案[6]。这样学生在实现线程库时就可以不用汇编语言,在没有简化问题的前提下,只采用高级语言就能完成项目。

1.5系统体验

这类实验是在指定的操作系统下进行,侧重于系统的管理及应用程序设计。与仿真实验一样,项目内容局限在用户空间,侧重点在于操作系统的使用。这类项目的内容通常有shell命令、shell程序、进程通信、线程与同步等内容。这类项目的设计目标主要是开发特定操作系统之上的高级应用程序,这些应用程序会充分利用操作系统的各种支持,是运行效率高的应用程序。生产者消费者问题、读者写者问题等就是这类的项目。在教学中,指明这类典型问题与实际应用问题直接的联系,才能使学生明了这些实验的现实意义,是提高学生兴趣的关键。

3课程设置以及辅助教学环境建设

近年来,许多大学加大了操作系统相关课程的教学力度,例如北京大学14周的“操作系统实习”课在2005年以前为选修课,2005年开始为本科生必修课。2007年起美国加州圣地亚哥大学新设置了“操作系统结构与实现”课,与“操作系统原理”和“操作系统实习”一起构成了系列课程。

现在,开放源码的操作系统不仅仅是争得了一席之地,而且成了商业产品的有力竞争者。所以操作系统的实验对象也更多地转向了此类能提供高质量产品级源码的系统。此类系统由于功能的完整,导致系统庞大不适合在虚拟机上运行,所以许多大学都设置了专用的操作系统实验室。但是由于修改操作系统内核的实验有可能导致系统崩溃,为了避免系统崩溃,指导教师会专门指导编译内核时相关设置的方法,但是这种预防的方法是无法保证一定不会发生系统崩溃,而且由于修改内核需要超级用户的权限,这可能引起其他安全问题。例如机器上的所有文件的所有权和完整性都可能受到威胁。这意味着相应的实验用计算机由于不稳定与公开性无法共享使用。当系统无意中受到破坏时,应当有快速修复的方法。一个超级用户可能有意无意地以大量发送数据包的方式影响网络通信,造成拒绝服务攻击。所以有必要研究相应的管理方法。

一个比较全面的解决方案是这样的[7]:

设置专人管理专用的操作系统实验室,他同时是操作系统课的助教。

实验用机通过一个服务器才能访问网络,服务器上设防火墙。服务器在WPI网上,实验用机在内网里。

实验用机的快速恢复系统脚本程序制成可启动CD。恢复方式应有多种选项。

每一个实验组指定一台计算机,他们有root 权限。每个机器设三类账户:教师账户,本组账户和客人账户。

为防止有人用软盘启动其他组的计算机,设置BIOS使机器的启动顺序为硬盘、CD-ROM,并用密码保护BIOS设置。

每个学生在服务器上设置一个账户,用于备份项目代码以及在实验室以外访问实验机。

为避免通过网络窃取密码,只允许安全的方式(SSH、slogin、scp)连接服务器。

每个学生都能在其他实验用机上启动所属机器的X会话。这样组中多人可同时工作。

因为相当部分的操作系统实验项目难度大,所以师生之间、学生之间的讨论、交流信息非常重要。许多课程建设了网络互动教学环境以适应这种需要,通常以学习交流论坛(BBS论坛)和新闻组的方式。

4评分方法与标准

学生独自完成较大的项目有困难,应当组织3~4人团队共同完成。这样既可以布置工作量大、难度大的项目,又可以锻炼学生的团队协作能力。团队中,理论强与动手能力强的同学可以相互间学习交流,互取所长。这种“团队协作”方式最主要的缺点是不容易保证评价的公正性,如果教师想鉴别出“搭车”的学生,只能通过平时的交流和设置答辩环节。有的学校采用类似民主评议的方式,让学生相互评估对项目完成的贡献大小。

这种当面评价的方式也许不适合国人爱照顾面子的习惯,所以有的大学不把自评的内容放在报告中,而是直接以邮件的形式发给教师。为实现评价的公正性和便于助教操作,应给出具体的评分标准。例如,可参考表1制作实验评估表。

5结论

实验对理解操作系统课的内容很重要,有丰富的各种层次的实验项目与环境供教师依据学生的水平进行选择。如果选择做有可能使系统崩溃的实验,应当有专门的实验室并且采取可靠的管理措施。加强实验过程中与学生的交流和对实验报告的量化评价能够督促学生重视实验,获得好的实验效果。

参考文献

[1] William Stallings. 操作系统―精髓与设计原理(第五版)[M]. 北京:电子工业出版社,2006.

[2] G. Nutt. Kernel Projects for Linux. Addison-Wesley, 2001.

[3] Charles L. Anderson,Minh Nguyen.A SURVEY OF CONTEMP-

ORARY INSTRUCTIONAL OPERATING SYSTEMS FOR USE IN UNDERGRADUATE COURSES.Journal of Computing Sciences in Colleges, Volume 21, Issue 1, Pages: 183 C 190,October 2005.

[4] Gary Nutt. 操作系统现代观点(原书第2版・实验更新版)[M]. 北京:机械工业出版社,2004.

[5] David Hovemeyer. GeekOS: An Instructional Operating System for Real Hardware[EB]. /docs/.

[6] Tom Bennet. A thread implementation project supporting an operating systems course,Journal of Computing Sciences in Colleges Volume 22 ,Issue 5May 2007.

[7] Mark Claypool, David Finkel, Craig Wills. An open source laboratory for operating systems projects. ACM SIGCSE Bulletin archive Volume 33 , Issue 3, September 2001.

作者简介

刘晓燕(1963-),女,博士,副研究员,主要研究方向: Linux 操作系统的研究和分析,知识工程,

张岩(1965-),男,在职博士生,副教授。主要研究方向:生物信息学、信息集成。

通信地址:哈尔滨市南岗区西大直街92号哈尔滨工业大学318信箱150001

电子邮箱:.cn

联系电话:13904637808(0451)86413213

上一篇:“编译原理”研究性教学的探索与实践 下一篇:“并行程序设计”课程建设的体会