计算机组成原理和系统结构课程知识点陈旧老化现象解析
2016-01-09冉全陈艳
◆冉全 陈艳
作者:冉全,武汉工程大学计算机科学与工程学院副教授,主要从事嵌入式系统软硬件研究与开发;陈艳,武汉工程大学计算机科学与工程学院(430073)。
1 引言
计算机组成原理和计算机系统结构(也称体系结构)是大多数计算机类专业的基础硬件类课程,对于很多学生来说,也是两门比较惧怕的课程。除了课程内容包含较多学生看来枯燥乏味的概念、电路、算法和原理之外,有些知识点相对陈旧,一些描述模糊不清,引起学习者概念混乱甚至不明所以,更加打击了学习兴趣和热情。这导致一部分学生畏惧甚至厌烦这两门课,连带惧怕需要动手和实践的其他硬件课程,“欺软怕硬”成为较为普遍的现象。这对于计算机相关专业学生系统性地掌握计算机知识,毕业后成为适应社会多方面需要的有用人才无疑是不利的。
2 关于组成原理和系统结构的课程安排
这两门课程,计算机系统结构讲述的是概念性的体系和功能,站在软硬件分界面的角度讨论计算机硬件的结构性框架如何搭建;计算机组成则从经典的冯·诺依曼五大部件入手,分析计算机硬件组成的具体内容,包括示例性的逻辑电路和二进制算法,来讲述计算机的基本工作原理。两者站在不同的视角看待硬件问题,难免会有重叠。因此,有些学校两门课分开上,有些学校合并成一门课;国内的一些出版单位也顺势推出一些合并课本,或者干脆直接取名叫做“计算机组成原理与体系结构”,两门课程各选取了一些核心内容组在一起,搞成一个混合版本。
笔者认为这种课程合并适合一些高职高专类的院校,对于计算机类本科专业而言还是存在问题的,如学时安排方面的问题。组成原理是考研课程,要讲述透彻则学时数必须得到保证,加上实验,总学时需要60 以上。体系结构重点放到流水线、多级存储层次、多处理机并行计算等现代计算机广泛采用的新技术,要想讲解清楚一般也要40 学时左右。两者合并,如果学时数不能得到保证,其结果是两部分内容都讲不好;而如果一味扩大学时数,如扩充到80 学时以上,又会给学生造成相当大的心理负担。本来硬件课程就是拦路虎,这样一个超大学时的硬件专业课不会有良好的教学效果。
多年前也曾经合并做过,效果并不好,后来又改回到两门课程分别开设,依据传统,先讲组成原理,紧接着一个学期开设系统结构。但现在面临一个问题:内容的取舍。很多经典的组成原理课本不知从什么时候开始夹杂很多流水线和高速缓冲存储器的内容,部分课本甚至还有多处理机方面的。这些书的作者可能想适应那些合并开课学校的用书想法,所以开始大幅增加原本属于系统结构课程中的内容。
另一个方面,考研的组成原理大纲确实包括了流水线、多级存储层次和多机系统,也就是说考研课程名虽是组成原理,实际却包括了两门课的知识点。从这个角度看,这些组成原理教材增加的篇幅包含这些内容也是合理的。问题是,上组成原理课程时怎么应对这些原本下学期才要讲述的系统结构课程中的内容?
武汉工程大学是多校联合的考试联盟出题,为了和考研内容一致,所以题目中有很多系统结构的内容。原本按照课程顺序,这些知识点都是下一学期才应该讲述的,但是为了考试,又不得不囫囵吞枣提前讲解,导致学生考试结果不理想。为了避免这种混乱,能否先讲述体系结构课程,然后讲述组成原理呢?从内在联系来看,组成原理可以看作体系结构的逻辑实现,因此先讲“干”再讲“枝”应该也行得通,涉及器件组成、数据通路、指令、二进制、中断机制等组成原理中详细讲解的部分,可以讲最基本的原理,能辅助课程理解就行。这样改变传统排课次序的做法能不能收到更好的效果?准备进行尝试。
3 CPU 部分的讨论
CPU 的内容很多,两门课都有大量涉及,以下讨论不再和课程挂钩,只说明哪些内容值得商榷。
CPU 的发展和兼容 第一代电子管计算机,第二代晶体管计算机,这个没什么疑问;第三代、第四代都是对应集成电路,只是规模不同,量变引起质变,划到下一代也能接受;而关于第五代计算机就值得推敲了,到底第五代计算机是什么?一些教材把它划归到超大规模集成电路中去,笔者认为不妥,其实学术界从20 世纪90年代就在呼唤第五代计算机,但是并没有明确是什么,而是等待采用全新技术或者全新材料的计算机问世,普遍认为光子、量子、超导、生物这几个方面有可能诞生出第五代计算机出来,遗憾的是现在仍然都处于研究阶段,所以关于计算机的划代应该到四代为止。要让学生明白,科学的发展有高潮和低谷,过10 ~20年强行划分新一代来说明计算机的进步没有意义,因为集成电路不能一次次由量变引发质变!
关于发展过程中的兼容,也很难明确,就拿向前和向后兼容来说,站在机器的角度来说,后面的机器能运行前面机器的软件,应该叫向前兼容,但是站在软件的角度来说,前面开发的软件要能在后面出现的机器中运行,则又成了向后兼容。两者实质上是一回事,却可以有两种说法,如果出题讨论兼容性,学生该怎么给出答案?
运算方法 各种码制、定点数、浮点数可以详述,这些是基本的,对于以后实际使用和各种编程都有好处;加减法和溢出概念作为了解计算机内部的运算原理,也可以让学生掌握;但是乘法和除法,特别是两位乘以及除法的余数校正这些东西,学生要费很大力才能弄明白,一个月后就一定会忘记得干干净净。这些属于技巧类的算法还是不要占那么多篇幅介绍为好。一些课本不再讲述各种进位制的转换,笔者认为不恰当,作为初接触二进制的学生而言,搞清各种进位制及其转换是很有必要的,至少比两位乘法或者加减交替做除法重要得多。
寻址方式 很多学生一直到毕业也没弄清寻址方式,这部分内容应该把那么多纷繁的名词简化。举例来说,基址、变址、索引、缩放、偏移、自增、自减,再加上直接、间接、相对寻址等,这些本来都是针对存储器的寻址方式,弄出这么多名词来学生不头疼才怪。其实寻址完全可以简单明了做介绍,而不拘泥于这些奇怪的名词上:数据可以在三个地方出现,分别是指令中、寄存器中、存储器中;前两种叫做立即数和寄存器寻址,第三种则区分为直接地址和间接地址,只有间接地址可以变化多端,其中基地址加上偏移量组合是最基本的形式。
关于微程序控制器 当今CPU 还有多少使用微程序控制器的?即使是CISC 也变脸为硬件解码后送入内部长长的类似RISC 的管线系统。作为训练和实践控制器部分的手段可以讲述,毕竟一个硬逻辑的控制器很难实现,但是关于水平的、垂直的微程序甚至毫微程序这些概念还是尽量简化吧。这里面有很多难题、怪题,各种字段的分解与组合作为考试的手段也应该点到即止,毕竟谁都不会去真正设计一款复杂的微程序控制器。
4 存储器部分的讨论
主存典型芯片 还在用2114、4116 作为芯片实例?对这些旧货市场都不一定买得到的东西进行详细分解,其古怪的时序、简陋的内部组成结构占据了大量篇幅,为什么不用现在市场上仍在普遍使用的简单8 位或者16 位存储芯片举例呢?如27 系列ROM、62 系列RAM。而高性能存储芯片的介绍也停留在20年前的SDRAM、早已淘汰的RDRAM/CDRAM,要知道现在已经是DDR4 的时代了。
辅存 还在大力介绍软盘,甚至是8 英寸软盘,而市场上3.5 寸的最后一代软盘都找不到了,8 寸的软盘估计博物馆里面也难得一见。磁记录的编码方式似乎也没有讲解的必要,归零制、不归零制的编码方式过时不说,实在和计算机的软硬件组成都没有太大的关系。关于硬盘方面的先进技术介绍,停留在几个G 的容量、几十KB 的缓存,以及IBM 硬盘、昆腾硬盘等这些不知消失多久的产品上,感觉又回到了20 世纪90年代。
Cache 和虚存 作为两个同等重要的存储层次,讨论却都主要集中在前者,后者的重要性没有得到体现。改进Cache 失效率的措施花了大量篇幅,其中有些措施根本没有任何实用价值。而编译器优化和软件控制的预取等内容本就不属于体系结构所要关心的,其算法和编程原理同样占用很多宝贵的篇幅。关于Cache 技术所举的实例采用的都是20年前的芯片技术,虽然相对简单易懂,却也处于和8086 在微机原理课程中作为示例CPU 一样的尴尬地位。
5 I/O 和总线部分的讨论
总线结构和标准 单总线、双总线、三总线甚至四总线结构的讨论,繁琐、过时且相互矛盾。就拿三总线来说,数据、地址、控制总线是三总线,局部、系统、扩展总线也是三总线,还有主存、I/O、DMA 总线又是一种三总线。介绍过时的ISA、EISA、VESA 乃至AGP 总线有价值吗?最关键的一点,很多教材花大篇幅介绍这些淘汰技术的同时,不去直面它们的落后和淘汰的现状。不是说淘汰的技术不能介绍,作为人类曾经的技术结晶和科技历史,有必要让学生了解,但是应该把握两点:一是篇幅要小;二是明确告诉学生,这些东西都已经成为历史。
总线判优与控制 集中式判优中的链式查询和计数器定时查询究竟在什么时候什么场合出现过总应该提及一下。说独立请求方式响应最快也没有说服力,和链式查询相比较都是全硬件信号,快慢就看谁的逻辑复杂,独立请求方式一定最快的根据并不充分。
同步控制和异步控制以及串行和并行方式是总线控制的两个主要内容,应该针对具体的总线实例加以分析。一些习题或者课本说同步比异步方式快,或者并行方式比串行方式快,笔者认为这些都是欠妥的,当今高速异步串行总线的带宽有目共睹。总线的快慢,和是否串并行、是否同步异步没有直接的对应关系。
I/O 接口与设备 很多查询、中断、DMA 等接口电路的组成都给出实现的电路图,这些图在实际应用中不会采用,对学生而言复杂晦涩,他们还错觉地认为这些电路才是标准的I/O 接口。其实实现接口的方式和原理有多种,详细介绍接口具备的功能应该比介绍这些电路图有意义得多。
CRT 显示器和CRT 控制器,随机扫描和光栅扫描,伪彩色、CGA、EGA 等,讲述的课本不在少数。笔者20年前的课堂上就讲过这些,现在再讲实在味同嚼蜡。关于多媒体电脑、多媒体专用芯片甚至多媒体操作系统这些概念,同样显得和时代格格不入,20年前这些说法可能代表新技术,而在全民手机都能处理多媒体的今天,这些说法本身似乎都失去了意义。
中断向量 本来向量的含义就是借用物理中定向指向的概念,去说明中断后自动转到相应的位置去实现中断服务,一些教材却在中断向量、向量中断、中断入口、向量地址等环节上反复纠缠,用一些模棱两可的用词去“加深”学生的理解,实际的效果却和“干扰”无异。类似的还有所谓存储单元、存储元、存储字、存储字长、机器字长、读写周期、存储周期、总线周期、机器周期等,非要让学生区分得清清楚楚,恐怕很难,况且这些概念本身就有相交之处。就拿中断向量来说,究竟是硬件切换出来的向量地址,还是向量地址中存放的服务程序入口,谁能说得清?还有总线周期和存储周期,当总线上传递存储单元信息时就是一回事。这些细微差别的概念即使要作为考题也要慎重,笔者多次碰到引起歧义的答案。
中断屏蔽和优先级 本来是两个很清楚的概念,各自的用途也非常明确,一旦把所谓的低优先级去中断高优先级的特例弄进去(暂不说这种做法有什么实际意义),一切都变得复杂起来。画中断响应轨迹图是很多题目最喜欢的,实际应用中若是出现像轨迹图那样乱七八糟的中断嵌套,系统很容易彻底崩溃。这些低优先级中断去嵌套高优先级中断的非常规做法还是不要复杂化。
6 实验环节与课程设计
实验课一般以某种实验箱为实验设备,把经典的运算器、存储器、数据通路(总线)、控制器等几个大的组成部分作为实验内容,去加深课堂相关内容的理解。课程设计则是依托实验箱的硬件构造,去设计一个具备更加复杂功能的部件或者组成一台能运行简单指令集的模拟整机。这种做法对于大多数普通院校的学生而言没有什么问题,少数重点大学使用FPGA 设计CPU 软核并在模拟机中移植某种操作系统作为课程设计则属于高端要求,这里不加分析。
要讨论的是这种传统实验箱做经典组成实验中遇到的问题,通过对几个厂家的组成原理实验箱的对比,发现它们都有如下特点。
1)采用开放式的面板,把所有部件以及连接线的插孔都安排在这个面积很大的面板上,所有元件和芯片裸露。
2)运算器使用74181 或者在可编程逻辑器件中使用该芯片逻辑,以配合教材内容。
3)存储器使用普通SRAM 或者双端口SRAM。
4)控制器以微程序控制方式为主,使用非易失性存储器构成控存单元。少部分也提供硬逻辑控制器,用可编程逻辑器件构成。
5)大量使用开关和LED 作为输入输出部件,信号连接使用针孔配合的导线。
6)说明书和实验指导书普遍不严谨,文字和图表错误很多,印制粗糙,且基本上都不提供电子版。
以上特点的组成原理实验箱往往还兼顾微机原理或者体系结构,甚至还有数字逻辑的课程实验。总体来说,它们会导致以下一些问题。
1)很大面积的电路板且裸露,即使上面有分割各个模块的线条,仍然觉得庞杂凌乱,想找一个信号会非常不便,令学生望而生畏。因为要照顾到多门课程,所以一些电路单元在某门课程中就会用不上,还要增加切换电路的模式开关。这些都使操作复杂化,容易造成仪器损坏。一般来说,三年左右损坏率可以达到50%以上。
2)连线普遍采用插头和插孔的配合形式,差别在于有的型号粗、有的型号细,有的深、有的浅。这种连接方式太紧了插拔不方便容易断线,太松了接触不良;而且随着实验的复杂,面板上的线像一团乱麻,什么都看不清楚,即使采用了长短不一和不同颜色的导线加以区分,仍然不能解决问题,非常不便于调试和观察。
3)输入和输出方式操作复杂,更不直观。用二进制表示的拨动开关和LED 管,输入的每个数据都要拨8 次开关才能完成,输出的数据因为是LED 表示的二进制信息,不易于识别。这两种形式的I/O 还存在占用面积大,故障率高的缺点。
7 总结
计算机是发展很快的一门实践和工程类学科,不管是软件还是硬件皆是如此。软件类的书籍更新很快,当下的的开发工具和语言可能几年后就没有了用武之地,除了某些描述算法和原理的理论书籍,如数据结构、编译原理之类,更新周期可能较长。
相比软件类课程而言,硬件课程一个版本可能坚持更长时间,有些教材甚至有十年以上的生命周期,如传统的电路原理、数字逻辑类的课程。那么,计算机组成原理和系统结构作为硬件基础课程,是不是也能多少年不用更新呢?即使一些内容已经时过境迁,仍然堂而皇之地出现在教材里面,导致一部分了解这些内容的学生产生抵触情绪。不能追踪新技术的硬件课程对学生的学习积极性和学习效果都是有消极影响的。
本文希望能起到抛砖引玉的作用,引起教材作者和实验设备开发人员的重视,对相关内容及时更新或者删除,对设备中的不足加以改进,更好地促进计算机组成原理和计算机系统结构两门课程的发展。
[1]张晨曦,等.计算机系统结构[M].北京:高等教育出版社,2008.
[2]唐朔飞.计算机组成原理[M].北京:高等教育出版社,2008.
[3]唐朔飞.计算机组成原理:学习指导与习题解答[M].北京:高等教育出版社,2012.
[4]白中英.计算机组成原理[M].北京:中国科学出版社,2009.
[5]蒋宗礼.高等学校计算机科学与技术专业核心课程教学实施方案[M].北京:高等教育出版社,2009.