《计算机系统基础》课程优秀教学案例:问题导向,理论与实践结合

53次阅读
没有评论

共计 4293 个字符,预计需要花费 11 分钟才能阅读完成。

授课教师: 范浩   信息科学与工程学部

推介督导专家: 唐瑞春教授   信息科学与工程学部

教学技术 / 方法: 问题导向,理论与实践结合。

教学案例简介

一、课程教学目标

计算机系统基础是计算机类专业的学科基础课,是计算机科学与技术、智能科学与技术、保密管理等专业的必修课。该课程是一门涉及到计算机系统各个抽象层面,并且能贯穿整个计算机系统设计与实现的基础课程。现在一般认为问题抽象、系统抽象和数据抽象是计算机类专业毕业生的核心能力。该课程担负了系统抽象的重任,是计算机系统核心的课程。本课程的教学目标主要包含两个方面:

1. 使学生能建立完整的计算机系统的知识体系和整体知识框架

本课程以程序员的视角覆盖了计算机系统,包括硬件架构、操作系统、编译器以及网络等方面。为对计算机系统的深入探究做好准备,研究像编译器、计算机体系结构、操作系统、嵌入式系统、网络互联和网络安全这样的高级问题。

2. 使学生养成良好的编程习惯并获得编写高性能、可移植和健壮的程序的能力

能够利用系统知识来编写出更好的程序,能够更好地利用操作系统和系统软件提供的功能,对各种操作条件和运行时参数能正确操作,运行起来更快,并能避免出现程序容易收到网络攻击的缺陷。

总之,通过本课程的学习,使学生能够深刻理解计算机系统的整体概念,更好地掌握软 / 硬件协同设计和程序设计技术,培养系统能力。

二、教学理念和思路

任课教师采取理论与实践相结合的教学思路,将计算机系统理论点融入计算机系统应用性能的提高中,从实践中感受所学知识的用处。总的教学思路是:根据教学内容、教学目标和学生的知识特征,运用多种教学策略设计教学方案,将覆盖面广的抽象的理论知识落实在易于理解与实践的软件系统开发示例中。本课程完善理论知识体系,提供丰富的学习资料和信息,深入浅出的讲解计算机系统概念,并展示这些概念是如何实实在在地影响应用程序的正确性、性能和实用性的,培养学生的学习能力、创新能力。本课程提供丰富有趣的实验,激发学生的探索精神,培养学生解决现实问题的能力。

三、具体做法

1. 激发学生学习兴趣(抛出疑惑点,启发学生思考)

兴趣和疑惑是深入学习的动力。课程第一堂课,任课教师围绕一个程序如何在计算机上执行的问题展开,并抽象的描述整个过程。这个问题是计算机系统体系的核心基础问题,一节课是远远讲不清楚的。学生可能满心疑惑,有一种道不清、说不明的模糊感。但是这个问题很好地交代了计算机体系的框架,又启发了学生的好奇心。带着这份好奇心,任课教师用一学期的课程讲解高级语言如何进行转换、链接以生成可执行代码的问题,构建起完整的计算机系统认知。同时,又启迪学生在后续的计算机系统的课程中,如计算机组成与设计、操作系统和编译技术中,去细化学习计算机系统各个抽象层面的知识。

课程的第二堂课,抛出多个 C 语言程序,而这些程序执行会产生超出想象的结果。通过这些未曾料想的问题,激发同学们学习计算机系统的兴趣。这也体现了本课程的特点,即本课程从程序员的角度来讲解系统,并采用这样的原则过滤要讲述的内容,从广泛的系统整体架构中选择那些影响用户级 C 语言程序性能、正确性或实用性的主题。

2. 理论与实践相结合,注重学以致用

任课教师在国内版计算机系统基础教材的基础上,借鉴了美国卡内基梅隆大学(CMU)的相关课程的教材和网络资源,重新组织了教学内容和教学日历。

(1)针对课程理论覆盖面广难以结合实际项目问题,围绕具体知识点结合软件系统开发优化存在的实际问题予以重点分析讲解,达到较好的效果,并将此授课方式贯穿整个学期的课程内容。

(2)本学期的课程在原有教学内容上,增加了基于计算机系统的程序优化等理论课程,突出系统学习的重要性和实用性。

比如,在原书第 3 章讲解了程序的机器级表示,嫁接了 CMU 课程中的优化程序性能的课程,将程序的机器级理解和基于此的程序性能优化有效的结合到一起。程序的优化不再空洞,系统级理论知识也有了落脚点。

再比如,在原书第 4 章程序的链接后,嫁接了 CMU 课程中的虚拟内存和进程控制的课程,将程序的链接与程序的执行中间所缺失的程序的加载进行了完整的解释,从而完整地解释了一个程序如何在计算机上执行的问题,达到建立完整的计算机系统的知识体系和整体知识框架的教学目的。让学生从程序员的角度,不仅了解 C 程序编写的每个细节与计算机系统体系的关系,也基于此能写出更快更安全的(系统级)程序。

(3)本课程非常注重实践,提供了新鲜有趣的且具有一定难度的实验,使学生在实践中理解系统原理,培养动手能力。

实验课的内容紧跟理论课的进度,确保理论知识得到及时反馈。同时,实验课设置了附加实验,以提供加分选项,让有余力的同学得到更多的实践机会。本课程聘用了 4 名学生助教来解决学生人数过多(97 人)的问题,即每个助教负责 25 个学生,确保实验教学效果。实验课鼓励学生相互交流,与助教沟通,并独立完成实验,培养学生解决问题的能力。同时,助教会现场检查每个同学的实验完成情况,确保实验的要求能落实到每个同学。实验与考试的目的不是为难学生,而是让学生体会到每个知识点的价值。

3. 注重教学互动与反馈(课堂小测)

(1)课堂小测强化教学要求。任课教师每节课会出一份纸质版的测试题,题目源自本节课的核心教学内容。课前发放测试题,学生们带着问题展开一节课的学习,让课程学习的重点更突出,以此提高了课程学习的注意力和效率。下课时提交测试题,老师进行评阅并批注,并在下次课发给学生,使得学习效果得到及时反馈,同时增加了师生间的交流。

针对部分课程内容较难、软件算法代码学生难以理解等影响课堂讲授效果的问题,任课教师采取课前下发下一次课的算法代码,便于学生课前预习,以达到很好的授课效果。

(2)严守学术诚信。本课程要求学生独立完成课堂小测、实验,保持学术诚信。对于老师,课程教学的目的不是完成教学任务,是为了分享对计算机系统的理解,让知识得到传承;对于学生,课程学习的目的不是为了考试,是为了构建计算机系统的完整的理论基础。

课程要求学生能全心全意地投入到课程的学习中,努力的学习基础知识,独立的完成课程实验,让认真学习的态度成为一种习惯,注入在学习过程的每个阶段,成为一种自然的事情。

(3)注重课程优良学风的建设。课堂小测是课程平时分的来源,同时也基于此鼓励在平时下功夫的同学。任课教师在课程 QQ 群中以优秀作业的形式发布课堂小测的正确答案。在课上公布课堂小测满分的同学,点名表扬。在学期末,再次鼓励平时分最高的 10 名同学,感谢他们这学期对这门课的认真付出。

四、示例——第六章《存取器层次结构》第四节《高速缓存存储器》

1. 案例简介

本节重点讲授高速缓存存储器和高速缓存对程序性能的影响。存储器系统是计算机系统中最直接可见的部分之一,实际上系统是一个由不同容量、造价和访问时间的存储设备组成的层次结构。高速缓存存储器是为了缓解 CPU 和内存之间的访问速度的代沟而产生。学生了解存储设备是如何放置在层次结构中的,学习访问局部性是如何使这种层次结构成为可能的。传统课程只介绍高速缓存存储器的设计与访问方式,本课程通过一个独特的观点使这些理论具体化,那就是将存储器系统视为一个存储器山,山脊是时间局部性,而斜坡是空间局部性。最后,通过具体的示例阐述如何改善程序的时间局部性和空间局部性来提高应用程序的性能。

2. 案例描述

课程开始前,下发上节课已批改好的测试题,并下发本节课的测试题,主要考察如何改善程序的时间局部性和空间局部性来提高应用程序的性能的问题,也是本节课的重点讲解内容。

本节课开始时,首先回顾了上节课的相关内容,包括存储器的层次结构、局部性特性。由存储器的层次结构引导学生思考,如何解决 CPU 的寄存器与内存之间有越来越大的传输速度代沟的问题。由此引出本节课的讲解主题——高速缓存存储器。同时,回顾了程序的局部性特性,即程序的核心代码体量小的特点,使得速度快容量小的高速缓存存储器成为解决问题的合理选择。

然后,讲解高速缓存存储器,一个小而快速的存储设备,作为存储在更大更慢的设备中的数据对象的缓冲区域。介绍缓存的一般概念,与局部性的关系,引出访问命中与访问不命中的概念,指出访问命中可以提高数据访问速度,是程序性能提升的关键。紧接着讲解通用的高速缓存存储器 Cache 组织结构,解释 Cache 与内存之间的映射关系。然后,例举了一个小的示例,让学生课堂作答,体会高速缓存存储器的工作原理。

由缓存不命中对程序性能的巨大的负面影响,引出编写高速缓存友好代码的重要性!从而体现课程讲解的核心思路,系统知识的学习可以辅助程序员写出更好的程序。此处,讲解了编写高速缓存友好的代码的一般原则,即(1)聚焦在核心函数的内循环上,(2)尽量减小每个循环内部的缓存不命中数量(时间局部性和空间局部性)。并介绍存储器山的概念,用三维图表可视化描绘基于时间局部性和空间局部性的程序性能优化效果。

最后,用一个具体的大矩阵乘法的例子来具化高速缓存存储器的部件利用效果,体现如何写出利用系统特性的代码,写出具有良好空间局部性和空间局部性的代码。首先,让学生们思考矩阵乘法有哪些程序设计方式;然后,让学生们思考每种方式下,程序访问高速缓存存储器 Cache 的方式,计算器命中率,比较哪种方式最佳;最后,展示不同方式下的程序性能。学生们都惊讶于不同方式下程序的巨大性能差距,反映了系统知识对程序优化的巨大作用。

课堂讲授结束以后,回收了课堂测试题,并在课程 QQ 群中发布了下节课关于程序优化的测试题,以便同学们有针对性的预习。课后,批改课堂小测,对课程效果进行了总结。

3. 案例评价

本课程是计算机类专业的专业课,是计算机系统体系的入门课程,担负了培养学生系统能力的重任,为后续深入研究像编译器、计算机体系结构、操作系统、嵌入式系统、网络互联和网络安全这样的高级问题做好准备。本课程在讲授过程中,将理论点融入系统应用性能的提高中,具化了计算机系统理论知识,激发了学生的学习兴趣。

本课程有两个突出点:一是针对课程理论覆盖面广导致难以结合实际项目问题,围绕具体知识点,结合软件系统开发优化存在的实际问题予以重点分析讲解,达到较好的效果,并将此授课方式贯穿整个内容;二是针对软件算法代码学生难以理解等问题,采取课前下发下一次课的算法代码,便于学生课前预习,达到很好的授课效果。

计算机类专业培养的两个主要能力为:系统能力和软件能力。在本课程中,巧妙地找到结合点,让学生从程序员的角度,了解到计算机系统的整体架构,并由此写出符合系统设计的更快更安全的程序。从学生课后反思来看,学生反响强烈,深刻体会到计算机系统知识的价值。

正文完
 
评论(没有评论)