作者 |
乔纳森·E.斯坦哈特 伊恩·文斯·麦克洛克林 |
丛书名 |
华章程序员书库 |
出版社 |
机械工业出版社 |
ISBN |
9782109071594 |
简要 |
简介 |
内容简介书籍计算机书籍 ---------------------------8083845 - 计算机系统解密:从理解计算机到编写高效代码--------------------------- 本书分为三部分。第1部分探讨了计算机硬件,包括内部语言、组合逻辑、顺序逻辑、组成原理、系统结构、通信接口等。第二部分研究了在硬件上运行的软件的行为和表现。第三部分涉及编程的艺术--与他人合作写出好的程序。 ---------------------------8071113 - 计算机系统:嵌入式方法--------------------------- 这是一本从嵌入式角度探索计算硬件和软件原理的综合教科书。本书将逐步揭示如何在现实世界中运用这些计算原理构建计算机系统,从小型嵌入式设备到仓库大小的计算机集群,以及这些概念是如何通过互联网在全球范围内相互连接的。《计算机系统:嵌入式方法》首先会完整地讲述主要的硬件组件——包括处理器、内存、存储设备与性能加速器;接着又充分探讨操作系统、连接以及网络。通过此书,您将了解计算机硬件和软件是如何协同工作来支持无处不在的计算、物联网、移动计算技术以及最小到最大的应用和程序。 |
目录 |
[套装书具体书目] 8071113 - 计算机系统:嵌入式方法 - 9787111657224 - 机械工业出版社 - 定价 139 8083845 - 计算机系统解密:从理解计算机到编写高效代码 - 9787111689874 - 机械工业出版社 - 定价 129 ---------------------------8083845 - 计算机系统解密:从理解计算机到编写高效代码--------------------------- 译者序 前言 致谢 作者简介 审校者简介 引言1 第1章 计算机的内部语言12 1.1 什么是语言12 1.2 书面语言13 1.3 比特13 1.4 逻辑运算14 1.4.1 布尔代数14 1.4.2 德摩根定律15 1.5 用比特表示整数16 1.5.1 表示正数16 1.5.2 二进制加法18 1.5.3 表示负数20 1.6 表示实数23 1.6.1 定点表示法24 1.6.2 浮点表示法25 1.6.3 IEEE浮点标准26 1.7 二进制编码的十进制系统27 1.8 处理二进制数的简单方法27 1.8.1 八进制表示法27 1.8.2 十六进制表示法28 1.8.3 表示语境28 1.9 命名位组29 1.10 表示文本30 1.10.1 ASCII30 1.10.2 其他标准的演变32 1.10.3 UTF-832 1.11 用字符表示数字34 1.11.1 可打印字符引用编码34 1.11.2 Base64编码34 1.11.3 URL编码35 1.12 表示颜色35 1.12.1 增加透明度37 1.12.2 编码颜色38 1.13 本章小结39 第2章 组合逻辑40 2.1 数字计算机的案例40 2.1.1 模拟和数字之间的区别42 2.1.2 为什么尺寸对硬件很重要43 2.1.3 数字使设备更加稳定44 2.1.4 模拟世界中的数字44 2.1.5 为什么使用位而不是数字46 2.2 电学的简单入门47 2.2.1 用管道理解电47 2.2.2 电源开关50 2.3 为位构建硬件52 2.3.1 继电器52 2.3.2 真空管54 2.3.3 晶体管55 2.3.4 集成电路56 2.4 逻辑门57 2.4.1 利用迟滞现象提高抗噪声能力58 2.4.2 差分信号59 2.4.3 传播延迟60 2.4.4 输出的变化61 2.5 构建更复杂的电路63 2.5.1 制作加法器63 2.5.2 制作解码器65 2.5.3 制作多路输出选择器66 2.5.4 制作选择器66 2.6 本章小结68 第3章 时序逻辑69 3.1 表示时间69 3.1.1 振荡器70 3.1.2 时钟70 3.1.3 锁存器71 3.1.4 锁存器组成的门电路72 3.1.5 触发器73 3.1.6 计数器75 3.1.7 寄存器77 3.2 内存组织和寻址78 3.2.1 随机存取存储器80 3.2.2 只读存储器81 3.3 块设备83 3.4 闪存和固态磁盘驱动器85 3.5 检错和纠错86 3.6 硬件和软件87 3.7 本章小结88 第4章 计算机剖析89 4.1 内存89 4.2 输入输出91 4.3 中央处理器92 4.3.1 算术逻辑单元93 4.3.2 移位寄存器94 4.3.3 执行单元96 4.4 指令集97 4.4.1 指令97 4.4.2 寻址方式99 4.4.3 条件码指令99 4.4.4 分支100 4.4.5 最终指令集100 4.5 最终设计103 4.5.1 指令寄存器103 4.5.2 数据通路和控制信号103 4.5.3 流量控制104 4.6 RISC和CISC指令集107 4.7 图形处理单元108 4.8 本章小结108 第5章 计算机架构109 5.1 基本架构元素109 5.1.1 处理器核心110 5.1.2 微处理器和微型计算机110 5.2 过程、子程序和函数111 5.3 堆栈113 5.4 中断116 5.5 相对寻址118 5.6 内存管理单元119 5.7 虚拟内存121 5.8 系统和用户空间121 5.9 存储器层次和性能122 5.10 协处理器123 5.11 在内存中排列数据124 5.12 运行程序125 5.13 内存功耗126 5.14 本章小结126 第6章 通信故障127 6.1 低电平I/O127 6.1.1 I/O端口128 6.1.2 按下按钮129 6.1.3 让灯光亮起131 6.1.4 灯光,动作……132 6.1.5 奇思妙想133 6.1.6 2n种灰色134 6.1.7 正交134 6.1.8 并行通信135 6.1.9 串行通信136 6.1.10 捕捉一个波138 6.1.11 通用串行总线139 6.2 网络140 6.2.1 现代局域网141 6.2.2 因特网141 6.3 数字世界中的模拟143 6.3.1 数模转换143 6.3.2 模数转换145 6.3.3 数字音频148 6.3.4 数字图像154 6.3.5 视频156 6.4 人机界面设备157 6.4.1 终端157 6.4.2 图形终端158 6.4.3 矢量图159 6.4.4 光栅图160 6.4.5 键盘和鼠标161 6.5 本章小结161 第7章 组织数据162 7.1 原始数据类型162 7.2 数组164 7.3 位图165 7.4 字符串166 7.5 复合数据类型167 7.6 单链表168 7.7 动态内存分配173 7.8 更有效的内存分配174 7.9 垃圾收集175 7.10 双链表175 7.11 层次数据结构176 7.12 块存储179 7.13 数据库181 7.14 索引182 7.15 移动数据183 7.16 矢量I/O186 7.17 面向对象存在的问题187 7.18 排序188 7.19 哈希算法189 7.20 效率与性能191 7.21 本章小结192 第8章 语言处理193 8.1 汇编语言193 8.2 高级语言194 8.3 结构化程序设计195 8.4 词法分析196 8.4.1 状态机198 8.4.2 正则表达式199 8.5 从单词到句子201 8.6 每日语言俱乐部203 8.7 语法树203 8.8 解释器205 8.9 编译器207 8.10 优化209 8.11 小心硬件210 8.12 本章小结211 第9章 Web浏览器212 9.1 标记语言213 9.2 统一资源定位符214 9.3 HTML文档214 9.4 文档对象模型216 9.4.1 树结构解析216 9.4.2 文档对象模型解释217 9.5 串联样式表218 9.6 XML和它的朋友们221 9.7 JavaScript224 9.8 jQuery226 9.9 SVG228 9.10 HTML5228 9.11 JSON228 9.12 本章小结230 第10章 应用程序和系统程序设计231 10.1 猜动物程序版本1:HTML和JavaScript233 10.1.1 应用程序级框架234 10.1.2 Web页面主体235 10.1.3 JavaScript程序236 10.1.4 CSS238 10.2 猜动物程序版本2:C语言239 10.2.1 终端和命令行239 10.2.2 构建程序240 10.2.3 终端和设备驱动程序240 10.2.4 上下文切换240 10.2.5 标准I/O242 10.2.6 循环缓冲区243 10.2.7 通过合适的抽象实现更好的代码244 10.2.8 一些技术细节244 10.2.9 缓冲区溢出245 10.2.10 C语言程序246 10.2.11 训练251 10.3 本章小结252 第11章 捷径和近似法253 11.1 表格查找253 11.1.1 转换253 11.1.2 纹理映射254 11.1.3 字符分类256 11.2 整数方法258 11.2.1 直线261 11.2.2 曲线266 11.2.3 多项式268 11.3 递归细分269 11.3.1 螺旋线269 11.3.2 构造几何学272 11.3.3 移位和屏蔽278 11.4 更多地回避数学运算279 11.4.1 幂级数近似279 11.4.2 CORDIC算法280 11.5 随机事物284 11.5.1 空间填充曲线284 11.5.2 L系统286 11.5.3 随机287 11.5.4 量化288 11.6 本章小结297 第12章 死锁和竞态条件298 12.1 竞态条件是什么298 12.2 共享资源299 12.3 进程和线程299 12.4 锁301 12.4.1 事务和粒度302 12.4.2 等待锁302 12.4.3 死锁303 12.4.4 短期锁的实现303 12.4.5 长期锁的实现304 12.5 浏览器JavaScript304 12.6 异步函数和承诺307 12.7 本章小结311 第13章 安全性312 13.1 安全和隐私概述313 13.1.1 威胁模型313 13.1.2 信任314 13.1.3 物理安全315 13.1.4 通信安全316 13.1.5 现代社会317 13.1.6 元数据和监控318 13.1.7 社会背景319 13.1.8 身份验证与授权320 13.2 密码学321 13.2.1 隐写术321 13.2.2 替代密码322 13.2.3 换位密码324 13.2.4 更复杂的密码325 13.2.5 一次一密325 13.2.6 密钥交换问题326 13.2.7 公钥密码326 13.2.8 前向加密327 13.2.9 加密哈希函数327 13.2.10 数字签名328 13.2.11 公钥基础设施328 13.2.12 区块链328 13.2.13 密码管理329 13.3 软件卫生330 13.3.1 保护好正确的东西330 13.3.2 仔细检查你的逻辑330 13.3.3 检查错误331 13.3.4 最小化攻击面331 13.3.5 待在界内331 13.3.6 生成合适的随机数是有难度的332 13.3.7 了解代码333 13.3.8 极端聪明是你的敌人335 13.3.9 明白什么是可见的335 13.3.10 不要过度收集335 13.3.11 不要一直存储335 13.3.12 动态内存分配不是你的朋友336 13.3.13 内存垃圾回收也不是你的朋友337 13.3.14 数据作为代码338 13.4 本章小结340 第14章 机器智能341 14.1 概述342 14.2 机器学习343 14.2.1 贝叶斯344 14.2.2 高斯345 14.2.3 索贝尔348 14.2.4 Canny351 14.2.5 特征提取352 14.2.6 神经网络354 14.2.7 使用机器学习数据358 14.3 人工智能359 14.4 大数据361 14.5 本章小结363 第15章 现实世界的考虑364 15.1 价值主张364 15.2 来龙去脉366 15.2.1 短暂的历史366 15.2.2 开源软件368 15.2.3 创意共享370 15.2.4 可移植性的兴起370 15.2.5 软件包管理371 15.2.6 容器371 15.2.7 Java371 15.2.8 Node.js373 15.2.9 云计算373 15.2.10 虚拟机373 15.2.11 便携式设备374 15.3 编程环境374 15.3.1 你有工作经验吗374 15.3.2 学会估计374 15.3.3 调度项目375 15.3.4 决策376 15.3.5 与不同个性的人一起工作376 15.3.6 了解职场文化377 15.3.7 做出明智的选择378 15.4 开发方法378 15.5 项目设计379 15.5.1 把想法写下来379 15.5.2 快速原型发展法380 15.5.3 接口设计380 15.5.4 重用代码或编写自己的代码383 15.6 项目开发383 15.6.1 谈话384 15.6.2 成年人与计算机的关系384 15.6.3 终端和脚本384 15.6.4 文本编辑器385 15.6.5 可移植的代码385 15.6.6 源控制386 15.6.7 测试387 15.6.8 bug报告和跟踪387 15.6.9 重构387 15.6.10 维护388 15.7 与时俱进388 15.8 修复,不要再创造389 15.9 本章小结390 ---------------------------8071113 - 计算机系统:嵌入式方法--------------------------- 出版者的话 译者序 前言 致谢 关于作译者 第1章 引言1 1.1 计算机的进化1 1.2 进化过程1 1.3 计算机发展阶段划分4 1.3.1 第一代计算机4 1.3.2 第二代计算机5 1.3.3 第三代计算机5 1.3.4 第四代计算机6 1.3.5 第五代计算机7 1.4 云、普适、网格和超并行计算机7 1.5 未来8 1.6 小结10 第2章 基础知识11 2.1 计算机组成11 2.1.1 Flynn分类法11 2.1.2 连接方式12 2.1.3 计算机结构层次视图13 2.2 计算机基本原理13 2.3 数字格式16 2.3.1 无符号二进制16 2.3.2 原码17 2.3.3 反码17 2.3.4 补码17 2.3.5 移码18 2.3.6 BCD码19 2.3.7 定点数表示法19 2.3.8 符号扩展20 2.4 算术运算20 2.4.1 加法20 2.4.2 并行进位传递加法器20 2.4.3 超前进位22 2.4.4 减法22 2.5 乘法24 2.5.1 加法迭代法24 2.5.2 部分积方法25 2.5.3 移位加方法27 2.5.4 Booth和Robertson方法27 2.6 除法29 2.7 定点数格式的运算30 2.7.1 定点数的运算31 2.7.2 定点数的乘除32 2.8 浮点数32 2.8.1 广义浮点数33 2.8.2 IEEE754浮点标准33 2.8.3 IEEE754标准模式34 2.8.4 IEEE754数的范围36 2.9 浮点数处理38 2.9.1 IEEE754数的加减运算39 2.9.2 IEEE754数的乘除运算41 2.9.3 IEEE754中间格式41 2.9.4 舍入42 2.10 小结42 思考题43 第3章 CPU基础45 3.1 什么是计算机45 3.2 让计算机为你服务45 3.2.1 程序存储46 3.2.2 存储架构46 3.2.3 程序传输47 3.2.4 控制单元48 3.2.5 微指令52 3.2.6 RISC和CISC的对比53 3.2.7 处理器实例——ARM55 3.2.8 关于ARM的更多内容56 3.3 指令处理56 3.3.1 指令集57 3.3.2 取指和译码59 3.3.3 压缩指令集63 3.3.4 寻址模式65 3.3.5 堆栈机和逆波兰表示法67 3.4 数据处理68 3.4.1 数据的格式和表达68 3.4.2 数据流71 3.4.3 数据存储72 3.4.4 内部数据72 3.4.5 数据处理73 3.5 自顶向下方法75 3.5.1 计算机的能力75 3.5.2 性能衡量和统计76 3.5.3 性能评估78 3.6 小结79 思考题80 第4章 处理器内部组成82 4.1 内部总线结构82 4.1.1 程序员的角度82 4.1.2 分解互联排列83 4.1.3 ADSP21xx总线排列84 4.1.4 数据与程序同时访存84 4.1.5 双总线体系结构86 4.1.6 单总线体系结构87 4.2 算术逻辑单元88 4.2.1 ALU功能88 4.2.2 ALU设计89 4.3 内存管理单元91 4.3.1 对虚拟存储的需求91 4.3.2 MMU操作91 4.3.3 退回算法93 4.3.4 内部存储碎片和片段93 4.3.5 外部碎片94 4.3.6 改进的MMU95 4.3.7 内存保护96 4.4 cache97 4.4.1 直接相联cache98 4.4.2 组相联cache99 4.4.3 全相联cache100 4.4.4 局部性原则100 4.4.5 cache替换算法102 4.4.6 cache性能104 4.4.7 cache一致性105 4.5 协处理器107 4.6 浮点运算单元107 4.7 SIMD流指令扩展和多媒体扩展109 4.7.1 MMX109 4.7.2 MMX实现110 4.7.3 MMX的使用111 4.7.4 SIMD流指令扩展111 4.7.5 使用SSE和MMX111 4.8 嵌入式系统中的协处理112 4.9 小结112 思考题113 第5章 提高CPU性能116 5.1 加速116 5.2 流水线117 5.2.1 多功能流水线118 5.2.2 动态流水线119 5.2.3 改变流水线模式119 5.2.4 数据相关冒险121 5.2.5 条件冒险122 5.2.6 条件分支123 5.2.7 编译时流水线补偿125 5.2.8 相对地址分支126 5.2.9 流水线的指令集补偿127 5.2.10 运行时流水线补偿128 5.3 复杂指令集和精简指令集130 5.4 超标量体系结构130 5.4.1 简单超标量130 5.4.2 多发送超标量132 5.4.3 超标量的性能133 5.5 每周期的指令数133 5.5.1 不同体系结构的IPC133 5.5.2 IPC度量134 5.6 硬件加速器135 5.6.1 零开销循环135 5.6.2 地址处理硬件137 5.6.3 影子寄存器140 5.7 分支预测140 5.7.1 分支预测的必要性141 5.7.2 单T位预测器142 5.7.3 双位预测器143 5.7.4 计数器和移位器预测器145 5.7.5 局部分支预测器145 5.7.6 全局分支预测器148 5.7.7 G选择预测器149 5.7.8 G共享预测器150 5.7.9 混合预测器151 5.7.10 分支目标缓冲152 5.7.11 基本代码段153 5.7.12 分支预测总结154 5.8 并行机器155 5.8.1 SISD向MIMD的演变157 5.8.2 为提高性能而采用并行159 5.8.3 其他并行处理160 5.9 Tomasulo算法163 5.9.1 Tomasulo算法的原理163 5.9.2 Tomasulo系统的例子164 5.9.3 嵌入式系统中的Tomasulo算法167 5.10 超长指令架构集168 5.10.1 什么是VLIW168 5.10.2 VLIW的优势169 5.10.3 VLIW的瓶颈170 5.10.4 与超标量处理器的比较170 5.11 小结171 思考题171 第6章 外部总线174 6.1 总线接口174 6.1.1 总线控制信号175 6.1.2 直接存储器存取175 6.2 并行总线规范176 6.3 标准接口177 6.3.1 系统控制接口177 6.3.2 系统数据总线178 6.3.3 输入/输出总线182 6.3.4 外设器件总线182 6.3.5 与网络设备的接口183 6.4 实时性问题183 6.4.1 外部激励184 6.4.2 中断184 6.4.3 实时性定义184 6.4.4 时间范围参数185 6.4.5 硬件体系结构对实时操作系统的支持186 6.5 中断和中断处理187 6.5.1 中断的重要性187 6.5.2 中断过程187 6.5.3 高级中断处理191 6.5.4 共享中断191 6.5.5 可重入代码192 6.5.6 软件中断192 6.6 嵌入式无线连接192 6.6.1 无线技术192 6.6.2 无线接口194 6.6.3 无线相关问题194 6.7 小结194 思考题195 第7章 实用嵌入式CPU198 7.1 概述198 7.2 微处理器不只是核198 7.3 功能需求200 7.4 时钟203 7.5 时钟与功耗205 7.5.1 传输延迟206 7.5.2 电流相关问题206 7.5.3 时钟问题解决方法207 7.5.4 低电压设计207 7.6 存储208 7.6.1 早期的计算机存储208 7.6.2 只读存储器209 7.6.3 随机存取存储器213 7.7 分页与重叠220 7.8 嵌入式系统中的存储221 7.8.1 非易失存储器222 7.8.2 其他存储器224 7.9 测试和验证225 7.9.1 集成电路设计和制造问题225 7.9.2 BIST226 7.9.3 JTAG228 7.10 错误检测和纠正230 7.11 看门狗定时器和复位监测233 7.12 逆向工程235 7.12.1 逆向工程过程236 7.12.2 详细的物理布局239 7.13 防止逆向工程242 7.13.1 存储程序的被动模糊243 7.13.2 可编程逻辑家族244 7.13.3 主动RE防范244 7.13.4 主动RE防范分类245 7.14 软核处理器246 7.14.1 微处理器不仅仅是核心246 7.14.2 软核处理器的优点246 7.15 硬件软件协同设计248 7.16 商业处理器内核251 7.17 小结252 思考题252 第8章 编程254 8.1 运行一个程序254 8.1.1 执行的含义255 8.1.2 注意事项257 8.2 编写程序258 8.2.1 编译型语言258 8.2.2 解释型语言261 8.3 UNIX编程模型263 8.3.1 shell263 8.3.2 重定向和数据流264 8.3.3 实用软件266 8.4 小结266 思考题266 第9章 操作系统268 9.1 操作系统的含义268 9.2 为什么需要操作系统268 9.2.1 操作系统的特征269 9.2.2 操作系统的类型270 9.3 操作系统的作用271 9.3.1 资源管理271 9.3.2 虚拟机271 9.3.3 CPU时间272 9.3.4 内存管理273 9.3.5 存储和归档274 9.3.6 保护和错误处理274 9.4 操作系统的结构275 9.4.1 分层操作系统276 9.4.2 客户端-服务器操作系统277 9.5 启动277 9.5.1 从并行闪存启动278 9.5.2 从HDD/SSD启动279 9.5.3 启动之后280 9.6 进程281 9.7 调度283 9.8 存储与文件系统286 9.8.1 二级存储286 9.8.2 文件系统的作用289 9.8.3 什么是文件系统291 9.8.4 备份297 9.9 小结298 思考题298 第10章 连接性300 10.1 连接的原因与方法300 10.1.1 一对一通信300 10.1.2 一对多通信301 10.1.3 包交换302 10.1.4 简单通信拓扑303 10.2 系统要求304 10.2.1 分组化304 10.2.2 编码与解码305 10.2.3 传输305 10.2.4 接收305 10.2.5 错误控制306 10.2.6 连接管理309 10.3 可扩展性、效率与重复利用310 10.4 OSI分层311 10.5 拓扑与架构311 10.5.1 分层网络312 10.5.2 主从架构312 10.5.3 对等架构313 10.5.4 点对点连接313 10.5.5 移动性与切换313 10.6 小结314 思考题314 第11章 网络系统316 11.1 因特网316 11.1.1 因特网的历史317 11.1.2 因特网治理317 11.2 TCP/IP和IP层模型318 11.3 以太网概述321 11.3.1 以太网数据格式322 11.3.2 以太网封装323 11.3.3 以太网载波侦听324 11.4 网络层325 11.4.1 IP地址325 11.4.2 网络数据包格式326 11.4.3 路由327 11.4.4 单播与多播327 11.4.5 任播328 11.4.6 命名328 11.4.7 域名服务器329 11.5 传输层331 11.5.1 端口号331 11.5.2 UDP332 11.5.3 TCP332 11.5.4 UDP与TCP对比333 11.6 其他信息333 11.6.1 地址解析协议333 11.6.2 控制信息334 11.7 无线连通性334 11.7.1 WiFi334 11.7.2 WiMax335 11.7.3 蓝牙335 11.7.4 ZigBee336 11.7.5 近场通信336 11.8 网络量表336 11.9 小结337 思考题337 第12章 未来338 12.1 单比特结构338 12.1.1 比特-串行加法339 12.1.2 比特-串行减法340 12.1.3 比特-串行逻辑和处理340 12.2 多并行机器341 12.2.1 小型CPU集群341 12.2.2 并行和集群处理注意事项345 12.2.3 互连策略345 12.3 异步处理器347 12.3.1 数据流控制348 12.3.2 避免管道冒险349 12.4 替代数字格式系统349 12.4.1 多值逻辑350 12.4.2 有符号数字表示350 12.5 光学计算353 12.5.1 电-光全加器353 12.5.2 电-光底板354 12.6 是科幻小说还是未来的现实355 12.6.1 分布式计算356 12.6.2 湿件356 12.7 小结357 附录A 标准内存大小表示方法358 附录B 标准逻辑门360 索引361 |