内容简介
《计算机科学丛书:计算机存储与外设》由资深的计算机体系结构教育家Alan Clements博士编写,原书名为《计算机体系结构:原理与演变》(Computer Organization&Architecture:Themes and Variations),书中不仅覆盖单机系统的组成原理和系统结构的各个方面,还包括计算机的性能评价方法以及多发射、粗粒度并行等内容、作者希望《计算机科学丛书:计算机存储与外设》能够适合电子工程(EE)、电子与计算机工程(ECE)、计算机科学(CS)等不同专业的教学需要。、书中围绕基本概念、指令集体系结构、处理器组成和能效、存储与外设以及处理器级并行等五个核心问题将这些内容有条不紊地组织在一起,以便满足不同专业的教学需要。
中文版引进的时候综合考虑国内高校“计算机组成与结构”或类似课程的教学目标以及我们对《计算机科学丛书:计算机存储与外设》的定位,对原书进行了适当裁剪和重新组合,分为两册:《计算机组成原理》和《计算机存储与外设》。
《计算机科学丛书:计算机存储与外设》即为《计算机存储与外设》,涵盖原书第四部分,共4章,主要讲述计算机系统中的存储器、总线和输入/输出等内容。
作者简介
艾伦·克莱门茨(Alan Clements)国际著名的计算机体系结构教育的推动者和践行者。他于1997年获得英国拉夫堡大学(Loughborough University)博士学位,随后加入提赛德大学(University of Teesside)计算机科学系。在20世纪70~80年代,他编写了两本计算机体系结构领域的重要教材:《计算机硬件原理》(The Principles of Computer Hardware)和《微处理器系统设计》(Microprocessor Systems Design)。
2001年,他担任了计算机学会国际学生竞赛(CSIDC)主席,并于同年获得英国国家教学奖(National Teaching Fellowship)。由于在计算机体系结构教育方面的贡献,他于2002年获得IEEECS本科教学奖,2006年获得IEEECS泰勒布斯教育奖(Taylor L.Booth award)。2009年被选为IEEEFellow.,他在IEEE计算机学会担任了多个职务,并积极参加课程体系设计,撰写了关于未来计算机体系结构教育的论文,参加了CS/ACM2001计算课程体系的编写和制定工作。2010年Alan Clements从全职教学岗位退休。
内页插图
目录
出版者的话
译者序
前言
本书导读
作者简介
第1章 Cache存储器和虚拟存储器
1.1 Cache存储器概述
1.1.1 Cache存储器的结构
1.2 Cache存储器的性能
1.3 Cache的组织
1.3.1 全相联映射Cache
1.3.2 直接映射Cache
1.3.3 组相联Cache
1.3.4 伪相联、Victim、Annex和Trace Cache
1.4 Cache设计中要考虑的因素
1.4.1 物理Cache和逻辑Cache
1.4.2 Cache电气特性
1.4.3 Cache一致性
1.4.4 块大小
1.4.5 取指策略
1.4.6 多级Cache
1.4.7 指令和数据Cache
1.4.8 写Cache
1.5 虚拟存储器和存储器管理
1.5.1 存储器管理
1.5.2 虚拟存储器
本章小结
习题
第2章 主存储器
2.1 简介
2.1.1 存储系统的原理和参数
2.1.2 存储层次
2.2 主存储器
2.2.1 SRAM
2.2.2 交叉存储器
2.3 DRAM
2.3.1 DRAM时序
2.3.2 DRAM技术的发展
2.4 只读存储器系列
2.4.1 EPROM系列
2.5 新兴的非易失性技术
2.5.1 铁电迟滞
2.5.2 MRAM——磁阻随机访问存储器
2.5.3 双向存储器
本章小结
习题
第3章 二级存储器
3.1 磁盘驱动器
3.2 磁性和数据存储
3.2.1 读/写头
3.2.2 磁记录密度的极限
3.2.3 磁盘数据记录原理
3.3 磁盘上的数据组织
3.3.1 磁道和扇区
3.3.2 磁盘参数和性能
3.3.3 SMART技术
3.4 安全存储和RAID系统
3.5 固态盘
3.6 磁带
3.7 光学存储技术
3.7.1 数字音频
3.7.2 从CD中读取数据
3.7.3 底层数据编码
3.7.4 可记录光盘
3.7.5 DVD
3.7.6 蓝光
本章小结
习题
第4章 输入/输出
4.1 I/O的基本原理
4.1.1 外围设备寄存器寻址机制
4.1.2 外围设备访问和总线宽度
4.2 数据传输
4.2.1 开环数据传输
4.2.2 闭环数据传输
4.2.3 缓冲数据
4.3 I/O策略
4.3.1 程序控制I/O
4.3.2 中断驱动I/O
4.3.3 直接存储器访问
4.4 I/O系统的性能
4.5 总线
4.5.1 总线结构和拓扑
4.5.2 总线的结构
4.6 总线仲裁
4.6.1 本地化仲裁和VMEbus
4.6.2 分布式仲裁
4.7 PCI和PCIe总线
4.7.1 PCI总线
4.7.2 PCIe总线
4.7.3 CardBus、PC卡和ExpressCard
4.8 SCSI和SAS接口
4.9 串行接口总线
4.9.1 以太网
4.9.2 FireWire 1394串行总线
4.9.3 USB
本章小结
习题
参考文献
前言/序言
21世纪是科学和技术奇迹频出的时代。计算机已经做到了人们期望它做到的一切——甚至更多。生物工程解开了细胞的秘密,使科学家能够合成10年前无法想象的新药。纳米技术让人们有机会窥探微观世界,将计算机革命与原子工程结合在一起创造出的纳米机器人,也许有一天能够植入人体,修复人体内部的创伤。普适计算带来了手机、MP3播放器和数码相机,使人们彼此之间能够通过Internet保持联系。计算机是几乎所有现代技术的核心。本书将阐述计算机是如何工作的。
从20世纪50年代起大学就开始教授这门被称为计算的学科了。一开始,大型机主导了计算,这个学科包括对计算机本身、控制计算机的操作系统、语言和它们的编译器、数据库以及商业计算等的研究。此后,计算的发展呈指数增长,到现在已包含多个不同的领域,任何一所大学都不可能完全覆盖这些领域。人们不得不将注意力集中在计算的基本要素上。这一学科的核心在于机器本身:计算机。当然,作为一个理论概念,计算可以脱离计算机而独立存在。实际上,在20世纪三四十年代计算机革命开始之前,人们已经进行了相当多的关于计算机的科学理论基础的研究工作。然而,计算在过去40年里的发展方式与微处理器的崛起紧密联系在一起。如果人们无法拥有价格非常便宜的计算机,Internet也无法按照它已有的轨迹取得成功。
由于计算机本身对计算的发展及其发展方向产生了巨大影响,在计算的课程体系中包含一门有关计算机如何工作的课程是非常合理的。大学里计算机科学或计算机工程方向的培养方案中都会有这样一门课程。实际上,专业和课程的认证机构都将计算机体系结构作为一项核心要求。比如,计算机体系结构就是IEEE计算机协会和ACM联合发布的计算学科课程体系的中心内容。
介绍计算机具体体现与实现的课程有各种各样的名字。有人将它们叫作硬件课,有人管它们叫作计算机体系结构,还有人把它们叫作计算机组成(以及它们之间的各种组合)。本书用计算机体系结构表示这门研究计算机设计方法和运行方式的课程。当然,我会解释为什么这门课程有那么多不同的名字,并会指出可以用不同的方式来看待计算机。
与计算机科学的所有领域一样,计算机体系结构也随着指令集设计、指令级并行(ILP)、Cache缓存技术、总线系统、猜测执行、多核计算等技术的发展而飞速进步。本书将讨论所有这些话题。
计算机体系结构是计算机科学的基石。例如,计算机性能在今天的重要性超过了以往任何时候,为了做出最佳选择,即便是那些购买个人电脑的用户也必须了解计算机系统的结构。
数据结构与算法:高效计算的基石 本书深入探讨了计算机科学的核心领域——数据结构与算法。作为理解和构建高效计算机系统的基石,数据结构为信息的组织和存储提供了多种模型,而算法则是处理和操作这些数据的精确指令集。本书旨在为读者建立扎实的理论基础,并掌握在实际问题中选择和应用最合适的数据结构与算法的能力,从而设计出性能优越、可扩展性强的软件解决方案。 第一部分:数据结构的奥秘 本部分将从最基本的数据组织形式出发,逐步深入到更复杂、更抽象的数据结构。我们将以清晰的逻辑和详实的示例,解析每种数据结构的内在原理、特性以及适用场景。 第一章:线性数据结构 数组 (Arrays): 作为最基本的数据结构,数组提供了一种在内存中连续存储相同类型元素的方式。我们将详细介绍数组的创建、访问、插入和删除操作的时间复杂度,并讨论静态数组和动态数组的区别。示例将涵盖如何使用数组实现查找表、栈和队列等基本操作。 链表 (Linked Lists): 链表与数组不同,其元素在内存中可以不连续存储,通过指针连接。我们将深入探讨单向链表、双向链表和循环链表的结构特点,以及它们在插入、删除和遍历等操作上的优势。通过对比链表和数组,读者将能更好地理解在不同场景下选择哪种数据结构更为合适。 栈 (Stacks): 栈是一种遵循“后进先出”(LIFO)原则的数据结构。本书将介绍栈的抽象数据类型(ADT)定义,并展示如何使用数组和链表来实现栈。我们将深入分析栈在函数调用、表达式求值和回溯算法等方面的应用,例如深度优先搜索(DFS)的实现。 队列 (Queues): 队列则遵循“先进先出”(FIFO)原则。我们将讲解队列的ADT,以及其在数组和链表上的实现。队列在任务调度、缓冲区管理和广度优先搜索(BFS)等算法中扮演着关键角色。 第二章:非线性数据结构 树 (Trees): 树是一种层次结构的数据结构,由节点和边组成,具有广泛的应用。我们将从基本概念出发,讲解树的定义、术语(如根节点、父节点、子节点、叶子节点)以及遍历方法(前序、中序、后序)。 二叉树 (Binary Trees): 作为最常见的树结构,二叉树的每个节点最多有两个子节点。我们将深入研究二叉搜索树(BST),包括其插入、删除、查找操作的原理和时间复杂度。此外,我们将探讨平衡二叉搜索树(如AVL树、红黑树)如何通过自平衡机制来保证高效的查找和修改性能。 堆 (Heaps): 堆是一种特殊的完全二叉树,满足堆属性(最大堆或最小堆)。我们将讲解堆的构建、插入和删除操作,并重点介绍堆在优先队列(Priority Queues)和堆排序中的应用。 图 (Graphs): 图是一种更通用的非线性结构,由顶点(节点)和连接顶点的边组成。我们将定义图的基本术语,如无向图、有向图、加权图、连通分量等。 图的表示: 详细介绍邻接矩阵和邻接表两种表示方法,并分析它们的优缺点。 图的遍历: 深入讲解广度优先搜索(BFS)和深度优先搜索(DFS)算法,并提供相应的图解和代码示例。 图的经典算法: 介绍最短路径算法(如Dijkstra算法、Floyd-Warshall算法)、最小生成树算法(如Prim算法、Kruskal算法)等,并分析其实现原理和应用场景。 第三章:哈希表 (Hash Tables) 哈希表是一种高效的数据结构,通过哈希函数将键映射到存储位置,实现快速的插入、删除和查找。我们将详细讲解哈希函数的选择原则,以及冲突解决方法,如链地址法(Separate Chaining)和开放地址法(Open Addressing,包括线性探测、二次探测和双重哈希)。本书将通过实例说明哈希表在字典、缓存和数据库索引等方面的广泛应用,并分析其平均和最坏情况下的时间复杂度。 第二部分:算法的艺术 本部分将聚焦于算法的设计、分析和优化。我们将从算法的基本概念出发,探索各种经典的算法设计范式,并深入理解算法的时间复杂度和空间复杂度分析方法。 第四章:算法分析基础 渐进分析 (Asymptotic Analysis): 掌握大O符号(O)、大Ω符号(Ω)和大Θ符号(Θ)的概念,用于描述算法的增长率和性能上界、下界和紧界。 时间复杂度和空间复杂度: 学习如何分析算法在最坏情况、最好情况和平均情况下的时间消耗和内存占用。 递归和分治: 理解递归的思想,并学习如何分析递归算法的复杂度(如主定理)。 第五章:算法设计范式 分治法 (Divide and Conquer): 学习如何将问题分解为更小的子问题,独立解决后再将结果合并。经典示例包括归并排序(Merge Sort)和快速排序(Quick Sort)。 动态规划 (Dynamic Programming): 探索如何通过存储子问题的解来避免重复计算,从而解决具有重叠子问题和最优子结构的问题。我们将学习如何识别动态规划问题,并设计状态转移方程。经典示例包括斐波那契数列、背包问题和最长公共子序列。 贪心算法 (Greedy Algorithms): 学习如何通过每一步做出局部最优选择来期望获得全局最优解。我们将分析贪心算法的适用条件,并举例说明其在活动选择问题、霍夫曼编码等方面的应用。 回溯法 (Backtracking): 学习如何通过系统地搜索所有可能的解决方案来解决问题,并在发现某个路径无法通向有效解时进行“回溯”。示例将涵盖N皇后问题和迷宫求解。 第六章:排序与搜索算法 排序算法: 简单排序: 冒泡排序、选择排序、插入排序。分析它们的原理和时间复杂度。 高效排序: 归并排序、快速排序。深入讲解其分治思想和实现细节,以及在不同情况下的性能表现。 其他排序: 堆排序、计数排序、基数排序。介绍它们的特定应用场景和效率。 搜索算法: 线性搜索: 遍历整个数据结构查找目标元素。 二分搜索 (Binary Search): 在有序数据结构中进行高效查找,分析其对数时间复杂度。 第七章:图算法进阶 最短路径算法: Dijkstra算法: 求解单源最短路径问题(非负权边)。 Bellman-Ford算法: 求解单源最短路径问题(可带负权边),并检测负权回路。 Floyd-Warshall算法: 求解所有顶点对之间的最短路径。 最小生成树算法: Prim算法: 找到连接图中所有顶点的最小权重生成树。 Kruskal算法: 另一种求解最小生成树的方法,基于边的权重排序。 拓扑排序 (Topological Sort): 针对有向无环图(DAG)的顶点进行排序,使得对于任何有向边 u -> v,u 都排在 v 之前。 第八章:字符串算法与模式匹配 字符串匹配: 朴素字符串匹配: 简单的比较方法。 KMP算法 (Knuth-Morris-Pratt): 改进的字符串匹配算法,利用前缀和后缀信息避免不必要的比较。 Rabin-Karp算法: 基于哈希函数进行字符串匹配。 其他字符串处理: 简要介绍如编辑距离、最长公共前缀等相关概念。 学习本书将使您能够: 深刻理解各种数据结构的内在机制和优劣势。 能够根据具体问题场景,选择最适合的数据结构来组织和管理信息。 掌握多种经典的算法设计范式,并能灵活运用它们来解决实际计算问题。 熟练分析算法的时间和空间复杂度,从而优化程序性能。 构建出高效、可靠且可扩展的软件系统。 本书适用于计算机科学专业的学生、软件工程师以及任何对提升算法和数据结构能力感兴趣的读者。通过理论与实践相结合的学习,您将为在计算机科学领域取得更大的成就打下坚实的基础。