投稿问答最小化  关闭

万维书刊APP下载

计算机系统导论课程教学思路及课程资源建设

2024/1/2 15:02:31  阅读:138 发布者:

1 计算机系统导论课程内容在计算机系统中的位置

1 是计算机系统层次结构及其抽象层转换示意图,展示从最终用户希望计算机完成的应用(问题)到电子工程师使用器件完成基本电路设计的整个转换过程。

计算机硬件只能理解机器语言。要将一个自然语言描述的应用问题转换为机器语言程序,要经过应用问题描述、算法抽象、高级语言程序设计、将高级语言源程序转换为特定平台中机器语言目标程序等多个抽象层的转换。在计算机系统层次结构中,上层是下层的抽象封装,而下层则是上层的具体实现。

计算机系统导论(Introduction to Computer SystemsICS)课程涉及的内容主要位于图1中编程(语言)程序层到功能部件/RTL(寄存器传送级)层之间,包括介于软件和硬件交界面的指令集体系结构,从高级语言源程序转换为可执行文件的过程中涉及的编译、汇编、链接等相关知识点,以及可执行文件执行过程中涉及的底层微体系结构及其与操作系统之间的协同及关联知识体系。显然,ICS 课程内容是计算机学科和计算机系统中最重要的专业基础核心内容。

2所示为“101 计划”建设的 12 门核心课程,其中 ICS 是计算机类专业重要基础课之一,与操作系统、计算机组成与系统结构等后续系统类课程密切相关,同时也是程序设计基础等前导课的答疑解惑课程,在整个计算机类专业人才培养体系中,该课程起着非常重要的承上启下、奠定坚实基础的作用。

2 计算机系统导论课程建设总体思路

ICS 作为计算机类专业系统能力培养的关键课程,通过将高级语言程序与数字逻辑电路之间所有相关知识点有机关联起来,为学生构造完整的计算机系统基本框架,使学生建立计算机系统整机概念,强化系统思维。通过本课程的学习,学生能从程序员角度认识计算机系统,建立高级语言程序、操作系统、编译器、汇编器、链接器、指令集系统结构、基本运算电路、存储器层次结构、I/O 子系统、操作系统等计算机系统核心层之间的关联关系,从而增强在程序调试、程序性能提升、程序移植、保证程序健壮性等程序设计与开发方面的能力,为后续的计算机组成与系统结构、操作系统、编译原理等课程的学习打基础。

本课程从程序员视角出发,基于特定计算机系统平台(如 IA-32/x86-64+LinuxRISC-V+LinuxLoongArch+LinuxARM+Linux 等),通过介绍在特定平台上相应的应用程序开发过程中涉及的各抽象层之间的关联关系,以可执行文件的生成与加载、进程的正常执行与异常处理、应用程序中 I/O 操作的底层实现机制为线索,重点构建高级语言程序到功能部件之间的系统级关联知识体系。

如图 3 所示,本课程的基础内容主要从程序的生成与程序的执行两个方面展开。

1)程序的生成过程主要包括预处理、编译、汇编和链接 4 个步骤,预处理阶段与计算机系统底层关系不大,本课程主要关注与编译、汇编和链接 3 个阶段相关的计算机系统层面的内容。其中,编译和汇编两个阶段涉及信息的表示与处理、程序的机器级表示,链接阶段涉及目标文件格式、多个程序模块合并时的符号解析与重定位,以及动态链接等相关概念。

2)程序的执行过程主要包括在系统中加载程序并在硬件上启动执行的过程,涉及在处理器中执行指令的过程,其中包含指令和数据的存储访问,以及程序执行过程中硬件与操作系统之间的协同。这种协同包括虚拟存储管理、进程上下文切换、异常/中断处理机制以及 I/O 操作中的软硬件协同几方面。本课程的高阶内容主要从程序的性能优化、程序间通信两个方面展开。程序的性能优化又分程序本身的优化、编译优化两类;程序间通信主要包括网络编程、并发编程两个方面的内容。

3 计算机系统导论课程与其他系统类课程之间的关联及衔接

3.1 ICS 与相关课程之间的关联关系

根据《高等学校计算机类专业人才培养战略研究报告暨核心课程体系》[1]中描述的 12 门核心课程各自的知识模块关系图可看出,ICS 与“计算机组成与系统结构”“操作系统”两门系统类课程存在极其密切的关联关系。

1ICS 与“计算机组成与系统结构”课程相互重叠的知识点包括数字逻辑电路基础、数据的表示与存放、补码加减运算器、指令集体系结构、汇编语言表示、指令执行过程及微架构(CPU)、异常/中断机制、层次结构存储系统、主存与 CPU 的连接、磁盘及固态硬盘、cache、虚拟存储器、总线及系统互连、 I/O 接口及 I/O 方式。这些重叠知识点大约占各自全部知识点的 70%~80%,若同时开设这两门课程,必须合理地给出两门课程内容的划分及衔接。

2ICS 与“操作系统”课程相互关联的知识点包括可执行文件加载与进程的创建、进程存储器映射、分页机制、存储保护、特权模式、异常/中断机制、文件系统、基本 I/O 函数、系统调用机制、I/O 方式、驱动程序、中断处理程序等。显然,这些关联知识点都要包含在各自课程的教学过程中,重要的是各自应从什么角度切入以及各自强化相关知识点中的哪些内容。

3.2 ICS 与相关课程之间的衔接思路

1ICS 课程——一个进程的“前世今生”。

4 给出 ICS 课程的细粒度知识图谱,具体教学实施过程可以按照讲述计算机系统中一个进程的“前世今生”来使学生深刻理解计算机系统。当然,要能讲清楚程序执行过程中的每个细节,必须通过后续的计算机组成与系统结构、操作系统等多门系统类课程的教学一起联合完成。

4 中“程序的生成”过程涵盖的内容就是一个进程的“前世”,而图中“程序的执行”过程涵盖的内容就是一个进程的“今生”。在这个“故事”的讲述过程中,本课程的作用是给“故事”起一个头,并给出“故事”的框架结构,把所有关键点串联起来,让学生对“故事”反映的计算机系统全貌有一个全局的认识与了解,并理解“故事”中的关键之处与后续系统类课程之间的关联关系,为后续课程进一步延续“故事情节”牵线搭桥。

目前在编写完成的101 计划”主教材《计算机系统:基于 x86+Linux 平台》和《计算机系统(基于RISC-V+Linux 平台)》中,都对 hello 进程的生成与执行过程给出了较为详细的描述,并分别制作了相应的知识图谱发布在公开的网站[2-3]上。后续系统类课程可以在此基础上细化具体实现细节。

2ICS 课程与“计算机组成与系统结构”课程的衔接。

对于后续的计算机组成与系统结构课程,可以沿着 hello 进程中不同指令的执行过程继续讲“故事”。

对于 hello 进程中具体的运算类指令、访存类指令、I/O 指令、流程控制类指令、异常/中断响应过程等执行电路的设计与实现,除了涉及具体的指令系统及其微架构(即中央处理器)的设计与实现,还进一步涉及运算类指令执行过程中所用的先行进位加法器、算术逻辑部件、各类乘法/除法运算电路、浮点运算器等底层运算功能部件的设计与实现,也涉及访存指令执行过程中所用的半导体存储器芯片及记忆单元,cacheMMU 等底层存储部件的实现原理,还涉及 I/O 指令执行过程中所用的外设接口电路、总线事务处理、总线标准等内容。

如果在电路实现细节上继续深入下去,还会进一步涉及指令执行过程中的异常/中断事件的检测与响应电路、数据检错/纠错电路等的实现,以及各类高级指令流水线的实现、cache MMU 的具体设计与实现、多核 CPU 和多处理器及其 cache 一致性原理等。

3ICS 课程与“操作系统”课程的衔接。

对于后续的操作系统课程,可以沿着 hello 进程执行过程中从用户态陷入内核态执行这个关键点继续讲“故事”。

hello 进程执行过程中,会遇到 readforkclone)、writeexecve 等系统调用,这些系统调用对应的系统级函数都用一段包含陷阱指令的指令序列进行封装,当执行到陷阱指令时,就会从用户态陷入内核态执行。CPU 执行某条访存指令时可能会发生缺页、访问违例等异常事件或者在某条指令执行结束时CPU 发现有外部中断请求信号等,此时 CPU 通过异常/中断响应过程陷入内核态执行。对于系统发生的这些不同类型的异常/中断事件,进入内核后操作系统的处理过程及其涉及的知识点和概念各不相同,因此,操作系统课程除要给出通用异常/中断处理机制和系统调用实现框架外,还须针对不同类型的异常/中断事件分门别类进行讲解。

例如,对于 readwrite 等系统级 I/O 函数的处理,将涉及文件系统和设备管理;对于 forkclone)、execve 等进程控制类系统级函数,将涉及进程的描述模型、进程生命周期及其控制等内容;对于缺页、访问违例等存储访问异常事件的处理,将涉及相应的存储管理方面的内容;对于外部中断事件的处理,将涉及设备驱动程序、中断服务程序等内容。在 shell 命令行提示符下系统等待用户输入“./hello”命令过程中,当前终端输入缓冲区(键盘缓冲区)还没有输入的字符时,shell 进程被阻塞并进行进程调度,此处可以作为操作系统中进程调度及其调度算法的切入点。

此外,如果 ICS 等前导课程的教学内容还包含图4中的高阶部分“程序间通信”以及多核 CPU、多处理器等并行处理内容,那么,操作系统课程就可顺理成章地接着讲进程同步、进程通信等“故事”。

这种通过“讲故事”的方式将所有与计算机系统相关的内容有机关联起来,将多门系统类课程教学形成一个完整的过程,可以强化学生对计算机系统的深入理解,使其深刻领会计算机系统中的软硬件协同机制,提升学生对计算机系统的综合设计与应用能力,并为后续的并行计算系统和智能计算系统相关课程的学习打下坚实的基础。

4 计算机系统导论课程及其相关课程的实施方案

进入智能化大数据时代后,计算机类专业人才培养课程体系中必定要加入更多的并行处理、智能计算等方面的课程内容,因此,必须对传统课程体系进行改革,通过摒弃过时的内容,合并重组课程内容并重新设置课程体系,以在不增加总学时的前提下在教学中增加反映学科发展的新内容。

4.1 新设 ICS 课程后面临的教学问题

传统课程体系中都有数字逻辑电路和计算机组成原理课程,这两门课程内容关联密切,且有较多知识点重叠。同样,计算机组成原理与体系结构两门课程也关联密切,有大量知识点重合。若再新设一门 ICS 课程,则其中又有很多内容与传统的计算机组成原理课程内容重叠。在规划新的课程体系时,必须思考如何重组优化这组课程的教学。

由于传统课程体系中没有 ICS 课程,因而各高校会因师资配置情况或课程体系不同,对于系统类课程有不同的教学安排与课程设置,有的学校未开设专门的 ICS 课程,而是在原来计算机组成原理课程中加入部分软硬件协同的内容;有的学校在数字逻辑电路课程后面新设 ICS 课程;有的学校把数字逻辑电路与计算机组成原理课程合并,并新设了 ICS 作为后续课程;有的学校新设了 ICS 课,并将计算机组成原理与系统结构合成一门后续课程实施教学。

在这些不同的教学安排与课程设置情况下,必须很好地解决这些课程内容的重组合并与前后衔接问题,这通常涉及数字逻辑电路、计算机组成原理、汇编程序设计、微机原理与接口、体系结构等传统的低级语言程序设计,以及偏硬件类课程与 ICS 课程的重组合并问题,而编译原理、操作系统等系统软件类课程则不用考虑与 ICS 课程的重组合并,只要注意与 ICS 等前导课程的衔接,找到最佳切入点,以延续关于可执行文件生成与进程执行的“故事”。

4.2 ICS 课程与汇编语言程序设计以及偏硬件类课程的合并重组

1)应取消汇编程序设计、微机原理与接口这两门课程。

因为 ICS 课程中会包含关于汇编指令、汇编语言程序、汇编器等内容,且将这些内容与高级语言程序及其转换过程关联进行介绍,教学效果应比单独介绍汇编程序设计更好。对于微机原理与接口课程,其内容涵盖在 ICS 、计算机组成等课程中,因此也无须再开设该课程。

2)应对 ICS 课程与数字逻辑电路、计算机组成原理、体系结构 3 门传统偏硬件类课程进行重组。

合理规划课程教学内容及其实践项目,使一个课程内的知识点密切关联、融会贯通,并避免在不同课程教学中存在相同知识点的简单重复以及前后课程内容相互割裂的情况。

科学合理的课程教学体系可用更少的课时达到更高的教学目标。针对 ICS 3 门偏硬件类课程内容的重组,可根据学校现有课程体系和师资情况,选择以下方案中的一种。

方案①:重组数字逻辑与计算机组成、ICS、体系结构 3 门课程,并按其顺序开课。数字逻辑与计算机组成课从二进制 0/1 与器件状态间的对应关系开始,自底向上从功能部件到中央处理器(CPU),再到机器代码、汇编代码,最后到高级语言程序,在最底层的器件与较高层的程序间建立弱关联关系;随后的 ICS 课再从程序员视角出发,自顶向下围绕进程的“前世今生”展开,在计算机系统核心层间建立强关联关系;最后由体系结构课实施针对并行处理系统相关内容的教学。目前南京大学计算机系采用的是这种方案,为此,编写出版了配套的《数字逻辑与计算机组成》《计算机系统基础》两本主教材[4-5]及其相关的习题解答和实践教辅教材[6-7],并在中国大学 MOOC 平台、头歌平台开设了配套的慕课和实践课程[8-13]

方案②:重组 ICS、数字逻辑与计算机组成、体系结构 3 门课程,并按其顺序开课。前两门课的开课顺序与方案①相反,先在 ICS 课中自顶向下从程序员视角通过了解进程的“前世今生”理解计算机系统,再在数字逻辑与计算机组成课中进一步细化底层微架构实现。该方案教学资源可与方案①完全一致。

方案③:将计算机组成原理和体系结构组合成一门课,按照数字逻辑电路、ICS、计算机组成与体系结构3门课的顺序开课。某些学校由于外院系开课等原因无法改变传统的数字逻辑电路课教学内容,那么,可将计算机组成原理课程中与数字逻辑电路、ICS 两门课重叠的内容去掉,而将不重叠的部分合并到体系结构课中。

目前编写完成的101 计划”教材《计算机系统:基于 x86+Linux 平台》以及正在编写的配套教辅教材可用于上述 3 种方案中 ICS 教学。

方案④:将数字逻辑电路、ICS 和计算机组成组合成一门贯穿两学期的计算机系统课,按照计算机系统(上)、计算机系统(下)、体系结构 3 门课的顺序开课。该方案是改革力度最大、预期效果最好的一种方案。目前编写完成的“101 计划”教材《计算机系统(基于 RISC-V+Linux 平台)》以及配套教辅教材可用于此方案中计算机系统(上)(下)两学期的教学。配套实践项目基于新兴开放指令集架构 RISC-V 与开源处理器芯片“香山”[14]进行,并与处理器芯片开放式人才培养计划“一生一芯”相互支撑,优化迭代,形成全系统配套的实验教程,同时引入“玄铁处理器+无剑 SoC 平台”系统层实验。

5 结 语

ICS 是计算机类专业的重要基础课之一,起着非常重要的承上启下、奠定坚实基础的作用,对学生建立计算机系统整体概念,培养其深刻理解、使用、设计和开发计算机系统的能力起着非常重要的作用。在传统课程体系中加入 ICS 课程后,须解决它与数字逻辑电路、计算机组成、体系结构等课程的重组合并问题,减少重复和陈旧的内容,增加必要的向后续课程过渡的内容,科学合理安排教学内容。此外,课程教学效果的好坏与教材编写、实践项目的设计、教辅教学资源的建设等息息相关,这些都须在后续的工作中不断迭代完善。

参考文献:

[1] 计算机领域本科教育教学改革试点工作计划工作组. 高等学校计算机类专业人才培养战略研究报告暨核心课程体系[M]. 北京: 高等教育出版社, 2023.

[2] 一生一芯. hello 程序运行过程综述(IA-32版本)[EB/OL].[2023-08-10]. https://ysyx.oscc.cc/slides/hello-x86.html.

[3] 一生一芯. hello 程序运行过程综述(RISC-V版本)[EB/OL].[2023-08-10]. https://ysyx.oscc.cc/slides/hello-riscv.html.

[4] 袁春风, 武港山, 吴海军, . 数字逻辑与计算机组成[M]. 北京: 机械工业出版社, 2020.

[5] 袁春风, 余子濠. 计算机系统基础[M]. 2 . 北京: 机械工业出版社, 2018.

[6] 袁春风, 吴海军, 武港山, . 数字逻辑与计算机组成习题解答与实验教程[M]. 北京: 机械工业出版社, 2022.

[7] 袁春风, 唐杰, 苏丰, . 计算机系统基础习题解答与教学指导[M]. 北京: 机械工业出版社, 2017.

[8] 中国大学 MOOC. 计算机系统基础(): 程序的表示、转换与链接[EB/OL]. [2023-08-10]. https://www.icourse163.org/course/NJU-1001625001.

[9] 中国大学 MOOC. 计算机系统基础(): 程序的执行和存储访问[EB/OL]. [2023-08-10]. https://www.icourse163.org/course/NJU-1001964032.

[10] 中国大学 MOOC. 计算机系统基础(): 异常、中断和输入/输出[EB/OL]. [2023-08-10]. https://www.icourse163.org/course/NJU-1002532004.

[11] 中国大学 MOOC. 计算机系统基础(): 编程与调试实践[EB/OL]. [2023-08-10]. http://www.icourse163.org/course/NJU-1449521162.

[12] 中国大学 MOOC. 计算机系统基础(): x86模拟器编程实践[EB/OL]. [2023-08-10]. https://www.icourse163.org/course/NJU-1464941173.

[13] 头歌实践教学平台. 数字逻辑与计算机组成课内实验[EB/OL]. [2023-08-10]. https://www.educoder.net/paths/t7lamrv6.

[14] GitHub. 开源高性能 RISC-V 处理器“香山”项目[EB/OL]. [2023-08-10]. https://github.com/OpenXiangShan/XiangShan.

第一作者简介:袁春风,南京大学女,教授,研究方向为大数据计算与并行处理、Web 信息检索与本文挖掘,cfyuan@nju.edu.cn

引文格式:袁春风, 余子濠, 朱光辉, .计算机系统导论课程教学思路及课程资源建设[J].计算机教育,2023(11):12-17.

转自:“计算机教育”微信公众号

如有侵权,请联系本站删除!


  • 万维QQ投稿交流群    招募志愿者

    版权所有 Copyright@2009-2015豫ICP证合字09037080号

     纯自助论文投稿平台    E-mail:eshukan@163.com