面向系统能力培养的计算机专业课程体系建设实践
2014-10-31刘卫东等
刘卫东等
摘 要:系统能力培养是提高计算机专业本科教学质量和水平的一个重要方向。本文提出了系统能力培养的基本概念和内涵,介绍了清华大学计算机科学与技术系在计算机系统能力培养方面所做的工作和实践效果,讨论了课程体系建设和改革的关键内容,给出了一种加强计算机系统能力培养的教学方案。
关键词:系统能力;课程体系;计算机专业
2006年,国务院发布《国家中长期科学和技术发展规划纲要(2006-2020年)》,将“核高基”列入国家重大科技专项。“核高基”是核心电子器件、高端通用芯片及基础软件产品的简称,其被列入国家重大科技专项,一方面体现了它们在国民经济发展中的重大作用,另一方面也折射出我国在这一领域内与世界先进水平存在较大差距。人才培养是科技进步的基础,反思我们在该领域基础知识教学中的不足,改进我们的培养手段和方法,培养出具备创新能力的高素质人才,是值得教育界探讨的话题。
“核高基”是计算机系统的核心和基础。尽管我国在计算机教学领域取得了长足的进步,但主要体现在大规模的应用型人才的养成,没有规模化培养出能够深入理解并掌握计算机系统核心、具备引导行业发展能力的人才。因此,建设新的计算机专业课程体系,着重培养具备计算机系统能力的高素质人才是我们的任务。
计算机系统能力是指能自觉运用系统观,理解计算机系统的整体性、关联性、层次性、动态性和开放性,并用系统化方法,掌握计算机硬软件协同工作及相互作用机制的能力。系统能力包括系统分析能力、系统设计能力和系统验证能力三个方面。系统分析能力就是给定系统结构和输入,分析系统输出的能力;系统设计能力就是给定系统输入和输出,综合出系统结构的能力;系统验证能力就是给定系统结构,验证系统结构与功能符合的能力。三个方面相辅相成,共同构成计算机专业本科毕业生的基本能力和专业素养。
一、课程体系现状分析
计算机专业课程体系中,设置了大量与计算机系统相关的课程,如数字逻辑电路、汇编语言程序设计、计算机组成原理、计算机系统结构、编译原理、操作系统、微计算机接口、嵌入式系统等。这些课程的总体目标,是建立起完整的计算机软硬件系统的知识结构,在课程体系中占有重要的地位。
然而,大量的系统类课程的学习,并没有给学生带来计算机系统能力的全面提升。同学们普遍反映,对于计算机系统还处于“只见树木,不见森林”的状态,对于计算机各个子系统有比较深入的了解,但对各子系统之间的相互作用的关系则了解不深,也不清楚各子系统间的衔接机制。
深入剖析这一现象,我们认为,现有的计算机专业课程教学中,普遍存在以下几个方面的问题。
(1)教学内容上,各门课程独立规划、独立教学,造成了知识体系中知识点冗余和衔接关系脱节。一方面,每门课程强调自身知识体系的完整性和系统性,造成一些知识重复讲述;另一方面,各课程之间知识点缺乏前后衔接和有效整合,难以形成完整的计算机系统知识体系。
(2)教学方法上,各课程采取分析式教学方法较多,突出系统原理的讲解,而限于条件的不足,缺乏对基本完整计算机系统较为全面的说明。造成的结果是学生掌握了基本概念,但难以转化为设计完整计算机系统的基本能力。
(3)实验手段上,基本侧重于对原理的简单验证,而缺乏对复杂系统的综合设计实践。虽然小规模实验可以达到让学生基本理解掌握系统运行原理和初步具备系统开发能力的目的,但由于缺乏足够的工程工作量,使得复杂系统中存在的较为深刻的问题难以暴露。因而,学生虽然经过了训练,但却因训练强度不足,不能对系统有较为深刻的认识和完成具有工程规模的系统级开发,甚至是对计算机系统有“盲人摸象”的感觉。
计算机系统本身具有整体性、关联性、层次性、动态性和开放性等特点,但由于其复杂性,如果课程体系中各课程之间缺乏有效沟通和相互协作机制,就会造成学生系统能力培养和训练上的不足。因此,对课程体系改革势在必行。
二、面向系统能力培养的课程体系建设
为了弥补计算机系统专业课程教学中存在的这一不足,加强专业课程中的系统能力培养,结合计算机类专业教学指导委员会计算机系统能力培养的相关要求,有必要对计算机专业课程体系进行改革。其目标确定为:将计算机系统类课程在教学理念上统一贯彻“注重系统、强调实验、培养能力”三个方面;将教学内容进行统一规划,为同学们构建完整系统的知识体系和知识结构;并从工程教育的角度,探索一体化设计课程体系,以及原理性与工程性结合、分析式与综合式互动的教学方法;实验手段上注重教学载体和实验平台的统一,最终实现学生能够基于一个指令集系统,自主设计一台功能计算机、一个操作系统核心、一个编译系统的教学目标,切实使学生全面掌握计算机系统的知识点,并能融会贯通,培养计算机系统的设计能力。
为达成改革目标,我们在教学内容规划、实验体系设计、实验平台开发等方面开展了一系列的工作。
1.统一规划教学内容和教学方法
根据课程体系改革目标,我们首先选择计算机系统类课程中的数字逻辑电路、汇编语言程序设计、计算机组成原理、操作系统、编译原理5门核心课程,组建计算机系统类课程群。以ACM发布的计算机专业课程知识体系为蓝本,对照我系课程体系中的相关教学内容,查找各课程知识点和教学内容的不足,各课程进行补充和完善,注意各课程教学内容间的衔接。具体调整内容如下表所示。
课组内容调整与优化表
课程名称 主要调整/优化内容
数字逻辑电路 使用可编程芯片的入门级以上到部件级以下的设计实验(包括多路选择器、基本组合电路/时序电路以及综合实验),以及相应的EDA工具训练,为处理器实验奠定部件设计与工具应用基础
汇编语言程序设计 (1)强化了汇编语言作为处理器软硬件接口、作为计算机系统结构规格的内容讲解
(2)增加了MIPS32指令集部分,以及相应的中断/异常处理、虚存管理等内容(包括其在汇编层面的表示)
(3)增加了典型C代码在汇编层面的表示以及反汇编等内容
计算机组成原理 (1)MIPS32指令系统设计及分析
(2)简单计算机系统设计和实现,该计算机系统的CPU至少能够支持MIPS指令集的一个子集,具体实现可以是多周期或者是指令流水方式,CPU必须能够支持中断,包括软中断和硬中断,完成中断请求、中断响应和中断服务及返回的全过程
(3)虚拟存储管理中TLB的作用及组成
操作系统 (1)以X86和MIPS32指令集/处理器作为操作系统的目标平台
(2)强调操作系统原理与实验的结合,要求在实验中完成一个简化但必须是在真实硬件上能工作的小操作系统,并实现操作系统的核心算法,从而加深对原理的理解
(3)强调各个实验的核心算法形成一个有机整体,后面的实验会用到前面实验的代码,并最终形成一个完整的小操作系统
编译原理 (1)以MIPS32指令集/处理器作为编译器的目标平台
(2)强调编译技术与计算机系统整机的关联,从编译程序能发挥的作用及它在整个计算机系统中的位置等角度,将计算机系统整机概念贯穿起来,充分理解编译程序/系统与其他系统类程序或工具之间的联系
(3)强调编译技术与计算机系统使用的关联,充分理解通过编译优化可以使计算机系统发挥更有效的作用(与操作系统的角度不同),也要理解编译技术在这方面的局限性
在理顺教学内容的基础上,各课程以完成基本计算机系统设计和实现为教学目标,改进教学方法。在加强原理性知识讲解的同时,强化工程化实现方法的训练,力求学生在系统原理和工程实现方法两方面均有收获。
2.统一规划课程实验体系
计算机系统能力培养中,实践占有很大的比重,是学生运用所学的原理知识,解决实际计算机系统设计问题的过程,更是检验教学效果的重要手段。然而,计算机系统是一个复杂的巨系统,要让学生在有限的时间下完成教学和实践内容,需要我们精心设计教学实验体系,围绕教学改革目标设置各课程的阶段子目标和相应的实验内容,完成模块设计和实现后,再通过综合实验来最终集成,形成一个完整的计算机系统设计和实现。
根据这一思路,我们在各相关课程中调整原有的实验体系和实验内容。将课程实验作为最终综合实验的模块或基础,既能巩固课程中学习的原理性知识,又能作为整体综合实验的模块使用,实现实验体系的递进化。
我们以操作系统的实验体系为例介绍其设计思想。在清华大学计算机科学与技术系操作系统课程中,安排了8个教学实验,通过精心安排和组织,8个实验由基础到全面,最终构成了一个基本完整的教学操作系统。
(1)实验0(操作系统实验环境和工具)的目的在于了解和熟悉操作系统实验的编译方法和流程、基于硬件模拟器的操作系统内核调试方法以及OS启动前方的基本功能,并复习了C语言和汇编语言,为基于ucore的后续实验打下实验方法上的基础。
(2)实验1(系统软件启动过程)的目的是实现bootloader加载和运行操作系统软件的工作过程,从而理解启动bootloader的过程、bootloader的文件组成、ucore OS的启动过程、中断处理机制、通过串口/并口/CGA输出字符的方法。让同学能够运用多种工具来开始操作系统功能。
(3)实验2(物理内存管理)与实验3(虚拟内存管理)的目的是了解系统如何管理内存,深入理解软硬件的分页模式,页表的建立和使用方法,缺页中断的处理等基本处理方法与管理方法。需要实现缺页异常处理和页替换算法,支持虚拟存储管理,为应用提供大于物理内存的虚拟地址空间。二者在实验内容上形成循序渐进的关系。
(4)实验4(内核线程管理)、实验5(用户进程管理)、实验6(调度器)、实验7(同步互斥)帮助学生了解操作系统中内核线程创建和执行的过程、了解上下文切换是如何具体实现的,并进一步了解操作系统中用户进程的实现以及操作系统的调度管理机制,实现基于管程的条件变量机制。四者在实验内容上形成循序渐进的关系。
(5)实验8(文件系统)要求学生了解基本的文件系统调用的实现方法,掌握基于索引节点的文件系统和虚拟文件系统的具体实现,能够完成读文件操作和基于文件系统的执行程序机制,扩展基本文件系统,以支持目录、软链接等,扩展缓存机制,提高缓存的效率和性能。
3.建设统一的教学实验支撑平台
为配合统一规划后的教学内容和相关教学实验教学,并为综合实验打好基础,统一各课程教学实验支撑平台十分重要。教学实验支撑平台应能完成各课程规划和调整后的教学实验,至少应包括硬件系统平台及开发调试工具、指令级模拟器、汇编器、编译器、教学操作系统模拟器及调试工具等,还应包括上位机和实验开发板的通信程序等。所有平台应支持一个简单、规范、基本完整的统一的指令系统。为此,我们开发完成了支持50条左右MIPS32指令的硬件计算机系统THINPAD,作为硬件开发平台。同时,为它配套开发了指令系统模拟器、汇编器、编译器、数据通信程序、终端程序等一系列软件系统和调试工具,并且完成了教学操作系统Ucore的移植,使其能在该硬件平台上运行。另外,开发了编译系统,使编译生成的代码能在操作系统调用下运行,基本完成了教学实验支撑平台的建设,并在实际教学中得到了检验。
(1)硬件系统平台组成。计算机系统设计需要给学生提供基本的硬件平台。考虑到硬件设计的主流技术和教学基本要求,系统设计主要采用可编程硬件实现技术。因此,整个硬件平台以大规模可编程逻辑器件为中心,通过总线连接SRAM存储器和Flash存储器,再配合以外围各种接口。下图是硬件平台的基本组成。
计算机系统综合设计硬件平台组成图
(2)MIPS指令系统模拟器。指令系统模拟器可帮助学生完成简单的机器语言程序的软件模拟和调试,避免直接在不可靠的硬件平台上调试带来的困难。指令系统模拟器可采用通用的MIPS指令系统模拟器,也可以有针对性地开发。
(3)MIPS指令系统汇编器。汇编器可完成汇编语言到机器语言的转换,并帮助学生理解程序。给学生提供一个方便的、有针对性的汇编器,对完成实验是有帮助的。
(4)仿真终端程序。完整的计算机系统需要配置一定的外部设备。最常用、最简单的外部设备就是计算机终端。因此,配置一个具备一定功能的仿真终端程序,可以帮助学生提高调试效率,降低硬件实现的难度。
(5)数据通信程序。硬件调试所需要的程序和数据应装入到硬件平台的非电易失性存储器中,需要为实验提供一个通信程序完成这一功能。
(6)监控程序。在完成能运行操作系统的计算机硬件系统实现之前,可以采取运行一个相对简单但具备一定功能的监控程序作为检验初步硬件系统实现的手段,也可以作为计算机组成课程的阶段性成果。
(7)GCC编译器。由于建议的操作系统由C语言编写,故需要有一个能将操作系统编译到指定的指令系统的编译器。由学生自行设计和实现能编译操作系统的编译器规模太大,难度也很高,故建议使用GCC编译器并对其进行一些调整后完成此项任务。
(8)汇编与链接工具。要求学生实现的编译器能完成对应用程序的编译,实现从高级语言(C0、Decaf……)到汇编代码的转换,最终完成机器语言的生成,也可采用GNU的汇编器GAS和链接器LD,减轻实验的工作量。
4.建设计算机系统综合实验开放式课程
作为课程体系改革的核心,我们建设了计算机系统综合实验开放式课程。该课程在学生完成相关课程学习后,综合利用数字逻辑电路、汇编语言程序设计、计算机组成原理、操作系统和编译原理中所学习的知识,独立设计和完成一个完整、简单的计算机系统设计和实现,以检验学习的成果,培养学生综合运用课程知识解决问题的能力。
三、改革成效与总结
课程体系各项改革措施已在清华大学计算机科学与技术系本科教学中逐步实施。教学实验平台已基本开发完成,并已在课程实验中使用;各课程的教学内容、实验体系基本调整到位;计算机系统综合实验课程虽尚未全面开设,但已以兴趣小组的方式在小范围进行了三轮实验,已经具备全面开设课程的基础,即将在本学年夏季学期面向全系学生开设。
同学们普遍反映,改革后各门课程之间教学内容衔接良好,教学实验体系完整,对理解教学内容有很好的帮助。各课程统一了教学实验支撑平台,也使同学实验更为方便,减少了对熟悉实验平台的负担。参加过计算机系统综合实验的同学则觉得收获更大,更加深刻领会了计算机系统运行的原理和内部实现的机制,真正设计实现了人生的第一台计算机,给了他们一个充分展示自己能力的舞台。
系统能力培养是提高计算机专业本科教学水平的重要抓手,其中,重要的是教师能转变观念,提高认识,并设计出适合本校学生的课程体系和实验内容。教育部高等学校计算机类专业教学指导委员会高度重视系统能力培养,成立了两个专门小组进行研究和推广,希望我们的实践能起到抛砖引玉的作用。
参考文献:
[1] 马殿富,高小鹏. 基于系统能力培养的计算机专业课程建设报告[R]. 北京航空航天大学,2013.
[2] 张铭, ACM/IEEE Computing Curriculum学科规范[R]. 北京大学,2013.
[3] 陈渝,向勇. 操作系统实验指导[M]. 北京:清华大学出版社,2013.
[4] 刘卫东,李山山,宋佳兴. 计算机硬件系统实验教程[M]. 北京:清华大学出版社,2013.
[责任编辑:余大品]