展开全部

主编推荐语

深入软件开发原理,掌握匠艺模型,提高编程技能,学习计算机组织和机器指令。

内容简介

本书第一版深入介绍了从开发方法、生产力到面向对象的设计需求和系统文档的方方面面。通过本书,你将学习到:为什么遵循软件匠艺模型可以让你做到 ;如何利用可追溯性来加强文档的一致性;如何通过用例分析来创建自己的UML需求;如何利用IEEE文档标准开发出 好的软件。通过对高质量软件开发中技能、态度和道德方面的深入讲解,本书揭示了如何将工程原理应用于编程的正确方法。与备受推崇的第一版一样,《深入理解计算机》第二版涵盖了机器组织和计算机科学主题,例如CPU,机器体系结构,内存和缓存组织,I / O和外围设备,以及机器指令的解码和执行如何影响软件性能。 此版本已更新,以涵盖64位计算机、较新的外围设备、较大的内存系统、大规模SSD和较新的CPU(如个人计算机和平板电脑中使用的CPU)。

目录

  • 版权信息
  • 内容简介
  • 推荐序 给自己从底层重修的胆量
  • 推荐序2
  • 译者序
  • 关于作者
  • 关于技术评审
  • 致谢
  • 1 编写卓越代码须知
  • 1.1 《编程卓越之道》系列
  • 1.2 本书涵盖的主题
  • 1.3 阅读本书的前提
  • 1.4 卓越代码的特征
  • 1.5 本书要求的环境
  • 1.6 额外建议
  • 1.7 更多信息
  • 2 数字表示
  • 2.1 什么是数字
  • 2.2 计数系统
  • 2.2.1 十进制位值计数系统
  • 2.2.2 底数(基数)
  • 2.2.3 二进制计数系统
  • 2.2.4 十六进制计数系统
  • 2.2.5 八进制计数系统
  • 2.3 数字/字符串转换
  • 2.4 内部数字表示形式
  • 2.4.1 位
  • 2.4.2 位串
  • 2.5 有符号和无符号数
  • 2.6 二进制数的属性
  • 2.7 符号扩展、零扩展和收缩
  • 2.8 饱和操作
  • 2.9 二进制编码的十进制表示
  • 2.10 定点表示形式
  • 2.11 比例数字格式
  • 2.12 有理数表示形式
  • 2.13 更多信息
  • 3 二进制算术运算和位运算
  • 3.1 二进制和十六进制数字的算术运算
  • 3.1.1 二进制加法
  • 3.1.2 二进制减法
  • 3.1.3 二进制乘法
  • 3.1.4 二进制除法
  • 3.2 位的逻辑运算
  • 3.3 二进制数值和位串的逻辑运算
  • 3.4 有用的位运算
  • 3.4.1 使用AND运算判断位串中的一位
  • 3.4.2 使用AND运算判断多个位为零或非零
  • 3.4.3 比较二进制字符串中的多个位
  • 3.4.4 使用AND运算创建模n计数器
  • 3.5 移位和旋转
  • 3.6 位字段和打包数据
  • 3.7 数据的打包和解包
  • 3.8 更多信息
  • 4 浮点表示形式
  • 4.1 浮点运算简介
  • 4.2 IEEE浮点格式
  • 4.2.1 单精度浮点格式
  • 4.2.2 双精度浮点格式
  • 4.2.3 扩展精度浮点格式
  • 4.2.4 四精度浮点格式
  • 4.3 规约形式与非规约形式
  • 4.4 舍入
  • 4.5 特殊的浮点值
  • 4.6 浮点数异常
  • 4.7 浮点运算
  • 4.7.1 浮点表示形式
  • 4.7.2 浮点数的加减法
  • 4.7.3 浮点数的乘除法
  • 4.8 更多信息
  • 5 字符表示形式
  • 5.1 字符数据
  • 5.1.1 ASCII字符集
  • 5.1.2 EBCDIC字符集
  • 5.1.3 双字节字符集
  • 5.1.4 Unicode字符集
  • 5.1.5 Unicode码位
  • 5.1.6 Unicode编码平面
  • 5.1.7 代用码位
  • 5.1.8 字形、字符和字素簇
  • 5.1.9 Unicode规范和规范等价性
  • 5.1.10 Unicode编码
  • 5.1.11 Unicode组合字符
  • 5.2 字符串
  • 5.2.1 字符串格式
  • 5.2.2 静态字符串、伪动态字符串和动态字符串
  • 5.2.3 字符串的引用计数
  • 5.2.4 Delphi字符串
  • 5.2.5 自定义字符串格式
  • 5.3 字符集数据类型
  • 5.3.1 字符集的幂集表示形式
  • 5.3.2 字符集的列表表示形式
  • 5.4 设计自定义字符集
  • 5.4.1 设计高效的字符集
  • 5.4.2 数字字符的编码分组
  • 5.4.3 字母字符分组
  • 5.4.4 比较字母字符
  • 5.4.5 其他字符分组
  • 5.5 更多信息
  • 6 内存结构和访问
  • 6.1 基本系统组件
  • 6.1.1 系统总线
  • 6.2 内存的物理结构
  • 6.2.1 8位数据总线
  • 6.2.2 16位数据总线
  • 6.2.3 32位数据总线
  • 6.2.4 64位数据总线
  • 6.2.5 非80x86处理器对小单位内存的访问
  • 6.3 大端序与小端序结构
  • 6.4 系统时钟
  • 6.4.1 内存访问和系统时钟
  • 6.4.2 等待状态
  • 6.4.3 缓存
  • 6.5 CPU的内存访问模式
  • 6.5.1 直接内存寻址模式
  • 6.5.2 间接寻址模式
  • 6.5.3 变址寻址模式
  • 6.5.4 比例变址寻址模式
  • 6.6 更多信息
  • 7 复合数据类型与内存对象
  • 7.1 指针类型
  • 7.1.1 指针的实现
  • 7.1.2 指针与动态内存分配
  • 7.1.3 指针操作与指针运算
  • 7.2 数组
  • 7.2.1 数组声明
  • 7.2.2 内存中的数组表示形式
  • 7.2.3 访问数组元素
  • 7.2.4 多维数组
  • 7.3 记录/结构体
  • 7.3.1 Pascal/Delphi记录
  • 7.3.2 C/C++记录
  • 7.3.3 HLA记录
  • 7.3.4 Swift记录(元组)
  • 7.3.5 记录的内存存储
  • 7.4 判别联合
  • 7.4.1 C/C++联合
  • 7.4.2 Pascal/Delphi联合
  • 7.4.3 Swift联合
  • 7.4.4 HLA联合
  • 7.4.5 联合的内存存储
  • 7.4.6 联合的其他用途
  • 7.5 类
  • 7.5.1 继承
  • 7.5.2 类构造函数
  • 7.5.3 多态
  • 7.5.4 抽象方法和抽象基类
  • 7.6 C++类
  • 7.6.1 C++中的抽象成员函数和类
  • 7.6.2 C++的多重继承
  • 7.7 Java类
  • 7.8 Swift类
  • 7.9 协议与接口
  • 7.10 泛型和模板
  • 7.11 更多信息
  • 8 布尔逻辑与数字设计
  • 8.1 布尔代数
  • 8.1.1 布尔运算符
  • 8.1.2 布尔假设
  • 8.1.3 布尔运算符优先级
  • 8.2 布尔函数与真值表
  • 8.3 函数编号
  • 8.4 布尔表达式的代数运算
  • 8.5 规范形式
  • 8.5.1 极小项和规范形式与真值表
  • 8.5.2 使用代数方法得到极小项和规范形式
  • 8.5.3 极大项积规范形式
  • 8.6 布尔函数简化
  • 8.7 这和计算机有什么关系
  • 8.7.1 电路与布尔函数
  • 8.7.2 组合电路
  • 8.7.3 时序与时钟逻辑
  • 8.8 更多信息
  • 9 CPU体系结构
  • 9.1 CPU设计基础
  • 9.2 指令的解码与执行:随机逻辑与微码
  • 9.3 指令执行详解
  • 9.3.1 mov指令
  • 9.3.2 add指令
  • 9.3.3 jnz指令
  • 9.3.4 loop指令
  • 9.4 RISC还是CISC:通过执行更多更快的指令来提高性能
  • 9.5 提高处理速度的关键:并行
  • 9.5.1 功能单元
  • 9.5.2 预取队列
  • 9.5.3 影响预取队列性能的情况
  • 9.5.4 同时执行多条指令的流水线
  • 9.5.5 指令缓存:提供多条内存访问通路
  • 9.5.6 流水线冒险
  • 9.5.7 超标量运算:并行执行指令
  • 9.5.8 乱序执行
  • 9.5.9 寄存器重命名
  • 9.5.10 甚长指令字体系结构
  • 9.5.11 并行处理
  • 9.5.12 多处理
  • 9.6 更多信息
  • 10 指令集体系结构
  • 10.1 指令集设计的重要性
  • 10.2 指令设计的基本目标
  • 10.2.1 操作码的长度选择
  • 10.2.2 规划未来
  • 10.2.3 选择指令
  • 10.2.4 分配指令操作码
  • 10.3 假想处理器Y86
  • 10.3.1 Y86的限制
  • 10.3.2 Y86指令
  • 10.3.3 Y86的寻址模式
  • 10.3.4 Y86指令编码
  • 10.3.5 Y86指令编码示例
  • 10.3.6 扩展Y86指令集
  • 10.4 80x86指令编码
  • 10.4.1 指令操作码的编码
  • 10.4.2 add指令编码的例子
  • 10.4.3 x86的立即(常量)操作数编码
  • 10.4.4 8位、16位和32位操作数的编码
  • 10.4.5 64位操作数编码
  • 10.4.6 指令的替代编码
  • 10.5 指令集设计对程序员的意义
  • 10.6 更多信息
  • 11 内存体系结构与组织
  • 11.1 内存层次结构
  • 11.2 内存层次结构的工作原理
  • 11.3 内存子系统的性能差距
  • 11.4 缓存体系结构
  • 11.4.1 直接映射缓存
  • 11.4.2 全相联缓存
  • 11.4.3 n路组相联缓存
  • 11.4.4 缓存行置换策略
  • 11.4.5 缓存写入策略
  • 11.4.6 缓存使用与软件
  • 11.5 NUMA与外设
  • 11.6 虚拟内存、内存保护与分页
  • 11.7 编写理解内存层次结构的软件
  • 11.8 运行时的内存结构
  • 11.8.1 静态对象与动态对象,绑定与生命期
  • 11.8.2 代码段、只读数据段与常量段
  • 11.8.3 静态变量段
  • 11.8.4 存储变量段
  • 11.8.5 栈
  • 11.8.6 堆与动态内存分配
  • 11.9 更多信息
  • 12 输入与输出
  • 12.1 连接CPU与外界
  • 12.2 端口和系统连接的其他方式
  • 12.3 输入/输出机制
  • 12.3.1 内存映射输入/输出
  • 12.3.2 I/O映射输入/输出
  • 12.3.3 直接内存访问
  • 12.4 输入/输出速度等级
  • 12.5 系统总线与数据传输速率
  • 12.5.1 PCI总线的性能
  • 12.5.2 ISA总线的性能
  • 12.5.3 AGP总线
  • 12.6 缓冲
  • 12.7 握手
  • 12.8 I/O端口超时
  • 12.9 中断与轮询式I/O
  • 12.10 保护模式操作与设备驱动程序
  • 12.10.1 设备驱动模型
  • 12.10.2 与设备驱动程序通信
  • 12.11 更多信息
  • 13 计算机外设总线
  • 13.1 小型计算机系统接口
  • 13.1.1 限制
  • 13.1.2 改进
  • 13.1.3 SCSI协议
  • 13.1.4 SCSI的优点
  • 13.2 IDE/ATA接口
  • 13.2.1 SATA接口
  • 13.2.2 光纤通道
  • 13.3 通用串行总线
  • 13.3.1 USB设计
  • 13.3.2 USB性能
  • 13.3.3 USB传输的类型
  • 13.3.4 USB-C
  • 13.3.5 USB设备驱动程序
  • 13.4 更多信息
  • 14 大容量存储设备与文件系统
  • 14.1 磁盘驱动器
  • 14.1.1 软盘驱动器
  • 14.1.2 硬盘驱动器
  • 14.1.3 RAID系统
  • 14.1.4 光驱
  • 14.1.5 CD、DVD与蓝光驱动器
  • 14.2 磁带驱动器
  • 14.3 闪存
  • 14.4 RAM盘
  • 14.5 固态硬盘
  • 14.6 混合硬盘
  • 14.7 大容量存储设备上的文件系统
  • 14.7.1 顺序文件系统
  • 14.7.2 高效的文件分配策略
  • 14.8 编写操作大容量存储设备数据的软件
  • 14.8.1 文件访问的性能
  • 14.8.2 同步与异步I/O
  • 14.8.3 I/O类型的影响
  • 14.8.4 内存映射文件
  • 14.9 更多信息
  • 15 丰富多彩的输入/输出设备
  • 15.1 探索特定PC上的外设
  • 15.1.1 键盘
  • 15.1.2 标准PC并口
  • 15.1.3 串口
  • 15.2 鼠标、触控板及其他定点设备
  • 15.3 操纵杆与游戏控制器
  • 15.4 声卡
  • 15.4.1 音频接口外设如何产生声音
  • 15.4.2 音频与MIDI文件格式
  • 15.4.3 音频设备编程
  • 15.5 更多信息
  • 后记:运用底层语言思想,编写高级语言代码
展开全部

评分及书评

评分不足
2个评分
  • 用户头像
    给这本书评了
    5.0
    非常好的计算机基础知识

    这本书前半部分介绍了很多计算机基础的原理,后半部分外设设备属于扩展阅读部分,对于每一个主题都没有特别深入探讨,当然一本书探讨所有主题的详细内容肯定是不现实的,对于读者来说这样的深度刚好够用,如果还想进一步学习,可以阅读相关的专业书籍。计算机基础知识的重要性常常被高级编程语言的便利性给掩盖了,但是对于高级工程师了解计算机基础知识是必须的,否则一旦涉及性能调优等偏底层的场景就无从下手了,而且对于很多编程领域的复杂主题例如异步、多线程、并发等,都需要了解底层知识才能真正理解这些概念。所以永远不要低估底层基础知识的价值,否则未来终会为此付出代价

      转发
      评论

    出版方

    电子工业出版社

    电子工业出版社成立于1982年10月,是国务院独资、工信部直属的中央级科技与教育出版社,是专业的信息技术知识集成和服务提供商。经过三十多年的建设与发展,已成为一家以科技和教育出版、期刊、网络、行业支撑服务、数字出版、软件研发、软科学研究、职业培训和教育为核心业务的现代知识服务集团。出版物内容涵盖了电子信息技术的各个分支及工业技术、经济管理、科普与少儿、社科人文等领域,综合出版能力位居全国出版行业前列。