操作系统实践教学的探索

时间:2022-09-26 06:42:21

操作系统实践教学的探索

摘要:操作系统实践教学应该为学生提供一个实验环境,使学生能够触摸到真实的操作系统内部,帮助学生理解抽象的操作系统原理和机制;使学生能够亲身体验操作系统功能的设计和实现过程,培养学生应用操作系统知识的能力。本文分析了操作系统实践教学的目标,阐述了具体实验项目及其设计理念。

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

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

文章编号:1672-5913 (2007) 20-0008-03

1引言

操作系统是计算机科学与技术专业的一门重要基础课程,其教学目的使学生通过学习各种资源管理的原理和机制,建立起关于操作系统如何工作的理论知识基础。但操作系统同时也是学生们认为比较难学的专业课程之一。其原因有二:一是操作系统课程讲述的是计算机资源管理的原理和机制,其中包含了许多抽象的概念和算法;二是操作系统作为最底层的核心软件,深藏于“用户界面”之下,学生们难以找到学习内容的参照对象。因此,操作系统实践教学作为教学辅助环节十分重要,它的作用在于通过动手做实验,帮助学生解决从抽象理论到具体对象的认识问题,培养学生应用知识解决问题的能力。

与程序设计、编译原理和数据库等软件课程的实践教学相比,操作系统课程的实践教学有其特殊的地方。前者可以通过实现一个小型的应用程序或简化的编译器、数据库来完成实践教学,而后者不能这样做。因为操作系统不仅与硬件平台密切相关,而且内部结构非常复杂,即使让学生实现一个最简单的操作系统也是不现实的。近年来,我们以开源的Linux操作系统和WMware虚拟机作为实践平台,针对不同的教学对象和教学要求,精心设计了多种方式的实验项目,在操作系统实践教学上做了一些有益的探索。本文首先分析操作系统实践教学的目标,然后说明如何具体设计实验项目。

2实践教学目标

我们认为,操作系统实践教学作为辅助教学环节,有两个主要目标。

(1) 帮助学生理解操作系统的基本概念、原理和机制

操作系统包含了许多抽象的基本概念如进程、线程和虚存,也包含了复杂的资源管理算法和机制,如进程调度和页式存储管理。这些知识对于本科学生而言是比较难以理解的,因为他们平时使用的是操作系统的用户界面,很少也很难窥视到操作系统的内部。操作系统的实践教学应该让学生了解一个真实操作系统的内部实现,从而帮助学生更好地理解操作系统的基本概念、原理和机制。

我们采用开源的Linux操作系统作为实践教学的教材,指导学生阅读和分析Linux的部分源码,将学生带入一个真实而复杂的操作系统内部世界。在阅读和分析源码的过程中,学生能够了解抽象的进程和线程所对应的具体数据结构,了解进程调度算法的实现过程,并应用所学的操作系统原理知识分析和讨论Linux的调度策略。另外,我们要求学生在做每项实验前自学Linux操作系统的相关知识,使学生清楚地看到操作系统的原理知识是如何体现在一个实际系统中的。

(2) 培养学生应用操作系统知识的能力

操作系统是计算机系统的核心软件,从事计算机行业的专业人员都需要操作系统的原理知识,但他们担任的角色不同,面临的问题就不同,因而所具备的操作系统知识的应用能力也不同。系统管理员需要根据操作系统知识和用户的需求,合理地配置系统资源,需要及时了解系统运行状态,调整资源管理策略,使系统性能达到最佳;系统程序员需要详细了解操作系统的内核结构、资源管理机制和功能模块接口,为操作系统添加新功能或编写设备驱动程序;应用程序员则需要正确理解操作系统的功能和资源管理策略,编写出高效率且安全的应用软件。操作系统的实践教学必须考虑到上述不同能力培养的特点,以满足学生未来任职需要。

我们以开源的Linux操作系统和WMware虚拟机作为实践平台,精心设计实验项目,从多个方面培养学生应用操作系统知识的能力。例如,学习使用Linux的proc文件系统,对内核运行状态、资源管理状态和进程运行状态进行动态查询;学习Linux的系统调用机制和内核模块动态加载机制,掌握为操作系统添加新功能的方法和过程;编写进程通信应用程序,掌握各种进程通信、同步互斥机制的特点和使用方法。

3实验项目设计

我们在上述的实践教学目标的指导下,设计了多个实验项目,内容涵盖了操作系统的主要知识点,包括用户界面、进程通信、proc文件系统、系统调用机制、进程调度、内核同步互斥机制、驱动程序接口等。考虑到学生的知识和经验背景,实验项目的安排从简到难,从依靠指导到自主设计。除必做的实验项目外,还设计了选做的实验项目,为有能力的同学提供更多的学习空间。下面分别介绍我们设计的九个实验项目。其中,前三个实验项目是为应用程序员和系统管理员设计的,使学生掌握如何使用操作系统的命令界面、进程机制和系统性能管理工具;第4个实验安排学生阅读和分析源码,理解操作系统原理在实际系统中的实现过程;后五个实验项目是为系统程序员设计的,让学生体验操作系统内核编程的全过程。

(1)Linux命令界面及shell编程

该项实验的目的是学习使用操作系统的命令用户界面。实验内容是:了解和使用Linux的常用命令,包括如何使用联机帮助手册和管道线命令;学习使用命令程序语言shell进行简单的编程,从而理解命令解释程序的工作过程。由于学生平时使用的是windows的图形用户界面,面对Linux的命令界面感到很陌生。所以,我们先给学生一个shell例子程序,让学生按照说明步骤上机运行该程序,然后要求学生参照此程序实现一个应用管道线的shell程序。

(2) 进程间通信

该项实验的目的是加强学生对进程概念的理解,使学生掌握不同的进程通信和同步互斥机制的特点和使用方法。实验内容是:设计应用程序实现父、子进程之间的数据交换,可采用各种方法实现父子进程之间的通信(共享区、文件、消息传递、管道文件)和同步互斥控制(信号量、信号)。

(3) 使用proc文件系统

该项实验的目的是学习如何使用Linux的proc文件系统,对内核运行状态、资源管理状态和进程运行状态进行动态查询。实验内容有:先通过课堂讲授让学生了解proc文件系统的设计思想、工作原理和组织结构,然后要求学生利用proc文件系统中的数据来说明操作系统或进程的某些特性。例如,利用/proc/stat中的数据显示CPU的使用情况――系统利用率和用户利用率;利用/proc/intr中的数据显示内存容量对缺页异常次数的影响。

(4) 分析进程调度算法和策略

该项实验的目的是帮助学生深入理解进程调度过程,培养学生分析和研究问题的能力。实验内容是:阅读和理解Linux的进程调度函数schedule()、进程数据结构task_struct等内核源码,分析和研究Linux的进程调度算法和策略,写出研究论文。要求学生在论文中讨论以下问题:进程调度队列是如何组织的;如何实现三种调度类型(SCHED_FIFO, SCHED_RR, SCHED_OHTER);进程的优先级是如何定义和动态变化的;如何决定时间片的大小以及它与优先级的关系;对实时进程和多CPU的支持;评价Linux的调度策略并提出改进意见。

(5)Linux内核编译

该项实验的目的是学习如何生成新内核,为后面进行操作系统内核编程的实验做准备。实验内容有:学习如何下载和解压源码,了解Linux内核源码的组织结构,学习配置、编译、安装和启动Linux新内核的全部过程。

(6) 添加系统调用

该项实验的目的是让学生理解操作系统的重要机制――系统调用机制的工作过程,学习如何添加系统调用。实验内容是:阅读源码文件,分析系统调用表等内核数据结构;实现新的系统调用函数,添加新的系统调用,编译和生成新内核;编写应用程序,验证新系统调用的功能。

(7) 加载内核模块

该项实验的目的是学习动态增加内核功能的方法。内核模块动态加载/卸载是操作系统的另一重要机制,它使得用户不仅能动态裁剪内核功能,还能通过自己编写内核模块或使用第三方软件来动态增加内核功能。实验内容有:首先通过课堂讲授让学生了解Linux模块机制的工作原理、模块的编程和编译方法,然后要求学生采用内核模块编程方法,为proc文件系统添加一个新文件。在该项实验中,学生不仅要学习内核模块的编程、编译、加载和卸载全过程,还需要查找资料和阅读源码,搞清楚proc文件系统中关于创建文件、读/写文件和删除文件的函数接口,以此锻炼学生的自主动手的能力。

(8) 实现同步事件原语

该项实验的目的是学习如何实现同步互斥机制。实验内容是,实现一组同步事件原语:能够使多个进程阻塞在某个特定的事件上,直到另一个进程产生该事件,从而唤醒所有在此事件上阻塞的进程。这是一项综合的复杂实验。实验者需要分析清楚同步事件原语的语义以及进程同步过程中的所有细节问题,正确设计同步事件的数据结构和系统调用原型,分析Linux源码中关于进程等待队列和内核信号量的相关函数,并利用这些函数实现同步事件原语的系统调用。然后,采用内核模块方法将新的系统调用添加到Linux内核中,并通过应用程序验证其正确性。

(9) 实现虚拟管道设备

该项实验的目的是学习如何编写驱动程序。实验内容是:使用内存区(例如2048字节)实现一个虚拟的字符管道设备:允许多个进程向管道写入数据,也允许多个进程从管道读出数据,保证数据的写入顺序与读出顺序是一致的。这也是一项综合的复杂实验,实验者需要分析研究读/写管道设备过程中的同步互斥问题,利用内核信号量函数和进程阻塞/唤醒函数解决同步互斥问题;分析研究Linux的字符设备驱动程序接口,学习如何编写和注册驱动程序的接口函数以及如何建立Linux设备文件。然后,采用内核模块方法将新功能添加到Linux内核中,并通过应用程序验证其正确性。

4结束语

操作系统实践教学应该为学生提供一个实验环境,使学生能够触摸真实的操作系统内核,从而更好地理解操作系统的基本概念、原理和机制;使学生能够亲身体验操作系统功能的设计和实现过程,培养学生应用操作系统知识的能力。我们在操作系统实践教学中做了一些有益的工作,教学效果也不错,但还存在一些问题有待于进一步研究和探索。例如,如何与课堂教学互补,进一步激发学生学习操作系统的兴趣;如何通过构建实验平台将操作系统中更多的内核机制(中断机制、内存管理机制等)呈现给学生;如何设计更为实用的、学生自主性更强的实验项目,等等。

参考文献

[1] 罗宇. 操作系统课程设计[M]. 北京:机械工业出版社,2004.

[2] 陈莉君. 深入理解Linux内核[M]. 北京:中国电力出版社,2004.

[3] 李善平. 边学边干―Linux内核指导[M]. 浙江大学出版社,2002.

作者简介

邓胜兰(1961-),国防科技大学计算机学院研究员,曾经多年从事巨型机操作系统的研制工作,目前主要从事操作系统的教学工作。

宁洪(1961-),国防科技大学计算机学院教授,长期从事软件工程和数据库的教学科研工作,曾荣获全军优秀教师称号。

上一篇:计算机专业生产实习模式的探索和研究 下一篇:实训教育提升东软人力资源竞争力