袁春风, 陶先平, 汪 亮, 顾 荣, 李 俊
(南京大学 计算机科学与技术系, 江苏 南京 210046)
龙芯中科总裁胡伟武在2017年第三届全国高校计算机系统能力培养高峰论坛中做了关于“国产基础软硬件人才需求与系统能力培养”的报告。他提到:从上世纪80年代初进入PC时代开始,我国计算机事业发展进入“完全市场化”阶段,国内的研究工作从CPU和OS两大计算机核心技术退出,我国的IT产业基本建立在Wintel(微软加英特尔)平台以及AA(ARM架构加安卓)平台上,直到2010年开始才进入“在市场化条件下实现自主性”阶段。
由于PC时代背景下放弃了CPU和OS的自主研发,我国计算机专业主要以培养各类应用软件开发人才为目标,体现在计算机专业课程体系中以CPU设计和操作系统开发为核心的计算机系统课程设置出现了内容弱化、实践不足、缺乏关联等问题。课程的设置按照计算机系统不同层次内容划分课程,课程间相互割裂、互不关联,缺乏一门贯穿系统各层次内容的基础课程。教学中缺乏系统性的综合实践环节,出现“重理论、轻实践、缺关联、少综合、无系统观” 等问题[1],导致学生只能学到一些较孤立的概念和知识点,无法形成对计算机系统完整的认识,更不能使学生很好地掌握CPU设计、操作系统开发以及大数据并行应用等核心技术。
计算机系统核心技术人才的短缺制约了我国计算机核心技术的发展,致使我国在处理器、操作系统等最核心的技术方面长期依赖美国。即使是设计开发出了自主知识产权的处理器芯片,也因为不能很快建立起在处理器芯片上的软件生态系统而制约处理器芯片的使用。因此,从我国计算机核心技术国家战略出发,亟须培养一批具有处理器设计、底层系统软件和大数据并行应用开发能力的高级人才。
为了推动国内高校在计算机系统能力培养方面的教学改革,教育部计算机类专业教学指导委员会专门成立了“计算机类专业系统能力培养研究”项目组,发表了相关的研究报告[2]。在计算机类专业教学指导委员会的推动下,国内许多高校开始重视计算机系统方面的教学,并开展了相关教学改革研究[3-7]。
我校计算机系统能力培养改革历经“调研国际做法→学习权威教材→研读国际规范→提出改革方案→校内实践验证→多轮迭代优化→面向全国推广”的过程。目前已经形成了“三纵四横、双重关联、经纬交织”的计算机系统课程体系,并构建了4条计算机系统相关课程实验链,分别在系统能力通识化、CPU设计、系统软件开发和大数据系统及应用开发4个层面强化实践训练和培养,并编写出版了多本面向计算机系统能力培养的教材。
本文重点介绍我校在计算机系统能力培养方面的实验改革总体思路,特别是相关课程实验链的构建及其改革成效和在改革过程中遇到的问题。
我校相关实验教改工作分3个阶段,分别针对单门课程、偏硬件课程群和计算机系统课程实验体系进行改革。首先,对计算机组成与系统结构、操作系统和编译原理3门核心课程的教学及其实验内容进行了改革[8-10],强化了CPU、操作系统和编译器的设计实验。同时,针对偏底层硬件的一组课程进行了整体规划,打通了数字逻辑电路、计算机组成与系统结构、微机原理与接口、嵌入式系统等课程实验内容,构建了基于HDL和FPGA的一体化实验平台[11]。在前2个阶段研究、实践和反馈的基础上,形成了2013新版教学计划。在该教学计划中,针对计算机系统课程的教学和实验体系进行了大力改革。图1是2013版教学计划中计算机系统相关课程及实验体系示意图。
图1 计算机系统相关课程及实验体系
如图1所示,该课程体系按照基础系统能力、核心技术能力、综合应用能力3个递进的能力层次,在低年级、中年级和高年级3个阶段,分别围绕概念系统学习、真实系统实现和系统综合应用3个层次进行能力培养,从而构建了“从两头到中间、从简单到复杂、从框架到细节、从单机到综合”的多层次螺旋式上升迭代的计算机系统能力培养课程体系。
该课程体系规划的学生系统能力培养路径为:(1)先从程序设计和逻辑电路入手,再通过计算机系统基础课程与中间层建立关联,以构建计算机系统基本框架;(2)通过中间核心层课程达到细化框架的实现;(3)再把计算机系统核心知识运用到不同计算平台,以提升学生解决实际系统中各种应用问题的能力。
因为程序设计基础和数字电路2门课程内容分别位于计算机系统上层和最底层,内容较独立、入门较易,所以从这2门课程开始。不过,学完这2门课后,学生并不能明白两者的关联。因而需要紧接着安排1门能够回答这个问题的课程,这就是计算机系统基础。该课程将程序和电路之间的各层串接起来,把程序中数据的表示、运算、语句、过程调用、I/O操作等内容,与指令集体系结构、运算电路、汇编语言、编译、链接、操作系统等计算机系统核心内容进行关联,使学生形成对概念性计算机系统的基础性认识。
为进一步使学生掌握计算机系统的设计与实现核心技术,规划了第二阶段课程的学习。通过操作系统、计算机组成与设计、计算机系统结构、编译原理等一组系统核心技术课程,把ISA及其实现、操作系统和编译等系统核心内容进行细化,并规划了1门计算机系统设计综合实验课程,让学生把在其他课程中设计的CPU、操作系统和编译器等综合在一起,形成一个完整的真实的计算机系统,使学生对系统的认识上升到具体实现的高度。
第三阶段规划了嵌入式系统、并行处理技术、大数据处理综合实验等各类不同系统应用开发相关课程,以培养学生利用不同计算系统解决实际问题的能力。
在该课程体系中,3个学习阶段各自规划新建了1门阶段性的“收官”综合课程,通过将原本相互割裂的一组传统课程内容进行纵向关联融合,形成了3个纵向关联融合的课程群。
第一阶段的收官课程是计算机系统基础。该课程规划了一个综合性的系统级大作业,要求学生在进行理论学习的同时,逐步实现一个功能完备,但经过简化的x86模拟器NEMU(NJU EMUlator)。PA包括一个准备实验(配置实验环境)以及4部分连贯的实验内容,简易调试器、指令系统、存储管理、中断与I/O。简易调试器功能包括单步执行、打印寄存器/内存单元内容、表达式求值等;指令系统模拟包括实现x86保护模式下大部分常用指令(不支持实模式和x87浮点指令)完整的“取指→译码→执行→更新PC”指令周期;存储器模拟包括:DRAM芯片的组织(包含row buffer和burst的物理特性)、两级联合的组相联cache、 IA-32分段和分页(包含TLB)的MMU机制;中断/异常模拟包括IA-32中断机制(包括中断描述符等)。实验中、后期会提供一个单核单任务的操作系统内核功能,让学生在自己设计实现的x86模拟器NEMU上运行打字游戏和“仙剑奇侠传”,实验内容涵盖了95%的教材和理论教学内容。因为x86模拟器用C语言实现,需要使用先行课PF中的各种知识点和编程能力,同时在模拟实现运算类指令的执行和DRAM组织等也融合了先行课DC中的内容,所以ICS课程的PA实验很好地起到了综合第一阶段教学内容的作用。
第二阶段的收官课程是计算机系统设计综合实验。该课程主要以实验为主,先行课程实验组成的Project N中已经实现了x86模拟器NEMU、基于MIPS架构的计算机NPC、编译器NCC和操作系统Nanos等,在该课程实验中需要将Project N中各组件整合成一个可以运行应用程序的完整计算机系统。但是,因为Nanos是基于x86硬编码的操作系统,而CPU是基于MIPS架构的,所以不可能直接将这些组件拼合成一个计算机系统,需要将硬件与运行在硬件之上的软件进行解耦,使得软件不依赖底层硬件的指令集体系结构。为此,在软件和硬件之间加入了一个抽象计算系(AM)层,通过AM对底层ISA进行屏蔽,为上层软件提供了一个与ISA无关的API接口。AM由图灵机(TRM)、IO扩展(IOE)、异步扩展(ASYE)、存储保护扩展(PTE)和多处理器扩展(MPE)5个模块构成。有了AM层以后,CSL实验的目标就是构建如图2所示的Project N生态系统,学生分组实现其中的某些模块。
图2 CLS课程实验实现的Project N生态系统
第三阶段的收官课程是大数据处理综合实验课程。该课程目标是将系统能力上升到实际综合应用系统,培养学生大数据系统开发和综合应用能力。Lab实验内容包括:Hadoop系统安装与WordCount词频统计、搜索引擎文档倒排索、Hadoop HBase和Hive编程、Wikipedia网页PageRank等,此外,还需要在暑假期间完成的一个Project,自选或由教师指定具有一定难度和工作量的题目,完成一个综合性大数据课程设计。例如社会网络分析、电影数据聚类、新浪微博推荐系统、网络通信中最短路径、数据库查询、基于内容的图像搜索等。扩充实验是基于Alluxio开源社区的开源项目开发实践。
针对传统课程体系中各课程及实验内容独立、重理论轻实验、实验内容与理论内容脱节等问题,对跨越不同学习阶段的课程内容在横向上进行了关联融合,构建了从易到难、环环相扣的与课程内容高度匹配的4条横向关联的课程实验链。
第一条课程实验链是[PF+DC]→ICS→OS。该实验链主要面向概念系统设计实践,旨在进行系统能力通识培养。其中,计算机系统基础(ICS)实验所需的大规模编程和调试能力由程序设计基础(PF)实验提供;ICS实验中寄存器、运算电路和DRAM组织等模拟实现时所需的基础由数字电路(DC)实验提供;操作系统(OS)实验所需的x86架构基础由ICS实验提供。
第二条课程实验链是DC→ICS→COD→CSL。该实验链主要面向CPU等硬件设计实践,旨在培养计算机系统结构和CPU设计等核心技术人才。其中,计算机组成与设计(COD)实验所需的EDA开发基础和功能部件实现能力由DC实验提供;COD实验所需的对计算机架构和系统整体的认识由ICS实验提供;计算机系统设计综合实验(CSL)中的硬件部分由COD实验提供,在CSL实验中,学生可以站在整个软硬件生态系统的高度进一步完善COD实验所实现的硬件系统,以保证能够运行其上的各类软件,并通过性能量化方法优化硬件设计。
第三条课程实验链是PF→ICS→[OS+CP]→CSL。该实验链主要面向系统软件设计实践,旨在培养计算机系统软件设计核心技术人才。其中, OS实验和编译原理(CP)实验所需的ISA及底层机器代码的实现等基础由ICS实验提供;CSL实验所需的操作系统和编译器基础分别由OS和CP实验提供。在CSL实验中,学生可以站在整个软硬件生态系统的高度进一步完善OS和CP实验结果,通过CSL实验构建和实现的整个软硬件生态系统,更深入地理解软件层次化、虚拟化、抽象和封装等重要概念,更好地掌握各种系统软件开发技术。
第四条课程实验链是[PF→Java]→[OS→Linux]→DPC→DM→BDL。该实验链主要面向综合系统应用实践,旨在培养学生大数据分布式并行系统的开发和综合应用能力。在高年级阶段提供的Java程序设计、Linux系统分析、分布并行计算、数据挖掘课程的基础上,通过大数据处理综合实验,将先前这些课程及实验中学到的知识和掌握的并行编程、系统配置和机器学习算法等,融合到大数据系统平台开发和综合应用实践项目中,以达到课程体系所期望的系统综合开发和应用的目的。
为了适应计算机及其相关技术的发展对计算机科学技术人才培养的需求,从2012年开始,我校实施了计算机系统相关课程的整合及其实践体系的构建,形成了2013版教学计划,经过4年的教学改革和初步实践,在学生对计算机系统认识、系统核心技术以及系统综合应用技术等培养方面取得了显著效果。
例如计算机系统基础课程教学,学生反映真的学到了非常多的东西,比如Linux系统/Vim/Git的基本使用方法、Makefile文件的编写、基本的汇编语言、计算机原理、基本的操作系统知识,以及如何使用RTFM和RTFSC等,程序设计的技能也得到了充足的锻炼。
特别是计算机系统方向的学生,能够在FPGA上设计实现带有I/O和异常处理的现代高性能处理器,CPU可以支持除浮点运算以外的全部机器指令,并能将全部自行开发的CPU处理器、原型操作系统和编译等系统软件以及应用程序,成功集成并正确测试运行,组成完整的具有丰富生态的计算机系统,实现了系统的完全自主可控。中科院计算所对我校学生给予了高度评价,认为我校学生“在体系结构的设计和实现方面能力突出,不仅能够熟练使用硬件描述语言和FPGA设计环境进行微体系结构的设计实现,还能熟练使用大型模拟器对体系结构进行分析验证和调优工作”“在系统软件方面,对操作系统内核和编译器的开发方面具有坚实的基础”。
新的课程实践体系在实施过程中也遇到了一些问题,主要是课程实验以实现完整工程为目标,内容跨度大、关联性特别强,有些概念也比较抽象,因而难度较大,占用了学生课后大量时间,造成对其他课程学习的冲击。据调查,2014级学生课余时间花在计算机系统基础课程的时间占总时间的2/3,其中用于PA实验的时间又占本课程的2/3。此外,由于CPU设计和系统软件开发涉及到许多底层的细节问题,课程实验内容挑战性较强,因而绝大多数学生更愿意从事应用软件的开发,导致系统方向的学生越来越少。
由于新版教学计划实施时间不长,教学安排上还存在一些问题。我们将在今后的教学过程中,不断改进和调整教学内容、教学方式和实验内容,使课程教学能更好地达到预期的教学效果。
致谢:本文提到的PA实验由中科院计算所余子濠博士在南京大学就读期间所设计并不断改进,在本课程教学过程中,他还承担了PA实验的指导和成绩评判等工作,特此感谢!
[1] 袁春风,陈睿.从硕士研究生入学统考看高校计算机本科专业基础课教学[J].中国考试,2013(1):50-55.
[2] 王志英,周兴社,袁春风,等.计算机专业学生系统能力培养和系统课程体系设置研究[J].计算机教育,2013(9):1-6.
[3] 袁春风,王帅.系统能力培养问题初探[J].中国计算机学会通讯,2013(9):48-55.
[4] 高小鹏.计算机专业系统能力培养的技术途径[J].中国大学教育,2014(8):53-57.
[5] 刘卫东,张悠慧,向勇,等.面向系统能力培养的计算机专业课程体系建设实践[J].中国大学教育,2014(8):48-52.
[6] 丁红胜.面向计算机系统能力培养的计算机组成原理实验教学[J].计算机教育,2016 (7):20-22.
[7] 赵鹏,刘慧婷,姚晟,等.基于系统能力培养的操作系统课程改革和建设[J].计算机教育, 2016(1):56-58.
[8] 罗先录,谭德立,张永棠,等.应用型本科计算机类专业系统能力培养课程体系[J].软件工程,2016(2):55-57.
[9] 袁春风,陈贵海,黄宜华,等.“计算机组成与系统结构”课程的教学现状和改革思路[J].计算机教育,2009(16):153-156.
[10] 蔡晓燕,袁春风,张泽生. MIPS架构多周期CPU设计[J].计算机教育,2014(17):93-96.
[11] 袁春风,黄宜华,武港山,等.“计算机组成与体系结构”课程群建设实践[J].计算机教育,2010(13):80-84.