《操作系统》的实践教学研究
《操作系统》的实践教学研究
1 概述
《操作系统》课程是计算机及相关专业的核心基础课,该课程不仅要求学生较好地掌握理论基础,而且要求培养学生良好的课程实践能力。由于该课程的内容比较抽象、深奥,并且课程实验难做,实验效果不明显,所以,该课程的实践环节在很多学校成为摆设,有的学校干脆去掉实践环节。然而,实践教学又是本门课的重要组成部分,实践教学对于学生理解和掌握操作系统的基本原理和方法,为今后从事系统程序设计,并发程序设计,多用户环境应用程序设计打下坚实的基础。所以,本门课不但必须包含实践内容, 而且还应该加强,使之能更好地辅助课堂教学。[1]
2 《操作系统》实践环节的运作情况
经过对各高校《操作系统》实践教学的调查,《操作系统》实践部分的开设形式主要有以下四种:
2.1 验证操作系统部分功能的实验
这种实验方式最简单,主要思路是,以某个实际的商业操作系统为实验环境,学生可以尝试执行操作系统提供的某些功能,能力更强的学生还可利用操作系统提供的系统调用函数编写、运行程序,以改进功能。通过这两种方式,学生可体验操作系统原理在实际商用操作系统中是如何工作的。
这种方式的特点是,学生不必编写操作系统功能实现的代码,对完全理解操作系统的内涵意义不大。
2.2 模拟经典算法的实验
这是比较常见的一种实验方式。其执行过程是,由教师选取操作系统中的一些经典算法,如读者-写者问题,电梯算法,让学生使用其熟悉的编程语言(如:C语言、C++语言)来实现算法。
该方式与程序设计课程的上机环节相似,这有助于学生理解《操作系统》的理论和技术,但是,这种方式由于缺乏训练学生对操作系统完全性的把握,达不到培养学生完整掌握操作系统的目的。
2.3 替换实际操作系统的主要模块
这种方式对学生的编程能力要求较高。其执行过程是,以开源的操作系统为平台,要求学生选取其中的主要功能模块,并对其进行替换及扩展。然而,开源的操作系统一般比较庞大,结构环境复杂,对师生的要求很高,一般高校实施的效果不好,最终只有小部分学生达到实验目的,学生的受益面不大。[3]
2.4 设计一个操作系统雏形
这种方式的执行过程是,教学中可选取一个包含简单内核的教学操作系统,让学生逐步改进、扩展其功能;或者干脆让学生设计一个全新的操作系统雏形,该雏形包含操作系统的基本内核功能,如处理机管理、进程管理、内存管理、设备管理、文件管理功能。
该方式与课程实验教学目标一致,理论上比较理想,但在实际的执行过程中,由♪于操作系统是一个大型的系统软件,其设计、结构相当复杂,因此这种方式实施起来难度很大。
3 在教学操作系统GeekOS上完成实验教学
由于一般的商业操作系统设计复杂,结构庞大,学生规定课时内很难全面掌握,同时,这些操作系统已经非常成熟,差不多实现了全部功能,学生没有多少新的工作可做。所以,设计一个基于教学操作系统的实践教学平台显得尤为迫切和必要。
3.1 教学操作系统的分类
教学操作系统有两大类:一类是针对RISC结构MIPS处理器的,例:Nachos;另一类是针对CISC结构的X86通用处理器的,例:Minix、 GeekOS。
3.2 GeekOS操作系统概述
最通用的处理器是CISC结构的X86通用处理器。它是一个用C语言开发的操作系统,学生可以在Linux或UNIX环境下对其进行功能扩充,也可以在g(project1等项目中还包含有磁盘镜像diskc.img),makefile项目管理文件。
2) Include文件夹。包含两个子目录,分别是geekos和libc,在geekos子目录中有kthread.h,keyboard.h等头文件,在libc中包含有GeekOS支持的C语言标准字符串函数头文件string.h。
3) scripts文件夹。包含项目编译时用到的一些脚本文件。
4) src文件夹。包含系统内核源代码,用户修改GeekOS系统时要修改的源代码如main.c等都位于这个目录中,在User子文件夹中一般是用来存放用户的测试文件,在tools子目录中的代码是用来建立pfat测试文件系统的。
3.3.2七个项目的功能
project0:在该项目中,要求学生实现一个内核级的I/O进程,该进程能从键盘接收一个按钮,并显示在显示屏上。该项目的目的是让学生了理解GeekOS的编译、链接和运行,明白计算机系统是如何启动的。
project1:在该项目中,要求学生熟悉可执行链接文件(ELF)的格式,并通过编程程序来分析该文件,同时将分析结果送到加载器。该项目的目的是让学生☏理解ELF文件的结构,使学生掌握如何加载和运行可执行文件。
在提供的GeekOS内核系统的基础上,为学生设计了7个由易到难的设计项目用于GeekOS的改进。这些项目分别涵盖了操作系统内核的各个基本模块:系统启动,进程管理,存储管理,文件系统,访问控制以及进程间通信。7个项目都规定了改进的目标,并提供了一些设计指导性的意见,但没有提供源代码,所以学生首先必须熟悉GeekOS的基本工作原理,才能开展各个项目的设计与实现。
project2:在该项目中,要求学生编程来支持用户态进程,这种支持包括初始化用户态进程空间、初始化用户进程空间、切换用户进程、导入用户程序。该项目中,计算机存储分配方式还是采用段式分配。该项目实现后,学生就可以使用GeekOS提供的命令行解释器Shell运行一些命令来执行PFAT文件系统内的用户测试程序。
project3:在该项目中,要求学生改进GeekOS的调度程序,实现基于4级反馈队列的调度算法(初始GeekOS系统仅提供了FIFO进程调度算法),并实现信号量,支持进程间通ส信。
project4:在该项目中,要求学生编程实现分页虚拟存储管理,以替代前述项目中一直采用的段式存储管理。学生实现分页式虚存管理以后,系统在内存不足时,就可以将部分内存页面调出送到硬盘,以缓解内容压力,实现虚拟存储技术。
project5:在该项目中,要求学生实现GOSFS文件系统,该文件系统采用虚拟文件系统,可加载不同的文件系统,PFAT只读♀文件系统是默认加载的文件系统。该项目的目的是要实现一个多级目录的、可读写的文件系统。
project6:在该项目中,要求在文件系统中新增一个访问控制列表,并使用匿名半双工管道实现进程间通信。
4 《操作系统》实践环节的考核
《操作系统》实践环节的考核非常重要,好的考核将激励学生努力学习,达到实验效果,办法如下:
1)教师制定实验报告格式和要求,教师对学生完成的实验报告的作检查和评价;
2)对设计性实验,要求学生回答并作出评价,回答的问题主要有:阐述解决该问题的 Ü算法思想、所使用的数据结构是如何设计的、使用的测试用例是如何选取和设计的、算法性能怎么样。
3)对一些学生能实现的算法,要求学生上机演示,教师在其演示期间可提问并作评价:主要程序代码的含义,分析及解释运行结果。[4]
5 结束语
本文讨论了《操作系统》课程实践环节的主要动作方式,并分析其利弊,然后提出了选用GeekOS教学操作系统作为实践平台来开展实践教学工作。在实际运作过程中,为达到较好的学习效果,可对学生实施分组,每组6个学生(好中差搭配),灵活调整学生要完成的任务。