万本电子书0元读

万本电子书0元读

顶部广告

深入解析计算机系统电子书

【权威作者与专业翻译】国外计算机领域专家联袂撰写,精准传递核心知识。 【分层递体系清晰】按抽象层次编排内容,从 C 语言基础逐步延伸至硬件架构、汇编语言、并行计算等,呈现完整计算机系统全景图。 【软硬件全覆盖】涵盖计算机组成、操作系统、内存管理、代码优化、多核编程等核心主题,兼顾理论与实践,满足多维度学习需求。 【实用工具与安全案例】详解 GDB、Valgrind 等调试工具,剖析缓存区溢出等经典安全问题,助力提升工程实践与问题排查能力。

售       价:¥

纸质售价:¥140.20购买纸书

2人正在读 | 0人评论 6.5

温馨提示:数字商品不支持退换货,不提供源文件,不支持导出打印

为你推荐

  • 读书简介
  • 目录
  • 累计评论(条)
  • 读书简介
  • 目录
  • 累计评论(条)
计算机系统是计算机专业的常见课程,也是学习编程过程中的重要学习内容。本书是计算机系统的门图书,介绍了现代计算机系统的主要硬件和软件。本书按抽象层次设置各章节,从常用于编写操作系统的 C 语言基础知识逐步衍生,先介绍现代计算机的组成、结构、操作系统原理、汇编语言,再介绍各种计算机体系结构的代码优化方法、使用共享内存实现并行计算、多核 CPU环境下的内存管理等。 本书适合作为计算机系统相关课程的教材,也适合有编程基础的人阅读。<br/>【推荐语】<br/>【权威作者与专业翻译】国外计算机领域专家联袂撰写,精准传递核心知识。 【分层递体系清晰】按抽象层次编排内容,从 C 语言基础逐步延伸至硬件架构、汇编语言、并行计算等,呈现完整计算机系统全景图。 【软硬件全覆盖】涵盖计算机组成、操作系统、内存管理、代码优化、多核编程等核心主题,兼顾理论与实践,满足多维度学习需求。 【实用工具与安全案例】详解 GDB、Valgrind 等调试工具,剖析缓存区溢出等经典安全问题,助力提升工程实践与问题排查能力。 【适配多场景使用】既可作为计算机系统相关课程教材,也适合有编程基础的从业者自学,部分章节可作为高级课程背景阅读材料。 【资源与时俱】内容紧跟计算机领域发展,涵盖云计算、MapReduce 等前沿主题,适配多核时代需求。<br/>【作者】<br/>苏珊娜·J. 马修斯,西军校计算机科学副教授。 蒂亚·纽霍尔,斯沃斯莫尔学院计算机科学教授。 凯文·C. 韦布,斯沃斯莫尔学院计算机科学副教授。<br/>
目录展开

版 权

版权声明

内 容 提 要

译 者 序

致 谢

前 言

引 言

资源与支持

第1章 靠近C,靠近C,靠近美丽的C

1.1 开始使用C编程

1.1.1 编译和运行C程序

1.1.2 C类型

1.2 输入和输出(函数printf和scanf)

1.2.1 printf函数

1.2.2 scanf函数

1.3 条件和循环

1.3.1 C中的布尔值

1.3.2 C中的循环

1.4 函数

1.5 数组和字符串

1.5.1 数组介绍

1.5.2 数组访问方法

1.5.3 数组和函数

1.5.4 C字符串和字符串库介绍

1.6 结构体

1.6.1 定义结构体类型

1.6.2 声明结构体类型的变量

1.6.3 访问字段值

1.6.4 向函数传递结构体

1.7 总结

第2章 深入理解C语言

2.1 程序内存的组成部分和作用域

2.2 C指针变量

指针变量

2.3 指针与函数

2.4 动态内存分配

2.4.1 堆内存

2.4.2 函数malloc和free

2.4.3 动态分配数组和字符串

2.4.4 指向堆内存和函数的指针

2.5 C中的数组

2.5.1 一维数组

2.5.2 二维数组

2.6 C字符串和字符串库

2.6.1 C语言对静态分配字符串(char数组)的支持

2.6.2 动态分配字符串

2.6.3 用于操作C字符串和字符的库

2.7 C结构体

2.7.1 复习C结构体类型

2.7.2 指针和结构体

2.7.3 结构体中的指针字段

2.7.4 结构体数组

2.7.5 自引用结构体

2.8 C中的I/O(标准I/O和文件I/O)

2.8.1 标准I/O

2.8.2 文件I/O

2.8.3 在C程序中使用文本文件

2.8.4 stdio.h中的标准I/O函数和文件I/O函数

2.9 C语言的一些高级特性

2.9.1 switch语句

2.9.2 命令行参数

2.9.3 void *类型及类型转换

2.9.4 指针运算

2.9.5 C库的使用、编译和链接

2.9.6 编写和使用自己的C库

2.9.7 编译C源文件为汇编代码,以及编译并链接汇编代码

2.10 总结

第3章 C调试工具

3.1 使用GDB调试程序

3.1.1 GDB入门

3.1.2 GDB会话示例

3.2 GDB命令详情

3.2.1 GDB常用快捷键

3.2.2 常用GDB命令

3.3 利用Valgrind调试内存

3.3.1 堆内存访问错误示例

3.3.2 如何使用Memcheck调试工具

3.4 GDB高级功能

3.4.1 GDB和make命令

3.4.2 将GDB附加到正在运行的进程

3.4.3 跟踪分叉进程

3.4.4 信号控制

3.4.5 DDD设置和bug修复

3.5 调试汇编代码

3.5.1 使用GDB检查二进制代码

3.5.2 在汇编代码级别使用DDD进行调试

3.5.3 GDB汇编代码调试命令和示例

3.5.4 汇编调试常用命令快速摘要

3.6 使用GDB调试多线程程序

3.6.1 GDB和线程

3.6.2 GDB线程特定命令

3.6.3 示例

3.7 总结

第4章 二进制与数据表示法

4.1 基数和无符号数

4.1.1 十进制数

4.1.2 无符号二进制数

4.1.3 十六进制

4.1.4 存储限制

4.2 数制转换

4.2.1 二进制和十六进制之间的转换

4.2.2 转换为十进制

4.2.3 从十进制转换

4.3 有符号二进制数

4.3.1 原码

4.3.2 补码

4.4 二进制算术运算

4.4.1 加法

4.4.2 减法

4.4.3 乘法和除法

4.5 溢出

4.5.1 用里程表作类比

4.5.2 二进制溢出

4.5.3 溢出总结

4.5.4 溢出后果

4.6 位运算符

4.6.1 按位与(AND)

4.6.2 按位或(OR)

4.6.3 按位异或(XOR)

4.6.4 按位非(NOT)

4.6.5 移位

4.7 整数字节序

4.8 二进制中的实数

4.8.1 定点数表示法

4.8.2 浮点数表示法

4.8.3 舍入结果

4.9 总结

第5章 冯 • 诺依曼计算机体系结构

5.1 现代计算机体系结构的起源

5.1.1 图灵机

5.1.2 早期电子计算机

5.1.3 冯·诺依曼知道些什么

5.2 冯 • 诺依曼体系结构

5.2.1 CPU

5.2.2 运算器

5.2.3 控制器

5.2.4 存储器

5.2.5 输入/输出(I/O)设备

5.2.6 冯·诺依曼计算机的运行:执行程序

5.3 逻辑门

5.3.1 基础逻辑门

5.3.2 其他逻辑门

5.4 电路

5.4.1 算术/逻辑电路

5.4.2 控制电路

5.4.3 存储电路

5.4.4 RS锁存器

5.5 构建处理器:将它们放在一起

5.5.1 ALU

5.5.2 寄存器堆

5.5.3 CPU

5.6 处理器执行程序指令

5.6.1 时钟驱动程序指令的执行

5.6.2 将它们放在一起:完整计算机中的CPU

5.7 流水线:让CPU更快

5.8 高级流水线指令注意事项

5.8.1 流水线注意事项:数据冒险

5.8.2 流水线冒险:控制冒险

5.9 展望未来:现代CPU技术

5.9.1 指令级并行

5.9.2 多核和硬件多线程

5.9.3 一些处理器示例

5.10 总结

参考资料

第6章 C语言底层:深入理解汇编

6.1 学习汇编的好处

6.2 你将在接下来的章节中学到什么

第7章 64位x86(x86-64)汇编

7.1 x86-64汇编基础知识

7.1.1 寄存器

7.1.2 高级寄存器符号

7.1.3 指令结构

7.1.4 操作数示例

7.1.5 指令后缀

7.2 常见指令

综合应用:一个更具体的示例

7.3 算术指令

7.3.1 移位指令

7.3.2 位指令

7.3.3 加载有效地址指令

7.4 条件和循环

7.4.1 预备知识

7.4.2 汇编中的if语句

7.4.3 汇编中的循环语句

7.5 汇编中的函数

7.5.1 函数参数

7.5.2 通过示例进行追踪

7.5.3 通过main函数进行追踪

7.6 递归函数

观看动画:观察调用栈的变化

7.7 数组

7.8 矩阵

7.8.1 连续二维数组

7.8.2 非连续矩阵

7.9 汇编中的结构体

数据对齐和结构体

7.10 真实世界:缓存区溢出

7.10.1 缓存区溢出经典案例

7.10.2 初步探索:猜谜游戏

7.10.3 进一步了解(在C环境下)

7.10.4 缓存区溢出:首次尝试

7.10.5 更聪明的缓存区溢出:再次尝试

7.10.6 缓存区溢出防御

参考资料

第8章 32位x86(IA32)汇编

8.1 IA32汇编基础知识

8.1.1 寄存器

8.1.2 高级寄存器符号

8.1.3 指令结构

8.1.4 操作数示例

8.1.5 指令后缀

8.2 常见指令

综合应用:一个更具体的示例

8.3 算术指令

8.3.1 移位指令

8.3.2 位指令

8.3.3 加载有效地址指令

8.4 条件和循环

8.4.1 预备知识

8.4.2 汇编中的if语句

8.4.3 汇编中的循环语句

8.5 汇编中的函数

8.5.1 通过示例进行追踪

8.5.2 通过main函数进行追踪

8.6 递归函数

观看动画:观察调用栈的变化

8.7 数组

8.8 矩阵

8.8.1 连续二维数组

8.8.2 非连续矩阵

8.9 汇编中的结构体

数据对齐和结构体

8.10 真实世界:缓存区溢出

8.10.1 缓存区溢出经典案例

8.10.2 初步探索:猜谜游戏

8.10.3 进一步了解(在C环境下)

8.10.4 缓存区溢出:首次尝试

8.10.5 更聪明的缓存区溢出:再次尝试

8.10.6 缓存区溢出防御

第9章 ARM汇编

9.1 ARM汇编基础知识

9.1.1 寄存器

9.1.2 高级寄存器符号

9.1.3 指令结构

9.1.4 操作数示例

9.2 常见指令

综合应用:一个更具体的示例

9.3 算术指令

9.3.1 移位指令

9.3.2 位指令

9.4 条件和循环

9.4.1 预备知识

9.4.2 汇编中的if语句

9.4.3 汇编中的循环语句

9.5 汇编中的函数

9.5.1 函数参数

9.5.2 通过示例进行追踪

9.5.3 通过main函数进行追踪

9.6 递归函数

观看动画:观察调用栈的变化

9.7 数组

9.8 矩阵

9.8.1 连续二维数组

9.8.2 非连续矩阵

9.9 汇编中的结构体

数据对齐和结构体

9.10 真实世界:缓存区溢出

9.10.1 缓存区溢出经典案例

9.10.2 初步探索:猜谜游戏

9.10.3 进一步了解(在C环境下)

9.10.4 缓存区溢出:首次尝试

9.10.5 更聪明的缓存区溢出:再次尝试

9.10.6 缓存区溢出防御

第10章 汇编要点

10.1 共同特点

10.2 进一步阅读

第11章 存储和内存层次结构

11.1 内存层次结构

11.2 存储设备

11.2.1 主存储设备

11.2.2 辅助存储设备

11.3 局部性

11.3.1 代码中的局部性示例

11.3.2 从局部性到缓存

11.3.3 时间局部性

11.3.4 空间局部性

11.4 CPU缓存

11.4.1 直接映射缓存

11.4.2 缓存未命中和关联设计

11.4.3 集合关联缓存

11.5 缓存分析和Valgrind

11.5.1 理论分析和基准测试

11.5.2 现实世界中的缓存分析:Cachegrind

11.6 展望未来:多核处理器上的缓存

11.6.1 缓存一致性

11.6.2 MSI协议

11.6.3 实现缓存一致性协议

11.6.4 有关多核缓存的更多信息

11.7 总结

第12章 代码优化

12.1 优化之前:了解编译器

12.1.1 编译器已经做了什么

12.1.2 编译器无法始终完成的任务:学习代码优化的好处

12.1.3 与编译器合作:一个示例程序

12.2 代码优化第一步:代码分析

12.2.1 使用Callgrind进行性能分析

12.2.2 循环不变代码移动

12.3 其他编译器优化技术:循环展开和函数内联

12.3.1 函数内联

12.3.2 循环展开

12.4 内存注意事项

12.4.1 循环交换

12.4.2 用于改进局部性的其他一些编译器优化技术:循环裂变和融合

12.4.3 使用Massif进行内存分析

12.5 总结

参考资料

第13章 操作系统

13.1 操作系统的工作原理及运行方式

13.1.1 操作系统的引导过程

13.1.2 让操作系统执行任务:中断和陷阱

13.2 进程

13.2.1 多道程序设计和上下文切换

13.2.2 进程状态

13.2.3 创建(和销毁)进程

exec系统调用

13.2.4 退出和等待

13.3 虚拟内存

13.3.1 内存地址

13.3.2 虚拟地址到物理地址的转换

13.3.3 分页

13.3.4 内存效率

13.4 进程间通信

13.4.1 信号

13.4.2 消息传递

13.4.3 共享内存

13.5 总结

第14章 在多核时代利用共享内存

14.1 编程多核系统

14.1.1 多核系统对进程执行的影响

14.1.2 使用线程加速进程执行

14.2 编写你的第一个多线程程序

14.2.1 创建和加入线程

14.2.2 线程函数

14.2.3 运行代码

14.2.4 重新审视标量乘法

14.2.5 改进标量乘法:传递多个参数

14.3 线程同步

14.3.1 互斥

14.3.2 信号量

14.3.3 其他同步机制

14.4 并行程序的性能测量

14.4.1 并行程序性能测量基础

14.4.2 并行程序性能测量进阶

14.5 缓存一致性和虚假共享

14.5.1 多核系统中的缓存

14.5.2 虚假共享

14.5.3 解决虚假共享

14.6 线程安全

解决线程安全相关问题

14.7 OpenMP中的隐式线程

14.7.1 常用编译指示

14.7.2 为OpenMP增添趣味

14.7.3 一个更复杂的示例:OpenMP中的CountSort算法

14.7.4 了解更多关于OpenMP的知识

14.8 总结

参考资料

第15章 展望:其他并行系统和并行编程模型

一个全新的世界:Flynn体系结构分类法

15.1 异构计算:硬件加速器、GPGPU计算和CUDA

15.1.1 硬件加速器

15.1.2 GPU体系结构简介

15.1.3 GPGPU计算

15.1.4 CUDA

15.1.5 其他GPGPU编程语言

15.2 分布式内存系统、消息传递和MPI

15.2.1 并行和分布式处理模型

15.2.2 通信协议

15.2.3 消息传递接口

15.2.4 MPI Hello World

15.2.5 MPI标量乘法

15.2.6 分布式内存系统面临的挑战

15.3 迈向百亿亿次计算:云计算、大数据和计算科学的未来

15.3.1 云计算

15.3.2 MapReduce

15.3.3 展望未来:机遇与挑战

参考资料

累计评论(条) 个书友正在讨论这本书 发表评论

发表评论

发表评论,分享你的想法吧!

买过这本书的人还买过

读了这本书的人还在读

回顶部