《普通高等教育“十一五”国家级规划教材·21世纪大学本科计算机专业系列教材:计算机组成与系统结构》主要介绍计算机组成与系统结构涉及的相关概念、理论和技术内容,主要包括指令集体系结构、数据的表示和存储,以及实现指令集体系结构的计算机各部件的内部工作原理、组成结构及其相互连接关系。《普通高等教育“十一五”国家级规划教材·21世纪大学本科计算机专业系列教材:计算机组成与系统结构》共分9章: 第1章对计算机系统及其性能评价进行概述性介绍;第2~3章主要介绍数据的机器级表示、运算,以及运算部件的结构与设计;第4章主要介绍包含主存、cache和虚拟存储器在内的存储器分层体系结构;第5~7章介绍指令系统以及各种CPU设计技术;第8~9章介绍总线互连以及输入输出系统。
《普通高等教育“十一五”国家级规划教材·21世纪大学本科计算机专业系列教材:计算机组成与系统结构》内容详尽、反映现实、概念清楚、通俗易懂、实例丰富,并提供大量典型习题以供读者练习。《普通高等教育“十一五”国家级规划教材·21世纪大学本科计算机专业系列教材:计算机组成与系统结构》可以作为计算机专业本科或大专院校学生计算机组成原理与系统结构课程的教材,也可以作为有关专业研究生或计算机技术人员的参考书。
计算机组成(computer organization)是指计算机主要功能部件的组成结构、逻辑设计及功能部件间的相互连接关系。计算机系统结构(computer architecture)的经典定义是指程序设计者(主要指低级语言程序员或编译程序设计者)所看到的计算机系统的属性,即计算机的功能特性和概念性结构,也称指令集体系结构(Instruction Set Architecture, ISA) ,包括: 数据类型及数据格式,指令格式,寻址方式和可访问空间大小,程序可访问的寄存器个数、位数和编号,控制寄存器的定义,I/O空间的编址方式,中断结构,机器工作状态的定义和切换,输入输出数据传送方式,存储保护方式等。
本书主要介绍单处理器计算机系统的组成与系统结构涉及的相关内容。在计算机系统层次结构中,这些内容位于软件和硬件的结合处,不仅涉及计算机硬件设计和指令系统设计,还涉及操作系统、编译程序和程序设计等部分软件设计技术,是整个计算机系统中最核心的部分。
1. 本书的写作思路和内容组织
计算机组成与系统结构这两部分涉及的内容相互融合,密不可分。无论是国内还是国外,很多高校都逐渐把计算机组成原理和系统结构课程的内容有机结合起来;甚至国外一些经典教材还把密切相关的软件设计的内容也融合到一起。这种方式可以加深读者对计算机软硬件系统的整体化理解,并有效地增强对学生的计算机系统设计能力的培养。
本书在总结和借鉴国外著名高校使用的教材、教案、教学理念和教学方法的基础上,力图以“培养学生现代计算机系统设计能力”为目标,贯彻“从程序设计视角出发、强调软硬件关联与协同、以CPU设计为核心”的组织思路,试图改变国内同类教材通常的就硬件讲硬件、软硬件分离的传统内容组织方式,以系统化观点全面地介绍计算机组成和系统结构的相关知识和技术。
为了体现以上思路和目标,本书在以下几个方面进行了重点考虑和内容组织:
(1) 首先基于“高级语言程序→汇编语言程序→机器指令序列→控制信号”的路线,展现程序从编程设计、转换翻译到最终在CPU上运行的整个过程;在此基础上,用计算机系统层次化的观点阐述计算机组成与系统结构课程在整个计算机系统中的位置、内容和作用,从而为清晰了解本课程的内容和作用、为全面建立计算机软硬件系统的整体概念打下基础。
(2) 将指令执行过程和异常、中断、存储访问、I/O访问等重要概念和技术结合起来进行介绍,力求清晰说明CPU执行指令过程中硬件与操作系统相互切换和协同工作的处理过程,使读者深刻理解软硬件系统之间的关系与协同工作过程。
(3) 在讲述与程序设计有密切关系的体系结构内容(如数据表示、信息存放、操作数寻址、过程调用、程序访问局部性等)时,试图通过对硬件设计与程序设计的关系的说明,使读者建立“从程序员视角理解计算机硬件系统设计,从硬件设计的视角理解程序设计与执行”的思想,力图在提高读者硬件设计能力的同时,也增强其进行高效的和系统化的程序设计的能力。
(4) 在国内“计算机组成原理”教材传统内容基础上增加指令流水线设计的详细内容,依照“最简单的IAS计算机CPU→总线式CPU→单周期CPU→多周期CPU→基本流水线CPU→动态超标量超流水线CPU”的次序,循序渐进地介绍CPU设计技术及其发展过程,以MIPS处理器和Pentium 4处理器为蓝本,力图使读者全面深入地掌握现代计算机的CPU设计技术。
前 言 计算机组成与系统结构 (5) 结合指令流水线技术介绍基于流水线的编译优化技术,使读者对编译技术与指令流水线实现技术之间的密切关系有一定的认识和理解。
2. 本书各章节的主要内容
本书共有9章,各章主要内容如下:
第1章(计算机系统概述)主要介绍冯·诺依曼结构的特点、计算机硬件的基本组成、计算机软件设计和执行过程、计算机系统层次结构,以及系统性能评价方法;
第2章(数据的机器级表示)主要介绍无符号数和有符号整数的表示、IEEE 754浮点数标准、西文字符和汉字的编码表示、大端/小端存放顺序及对齐方式,以及常用检/纠错码表示与使用方法等;
第3章(运算方法和运算部件)主要介绍各类定点数和浮点数的运算方法和相应的运算部件,以及核心运算部件ALU的功能和设计实现等;
第4章(存储器分层体系结构)主要介绍存储器分层结构的概念、半导体存储器的组织、多模块存储器、cache的基本原理、cache和主存间的映射关系及替换算法、虚拟存储器的基本概念、页表结构、缺页异常、TLB的实现技术;
第5章(指令系统)主要介绍高级语言与低级语言的关系、指令格式、操作数类型、寻址方式、操作类型、硬件对过程的支持、用户程序在虚存空间的配置和划分等技术;
第6章(中央处理器)主要介绍CPU的基本功能和内部结构、指令执行过程、数据通路的基本组成和定时、单周期和多周期数据通路、硬连线路和微程序控制器、异常和中断等概念和技术;
第7章(指令流水线)主要介绍指令流水线的基本原理、流水段寄存器的概念、流水线数据通路的设计、流水线的控制信号、结构冒险及其处理、数据冒险及其处理、转发技术、控制冒险及其处理、分支预测原理、超标量和动态流水线的概念和技术;
第8章(系统总线)主要介绍总线基本概念、总线裁决、总线定时、总线标准及其现代计算机内部的总线互连结构;
第9章(输入输出组织)主要介绍常用输入输出外设和磁盘存储器的工作原理、I/O接口的结构、I/O端口编址方式、程序查询I/O方式、中断I/O方式和DMA方式等。
3. 关于本书使用的一些建议
本书可作为“计算机组成原理”课程的教材,也可作为“计算机组成原理实验”课程和“计算机系统结构”课程的教学参考书,特别是对于不专门开设“计算机系统结构”课程的院校,使用本书作为“计算机组成与系统结构”课程的教材是比较合适的。
本书力求用历史的、系统的观点全面深入地介绍计算机组成与系统结构所涉及的重要概念和知识体系,并力求准确、清晰地阐述相关内容之间的关联,因而,内容较多、篇幅较大,为此,本书对课堂教学内容和课后阅读内容进行了区分,在目录和正文的章节标题处加标注表示可作为课后阅读的内容。本书作为教材使用时,可以根据不同的教学目标和课时限制,有选择地进行内容裁剪和选择。
对于本书的使用,具体建议如下:
(1) 课堂教学应以主干内容为主,力求完整给出知识框架体系,并着重讲清楚相关概念之间的联系。
(2) 标注为*的内容是可以跳过而不影响阅读连贯性的部分,主要有以下三类: 简单易懂的基础性内容、具体实现方面的细节内容和在技术层面上更加深入的内容。这些内容对深入理解课程的整体核心内容是非常有帮助的。因此,在课时允许的情况下,可以选择其中的一部分进行课堂讲解;在课时不允许的情况下,也尽量安排学生进行课后阅读。
(3) 书中每个重要的知识点和概念后面都有一些例子,可选择部分重要的、难懂的例子在课堂上讲解,而大部分可留给学生自学。
(4) 习题中列出的概念术语基本涵盖了相应章节的主要概念,可以让学生对照检查是否全部清楚其含义;习题中列出的简答问题是相应章节重要的基本问题,可以通过对照检查以判断学生对相应章节内容的掌握程度;对于综合运用题,如果与程序设计相关,则可用编程方式来求解或验证,这样做,对学生深刻理解课程内容有帮助。
(5) 本书在CPU设计方面给出了比较具体的实现方案,相关内容可以作为基于FPGA和硬件描述语言进行CPU设计实验的参考资料。
(6) 书后给出了部分国际一流大学的相关课程网站网址,可以到这些网站找到课堂讲义、习题参考答案,以及更多的相关教辅资料。4. 致谢
在本书的编写过程中,得到了张福炎教授的悉心指导;黄宜华教授从书稿的篇章结构到内容各方面都提出了许多宝贵的意见,进行了修改,并对全书内容进行了全面细致的审核和校对;书中有关CPU设计的最初图稿和内容组织思路由陈贵海教授提供;此外,武港山教授、俞建新、吴海军、张泽生、蔡晓燕等老师也对本书提出了许多宝贵的意见;杨晓亮、肖韬、翁基伟、刘长辉、宗恒、莫志刚、叶俊杰等研究生对相关章节的内容和习题分别进行了校对和试做,并提出了许多宝贵的意见和修改建议。在此对以上各位老师和研究生一并表示衷心的感谢。
本书是作者在南京大学从事“计算机组成与系统结构”课程教学近20年来所积累的讲稿内容的基础上编写而成的,感谢各位同仁和各届学生对讲稿内容所提出的宝贵的反馈和改进意见,使得本教材的内容得以不断地改进和完善。
5. 结束语
本书广泛参考了国内外相关的经典教材和教案,在内容上力求做到取材先进并反映技术发展现状;在内容的组织和描述上力求概念准确、语言通俗易懂、实例深入浅出,并尽量利用图示和实例来解释和说明问题。相信只要读者具有数字逻辑电路和程序设计的一些基本概念,就能通过使用本书较为全面地理解相关的基础理论、技术和知识体系;理解和掌握现代计算机的指令集体系结构;理解和掌握ALU、乘法器、存储器、I/O接口、总线等各种基本部件以及流水线CPU的基本工作原理、结构和设计技术。
但是,由于计算机组成与系统结构相关的基础理论和技术在不断发展,新的思想、概念、技术和方法不断涌现,加之作者水平有限,在编写中难免存在不当或遗漏之处,恳请广大读者对本书的不足之处给予指正,以便在后续的版本中予以改进。
为了更好地提供教学支持,并逐步形成一个广泛、方便、有效的课程教学交流空间,我们构建了相应的课程网站。其中包括每个章节的主要内容提要、学习目标和要求、课堂讲义、作业及参考答案、概念术语、常见问题、课后练习、例题分析等,此外还包括课程教学大纲、课程实验内容、虚拟实验、装机实践、课程动画演示和计算机小百科等。我们还将不断更新课程内容,并尽快将课程教学的视频文件放到课程网站上,以供大家参考。
课程网址如下(如果只是浏览课程内容,建议使用后面两个网址,速度较快):
http://graphics.nju.edu.cn/(用户名和密码都是student,可进入讨论区进行交流).
http://media.njude.com.cn/course/jsjzcyl/index.htm.
http://tres.njude.com.cn/msmk/jsjzcyl/index.htm.
作 者于南京
2010年2月
第1章 计算机系统概述1
1.1 计算机的功能和特性1
1.2 计算机的发展历程2
1.2.1 电子计算机的诞生2
1.2.2 第一代计算机2
1.2.3 第二代计算机3
1.2.4 第三代计算机4
1.2.5 第四代计算机4
1.3 计算机系统的组成6
1.3.1 计算机硬件6
1.3.2 计算机软件9
1.4 计算机系统的层次化结构10
1.4.1 最终用户眼中的计算机10
1.4.2 系统管理员眼中的计算机10
1.4.3 应用程序员眼中的计算机11
1.4.4 系统程序员眼中的计算机11
1.4.5 程序开发与执行过程11
1.5 本教材的主要内容和组织结构14
1.6 计算机系统性能评价16
1.6.1 计算机性能的定义16
1.6.2 计算机性能的测试16
1.6.3 用指令执行速度进行性能评估19
1.6.4 用基准程序进行性能评估20
1.7 本章小结21
习题122
第2章 数据的机器级表示25
2.1 数制和编码25
2.1.1 信息的二进制编码25
2.1.2 进位计数制27
2.1.3 定点与浮点表示31
2.1.4 定点数的编码表示31
2.2 整数的表示36
2.2.1 无符号整数的表示36
2.2.2 带符号整数的表示37
2.2.3 C语言中的整数类型37
2.3 实数的表示38
2.3.1 浮点数的表示格式38
2.3.2 浮点数的规格化40
2.3.3 IEEE 754浮点数标准41
2.3.4 C语言中的浮点数类型45
2.4 十进制数的表示47
2.4.1 用ASCII码字符表示47
2.4.2 用BCD码表示48
2.5 非数值数据的编码表示49
2.5.1 逻辑值49
2.5.2 西文字符50
2.5.3 汉字字符51
2.6 数据的宽度和存储53
2.6.1 数据的宽度和单位53
2.6.2 数据的存储和排列顺序55
2.7 数据校验码58
2.7.1 奇偶校验码60
2.7.2 海明校验码60
2.7.3 循环冗余校验码64
2.8 本章小结67
习题268
第3章 运算方法和运算部件72
3.1 高级语言和机器指令中的运算72
3.1.1 C程序中涉及的运算72
3.1.2 MIPS指令中涉及的运算75
3.2 基本运算部件77
3.2.1 串行进位加法器78
3.2.2 进位选择加法器79
3.2.3 并行进位加法器79
3.2.4 算术逻辑部件82
3.3 定点数运算85
3.3.1 补码加减运算86
3.3.2 原码加减运算88
3.3.3 移码加减运算89
3.3.4 原码乘法运算90
3.3.5 补码乘法运算95
3.3.6 快速乘法器99
3.3.7 原码除法运算101
3.3.8 补码除法运算108
3.3.9 阵列除法器112
3.4 浮点数运算113
3.4.1 浮点数加减运算113
3.4.2 浮点数乘除运算117
3.5 运算部件的组成120
3.5.1 定点运算部件120
3.5.2 浮点运算部件122
3.6 十进制数加减运算124
3.7 本章小结125
习题3126
第4章 存储器分层体系结构130
第5章 指令系统192
第6章 中央处理器229
第7章 指令流水线287
第8章 系统总线329
第9章 输入输出组织358
参考文献422