标题：计算机组成与设计（第二版）
图书信息
作者：薛宏熙、胡秀珠、郑玉彤
图书详细信息： ISBN：9787302280262 定价：45元 印次：2-1 装帧：平装 印刷日期：2012-6-20
图书简介
本书共分7章和两个附录，第1章是概论；第2章介绍数据在计算机内部的表示形式；第3章介绍如何用数字电路实现数据的存储与计算；第4~7章是计算机组成原理和设计方法的主体内容，包括中央处理器（CPU) 、存储系统、外围设备和输入/输出系统。附录A介绍EDA工具QuartusII，附录B介绍硬件描述语言VHDL。本书附有光盘，其中包含EDA工具Quartus II 9.0（网络版）、PPT形式的课件以及本书中涉及的VHDL源代码。作者将习题解答放置在清华大学出版社网站，教师向出版社提供身份证明后可免费下载。本书的特点是引入电子设计自动化（Electronic Design Automation, EDA）工具和硬件描述语言VHDL，使理论教学和上机实验相结合，使学习基本原理和掌握设计方法相结合。本书可作为高等院校计算机及相关专业“计算机组成原理”课程的教材，也可作为从事相关工作的工程技术人员的参考书。
图书前言
操作系统是计算机系统的核心，它负责控制和管理整个计算机系统的软硬件资源，使之协调工作。近年来，计算技术的发展日新月异，现代操作系统在经典体系结构的基础上，加入了很多新的特性和功能。图形用户界面的出现是操作系统发展中的一个里程碑。图形界面相对字符界面更加方便和快捷的操作方式，使得计算机不再只是专业人员的工具，而为更多的普通用户所接受，办公系统也成为图形界面操作系统的主流应用。计算机的硬件处理能力的不断提升使得多媒体技术得到广泛的应用，新一代的操作系统可以利用三维图形、图像、视频和音频等更加直观的方式表示信息，用户还可以通过语音和电子笔等手段来更加高效地和计算机进行交互。这种自然的用户界面必将进一步促进计算机被更多的普通用户所接受，家庭计算和娱乐也将成为新一代的主流计算机应用。对信息和数据的存储和管理是操作系统的基本功能。为了适应多媒体用户界面的需要，字符不再是信息表达的唯一方式，图形、图像、声音等多媒体信息逐渐成为计算机表示信息的基本结构。大容量存储技术的发展给用户利用计算机管理大量的数据提供了物质基础，这也给操作系统管理数据和信息带来了新的挑战。如何在海量的数据中高效地浏览、查找所需要的信息成为现代操作系统需要解决的重要问题。对数据的结构化管理以及对信息搜索的支持必将成为下一代操作系统的重要功能。网络和互联技术的发展，使得计算机不再是信息的孤岛。互联网技术的发展使得更多的计算机之间可以更加方便地交换信息；移动计算和无线技术的发展，使得计算机可以连接和控制各种各样的智能设备。以前的用户只能在特定的场合使用计算机，现在人们离无处不在的计算机越来越近了。计算机之间的互连以及计算机和智能设备的互连成为现代操作系统的重要功能，随之而来的计算机的安全性问题也得到了前所未有的重视。通过开放的数据结构来支持数据的交换和共享，同时保证高度的安全性和稳定性成为下一代操作系统追求的重要目标。尽管计算机的功能不断地发展和创新，计算机系统仍然遵循冯·诺依曼提出的体系结构，操作系统的核心功能依然是对处理器、存储器和输入输出设备的管理。对操作系统的基本原理和核心功能的学习和理解，是进一步创新的基础。本书作者张尧学教授和史美林教授有多年丰富的计算机教学及科研经验，对各种现代操作系统有深入细致的了解。本书对操作系统的基本概念和发展历史进行了系统的阐述，并对操作系统的核心功能如进程管理、处理机调度、存储管理、文件系统和设备管理等作了详尽的描述和分析。本书行文简洁流畅，讲解清晰，为读者深入理解操作系统的原理提供了坚实的理论基础。本书既注重对操作系统的经典内容的论述，又紧密联系当前操作系统的发展方向。以当代最流行的操作系统Windows和Linux作为实例，阐述了操作系统的具体实现，反映了现代操作系统技术最新发展方向。 微软亚洲研究院成立以来，一直将支持中国高校的课程建设作为重要的工作，很高兴微软的张高博士能参与本书的编写工作。我谨代表微软公司表达对支持中国教育事业的长期承诺和诚意，希望和中国高校的专家和教授一起，写出更多这样好的教材，为中国信息产业的腾飞尽一份力量。沈向洋微软亚洲研究院院长2006年8月 在本书第一版的基础上进行了如下修改和补充: (1) 对第一版中某些部分进行了适当的增删和修改，改正了第一版中的某些错误。改动比较大的部分包括: ① 第3章中的3.3节细分为3.3.1节和3.3.2节，其中3.3.2节用VHDL对某个静态随机访问存储器（Static Random Access Memory, SRAM）作功能描述，通过该实例说明存储器的基本概念。② 第4章中增加了4.6.6节、4.6.7节、4.6.8节、4.6.9节。其中，4.6.6节、4.6.7节、4.6.8节是对处理器设计加以改写，改进了原方案并且描述更为清晰。4.6.9节则对使用EDA工具设计和手工设计进行比较，分析了硬连线控制器和微程序控制器的优缺点。③ 由于QuartusII 9.0网络版不再需要Liciense，故删去附录A中不必要的内容，改写后的A.1节不再细分为3节。QuartusII版本的更新也引起相应内容的更新。(2) 丰富了光盘中的内容，除了提供EDA工具QuartusII、VHDL源代码外，还增加了PPT形式的课件。(3) 在清华大学出版社的网站上提供习题解答，教师提供身份证明后可免费下载。课件和习题解答部分由郑玉彤完成，三位作者共同讨论修改方案，由薛宏熙最终定稿。限于作者的经验和水平，错误或不当之处在所难免，欢迎读者和使用此教材的教师批评指正。致谢ALTERA公司中国区项目经理徐平波为本书提供了EDA工具QuartusII 9.0网络版并授权发行，特此致谢。作 者2012年2月于清华园 计算机系统由硬件和软件组成，计算机组成原理课程偏重于硬件，并且把硬件和软件之间的桥梁搭接起来。目标是让学生了解计算机的内部结构，以便为他们将来的发展奠定一个良好的专业基础。作者发现某些计算机专业毕业的大学生在学习后续课程中暴露出以下弱点：他们对计算机组成的细节知道不少，而总体把握不足，在实际应用时概念模糊，不知如何下手。为此本书在写作风格上贯彻以下特点：首先，在教学体系上提供一个理论与实践结合的实验平台。为此，本书引入电子设计自动化（electronic design automation, EDA）工具和硬件描述语言VHDL，使理论教学和上机实验相结合。这样做带来的好处是： ①学生的注意力可以集中于对计算机及其部件功能的深刻理解和精确描述，深刻理解各功能部件的相互连接关系，而不陷入手工设计的烦琐细节中，因为这些烦琐的细节工作可以交给EDA工具去做。②检验一个设计正确与否可以在EDA工具（模拟验证）的帮助下完成，因而使学生具备自我检查的能力。③通过实验完成一个计算机部件的设计，必然印象深刻，并且这个设计不是纸面上的图形和文字，而是可以提交给EDA工具、可直接被综合为集成电路的设计。虽然学习EDA工具的使用方法以及学习硬件描述语言VHDL都需要花费一定的时间和精力，但是这种付出和收获相比，收获将远大于付出。从更长远的角度看，掌握EDA工具的使用方法及硬件描述语言对学生的发展极为有益，学生毕业后走上工作岗位，如果遇到硬件设计问题，用这种方法进行设计必然省时、省力,效果好。其次，易学易懂是本书的一个重要目标。为此，在每章的开头有【课前思考】和【学习指南】，为学习本章提供指导性意见，每章的末尾有习题供学生作练习。在文字表述上，尽量避免长篇的文字描述，而尽量多用图形、表格、提纲等方式，醒目地介绍有关知识。学习计算机组成原理会涉及许多专业术语和概念，为了使学生便于接受这些术语和概念，本书采用实例引导的方法，逐步深入地引入概念。在描述比较复杂的概念或定义的时候，采取先粗略、后精确的方法，经过若干步骤达到由表及里、由浅入深。当涉及深入的数学问题的时候，本书先给出初始出发点和有关定义，再给出相应的结论，而略去中间的推导（或证明）过程。因为我们的读者不是数学专业的学生，我们的目的是了解这些结论如何应用于计算机中。本书在取材方面以基本内容为主，当涉及某些难度较大，而又需要一般了解的知识点时，本书给有关章节加上星号，提示该部分内容不属于基本要求。本书采用的EDA工具是ALTERA公司的Quartus II，该公司有一个支持教育的大学计划（university program) ，为学生免费提供Quartus II学生版。在此我们要感谢ALTERA公司，感谢他们为学校的理论教学和上机实验相结合提供了实验平台。全书共分7章和2个附录。第1章是概论，以形象、概括的方式介绍计算机的组成，使读者尽早地对计算机有一个整体的认识。其中包括计算机的基本部件，计算机的硬件、软件及其相互关系，计算机的应用和发展等。第2章介绍计算机内部的编码系统。主要介绍数据表示形式的多样性：在计算机外部，数据的表示形式要尽量方便人的理解；在计算机内部，数据表示形式要尽量适合计算机的存储与处理。由此而产生了多种编码系统，其中补码应用最广，也是本章的重点。第3章介绍用数字电路实现数据的存储与运算。数字电路中最基本的逻辑元件是逻辑门，最基本的存储元件是触发器，用逻辑门和触发器可以构建计算机的各种部件。如何理解逻辑门、触发器的基本功能，如何用逻辑门和触发器构建计算机的各种部件，如何检验设计的部件是否和预期的功能相符，这就要用到EDA工具和硬件描述语言VHDL。应当说明的是,本章的内容和“数字逻辑”的内容有部分重叠之处，出现重叠的原因是出发点不完全相同，本书的着重点在于如何使用基本逻辑元件构建计算机，而不是介绍这些逻辑元件本身。读者可把重叠之处作为复习，也可以跳过不看。第4章介绍计算机的核心部件--处理器。处理器的主要功能是执行指令，因此需要了解指令的格式和指令的执行过程。处理器由数据通路和控制器组成，控制器向数据通路发出控制信号，使数据沿着指定的通路前进，从而完成指令所要求的操作。学习处理器有2个难点： ①指令的执行过程； ②控制器的设计。本书采用的教学方法是：用VHDL描述一个简化的处理器，使学生从总体上把握处理器的功能和指令的执行过程，至于设计的细节则交给EDA工具去完成。这样做避开了难点和烦琐的细节，有利于学生从总体上掌握关于处理器的知识，同时也符合将来工作的实际环境。因为EDA工具已经比较成熟，教科书应当在技术上与时俱进，把先进的工具引入教学过程，提高教学效果。第5章介绍计算机的存储系统，存储系统由内（主）存储器、外（辅助）存储器、高速缓冲存储器和虚拟存储器4部分组成。我们知道，计算机的指令和数据都存储在存储器中，存储器是计算机不可缺少的重要部件。存储系统为什么要由4部分组成而不是单一品种？最重要的原因是为了提高性能价格比。第6章介绍计算机的外围设备，包括输入设备和输出设备。第7章介绍总线和输入输出系统，主要内容为外围设备和处理器的连接方式。附录A介绍Quartus II，通过精选的实例进行引导，读者可以跟随这些例子并实际操作，从而掌握Quartus II的使用方法和技巧。附录B介绍硬件描述语言VHDL. 从第3章开始，理论学习要和上机实验相结合，这就必然涉及EDA工具Quartus II和硬件描述语言VHDL。在学习方法上，我们不是先学习了Quartus II和VHDL之后才学第3章以及此后的章节。建议初学者先快速浏览附录A和附录B，然后在学习有关理论知识的过程中边学边查，穿插进行。先对Quartus II和VHDL有个粗略的了解，最后达到全面掌握。教师讲课时，也可以在讲第3章之前用2个课时简单介绍Quartus II，然后布置作业让学生在实践中逐步掌握Quartus II的使用方法和技巧。有关Quartus II、VHDL及可编程逻辑器件的详细资料，可参阅文献\. 本书的适用对象是大学本科生，以及想通过自学掌握计算机内部结构的工程技术人员。本书附有光盘，其中包含EDA工具Quartus II 6.0网络版，使读者得以方便地使用该软件；光盘中还包含本书中所有表格、图片以及VHDL源代码，方便学生学习和教师制作课件。致谢研究生陈美杉和董龙仔细阅读了本书第1~6章，提出了许多宝贵意见，许忠信博士对附录A进行了审校，ALTERA公司中国区项目经理徐平波为本书提供了EDA工具Quartus II 6.0网络版并授权发行，在此一并致谢。限于作者的经验和水平，错误或不当之处在所难免，欢迎读者和使用此教科书的教师、学生提出宝贵意见。作 者2006年9月于清华园
图书目录
第1章 概论 /11.1 从外部观察计算机 /11.2 数字计算机与模拟计算机 /51.3 计算机的内部结构 /61.3.1 计算机硬件的组成 /71.3.2 计算机软件的组成 /111.4 微型计算机的主要指标 /131.5 计算机的发展与应用 /141.5.1 制造工艺进步导致计算机性能提高 /141.5.2 计算机的普及与应用导致计算机产业发展 /151.5.3 远景展望 /16本章小结 /17习题 /17第2章 数码系统--数据在计算机内部的表示形式 /192.1 数据表示形式的多样性 /192.1.1 适合于人的数据表示形式 /192.1.2 适合于计算机的表示形式--编码 /202.1.3 数据格式的相互转换 /282.2 机器数的编码格式 /312.2.1 二进制定点数的原码表示形式 /322.2.2 二进制定点数的补码表示形式 /342.2.3 二进制定点小数的反码表示形式 /422.2.4 十进制数的二进制编码及运算 /432.2.5 浮点数的编码形式 /462.3 信息传输过程中的检错/ 纠错码 /472.3.1 奇偶校验码 /482.3.2?* 海明校验码 /492.3.3?* 循环冗余校验码 /52本章小结 /57习题 /57第3章 用数字电路实现数据的存储与运算 /623.1 数字集成电路的基本元件--逻辑门 /633.1.1 MOS晶体管 /633.1.2 逻辑门 /653.2 定点数的简单算术运算 /703.2.1 简单二进制加法器的实现（举例） /703.2.2 简单二进制减法器的实现（举例） /783.2.3 定点二进制数的补码加减法运算器 /793.2.4 定点二进制数乘法运算部件的实现 /803.2.5 定点二进制数除法运算部件的实现 /823.2.6 逻辑运算的实现（举例） /823.3 数据的存储 /833.3.1 寄存器（Register) /833.3.2 存储器（Memory) /873.4 二进制定点数的乘法运算 /903.4.1 正数的定点小数乘法运算 /903.4.2 补码的乘法运算 /953.5 二进制定点数的除法运算 /1003.5.1 正数的定点小数除法运算 /1003.5.2?* 补码的除法运算 /1033.6 浮点数的算术运算 /1073.6.1 浮点数的加减运算 /1073.6.2 浮点数的乘除运算 /1083.6.3 阶码的表示形式--补码和移码 /1103.6.4 浮点数四则运算的小结 /1113.7 算术逻辑运算单元（ALU）举例 /112本章小结 /114习题 /114第4章 计算机的核心部件--处理器 /1174.1 处理器的工作过程简介 /1174.2 数据在内存中与在处理器中的表示方式 /1194.3 指令格式（机器码格式） /1194.3.1 操作码 /1204.3.2 地址码 /1214.4 寻址（编址）方式 /1224.4.1 基本寻址方式概述 /1234.4.2 寻址方式举例 /1254.5 一个简单处理器（简化模型）的指令系统 /1264.6 处理器的组成与设计 /1284.6.1 处理器的组成 /1284.6.2 处理器和内存的相互联系 /1304.6.3 控制器 /1314.6.4 处理器指令执行的详细流程 /1334.6.5 处理器的（VHDL）行为描述 /1414.6.6 CPU的VHDL代码的基本框架 /1424.6.7 CPU的完整的VHDL代码 /1444.6.8 处理器与内存相连组成一台计算机 /1494.6.9 使用EDA工具设计与手工设计的比较 /1554.7 流水线技术 /1574.8 精简指令系统计算机（RISC) /160本章小结 /161习题 /161第5章 多级结构的存储器系统 /1635.1 概述 /1635.2 存储器分类 /1645.3 主存储器的基本原理 /1655.3.1 静态存储器的基本原理 /1675.3.2 动态存储器的基本原理 /1685.3.3 只读存储器(ROM) /1695.3.4 主存储器的主要技术指标 /1715.4 构成主存储器的有关技术 /1725.4.1 主存容量的扩展 /1725.4.2 单向数据总线和双向数据总线 /1735.4.3 地址码的一级译码和二级译码 /1745.4.4 主存的检错与纠错 /1765.4.5 主存的并行读写技术 /1765.4.6 CPU与主存的协同工作--同步与异步 /1785.4.7?* 同步动态随机存储器 /1785.4.8?* Rambus DRAM /1795.4.9?* 双端口存储器 /1795.4.10?* 在DRAM芯片内加入缓存 /1805.5 辅助存储器 /1805.5.1 磁记录原理与记录方式 /1805.5.2 磁盘存储器 /1835.5.3 磁盘阵列存储器 /1855.5.4 光盘存储器 /1875.5.5 移动式存储器 /1905.6 高速缓冲存储器 /1905.6.1 高速缓存的工作原理 /1915.6.2 地址映像 /1925.6.3 替换算法和更新策略 /1945.7 虚拟存储器 /1965.7.1 虚拟存储器的基本概念 /1965.7.2 段式虚拟存储器 /1965.7.3 页式虚拟存储器 /1975.7.4 段页式虚拟存储器 /1985.7.5 快表与慢表 /199本章小结 /200习题 /200第6章 计算机的输入输出设备 /2036.1 图形和图像的点阵表示 /2046.2 键盘输入设备 /2056.3 定位输入设备 /2066.3.1 鼠标器 /2066.3.2 轨迹球 /2076.3.3 触摸板 /2076.4 扫描仪 /2076.4.1 扫描仪的工作原理 /2076.4.2 扫描仪的性能指标 /2086.5 显示器 /2086.5.1 CRT显示器 /2096.5.2 液晶显示器 /2116.6 打印机 /2126.6.1 针式打印机 /2126.6.2 喷墨打印机 /2146.6.3 激光打印机 /2156.7 汉字输入 /215本章小结 /217习题 /217第7章 计算机的输入输出系统 /2197.1 概述 /2197.2 计算机总线 /2217.2.1 总线类型 /2217.2.2 总线判优与仲裁 /2227.2.3 总线通信控制 /2257.2.4 总线的标准化和性能指标 /2277.2.5 总线举例 /2287.3 输入输出接口 /2317.3.1 接口的功能与组成 /2317.3.2 接口的分类 /2337.3.3 串行接口的通信协议 /2337.4 程序直接控制的输入输出方式 /2357.5 程序中断输入输出方式 /2377.5.1 中断的基本概念 /2377.5.2 中断请求与判优 /2387.5.3 中断响应与中断处理 /2417.5.4 多重中断中的现场保存与恢复 /2437.6 DMA输入输出方式 /2447.6.1 基本概念 /2447.6.2 DMA接口 /2467.6.3 DMA的工作方式 /2477.6.4 DMA的数据传送过程 /2477.7?* 通道控制与外围处理机控制方式 /2487.8?* 可编程接口电路举例--8255 /2497.9?* 8255的VHDL行为描述 /254本章小结 /259习题 /260附录A EDA工具 QuartusII简介 /262A.1 QuartusII的安装与运行 /263A.2 设计流程 /265A.3 项目的建立与版本管理 /267A.3.1 建立一个新项目 /267A.3.2 QuartusII项目的版本管理 /269A.4 设计的原理图描述 /271A.4.1 进入原理图编辑器 /271A.4.2 从元件库中调入元件符号 /272A.4.3 绘制原理图 /272A.5 设计的VHDL描述 /274A.5.1 进入文本编辑器 /275A.5.2 在文本编辑器中编辑VHDL文件 /275A.5.3 发现并纠正VHDL代码中的错误 /276A.5.4 保存文件 /278A.6 综合和编译 /278A.6.1 进入编译器 /278A.6.2 发现并纠正原理图中的错误 /280A.7 模拟验证 /281A.7.1 使用波形编辑器绘制测试向量波形 /281A.7.2 执行模拟 /284A.8 层次化设计实例 /286A.8.1 在原理图编辑器中实现层次化设计 /287A.8.2 VHDL设计描述与原理图混合使用的层次化设计 /290A.9 时序分析器 /293A.10 调用带参数的库元件 /294A.10.1 在原理图编辑器中创建一个存储器 /294A.10.2 初始化存储器的内容 /300A.10.3 存储器的模拟实例 /300A.11 可编程器件的物理实现 /301A.11.1 引脚分配 /301A.11.2 对目标器件编程 /305A.12 用SignalTapII实时测试FPGA中的信号波形 /310附录B 硬件描述语言VHDL简介 /316B.1 VHDL的产生与发展 /316B.2 用VHDL建立电路模型 /317B.2.1 电路模型 /317B.2.2 实体声明与结构体 /319B.2.3 结构体的描述方式 /320B.2.4 标识符 /321B.3 面向模拟器的某些特性 /322B.3.1 模拟周期 /323B.3.2 延迟时间 /323B.4 VHDL中的对象 /324B.5 数据类型 /325B.5.1 标量类型 /326B.5.2 复合类型 /327B.5.3 子类型 /329B.5.4 文件类型 /329B.5.5 类型转换 /330B.6 VHDL的词法单元 /331B.6.1 注释 /331B.6.2 数字 /332B.6.3 字符 /332B.6.4 字符串 /333B.6.5 位串 /333B.7 属性 /333B.8 表达式与运算符 /336B.9 子程序--过程与函数 /339B.10 程序包与设计库 /341B.10.1 程序包--设计中的数据共享 /341B.10.2 设计库 /342B.10.3 VHDL中名字的可见性 /343B.10.4 library语句和use语句 /344B.11 行为描述 /345B.11.1 进程语句 /345B.11.2 行为模型的顺序性 /346B.11.3 行为模型的并行性 /353B.12 结构描述 /357B.12.1 端口的基本特征 /358B.12.2 元件例化语句 /359B.12.3 配置指定 /360B.12.4 规则结构 /361B.12.5 无连接端口 /362B.13 重载 /362B.14 VHDL保留字和预定义程序包 /364B.14.1 VHDL保留字 /364B.14.2 标准程序包STANDARD /365B.14.3 IEEE多值逻辑系统程序包std_logic_1164 /372参考文献 /375[1]