暂无商品咨询信息 [发表商品咨询]
【权威作者与专业翻译】国外计算机领域专家联袂撰写,精准传递核心知识。
【分层递进体系清晰】按抽象层次编排内容,从C语言基础逐步延伸至硬件架构、汇编语言、并行计算等,呈现完整计算机系统全景图。
【软硬件全覆盖】涵盖计算机组成、操作系统、内存管理、代码优化、多核编程等核心主题,兼顾理论与实践,满足多维度学习需求。
【实用工具与安全案例】详解GDB、Valgrind等调试工具,剖析缓存区溢出等经典安全问题,助力提升工程实践与问题排查能力。
【适配多场景使用】既可作为计算机系统相关课程教材,也适合有编程基础的从业者自学,部分章节可作为高级课程背景阅读材料。
【资源与时俱进】内容紧跟计算机领域发展,涵盖云计算、MapReduce等前沿主题,适配多核时代需求。
本书是一本生动的计算机系统入门书。它涵盖了C语言编程、操作系统、计算机体系结构和并行计算等主题,剖析了现代计算机,介绍了计算机系统的主要硬件和软件。
本书将带领读者探索现代计算机的体系结构,并学习阅读和编写计算机硬件所执行的汇编代码。本书也探讨了为各种体系结构的计算机优化代码的方式、操作系统的内部工作方式、内存管理的工作原理,以及多核CPU并行计算的相关知识。书中使用清晰、详细的图表来解释复杂的内容,并包含配套代码示例。
本书可以用作计算机系统入门课程的教材,也可作为操作系统、计算机体系结构、编译器、计算机网络、数据库、并行计算等进阶课程的参考用书。
主要内容
·计算机运行程序的原理,包含高级编程语言和二进制的相关知识。
·使用C语言及汇编(包含64位及32位x86、ARM)编程。
·计算机系统如何影响程序性能。
·使用Pthreads实现共享内存并行程序。
苏珊娜·J.马修斯,西点军校计算机科学副教授。
蒂亚·纽霍尔,斯沃斯莫尔学院计算机科学教授。
凯文·C.韦布,斯沃斯莫尔学院计算机科学副教授。
第1章 靠近C,靠近C,靠近美丽的C1
1.1开始使用C编程2
1.1.1编译和运行C程序4
1.1.2C类型6
1.2输入和输出(函数printf和scanf)9
1.2.1printf函数9
1.2.2scanf函数11
1.3条件和循环13
1.3.1C中的布尔值15
1.3.2C中的循环16
1.4函数20
1.5数组和字符串25
1.5.1数组介绍25
1.5.2数组访问方法27
1.5.3数组和函数28
1.5.4C字符串和字符串库介绍30
1.6结构体31
1.6.1定义结构体类型32
1.6.2声明结构体类型的变量32
1.6.3访问字段值33
1.6.4向函数传递结构体36
1.7总结39
第2章 深入理解C语言40
2.1程序内存的组成部分和作用域40
2.2C指针变量43
2.3指针与函数46
2.4动态内存分配48
2.4.1堆内存48
2.4.2函数malloc和free49
2.4.3动态分配数组和字符串50
2.4.4指向堆内存和函数的指针52
2.5C中的数组53
2.5.1一维数组53
2.5.2二维数组56
2.6C字符串和字符串库62
2.6.1C语言对静态分配字符串(char数组)的支持62
2.6.2动态分配字符串63
2.6.3用于操作C字符串和字符的库64
2.7C结构体71
2.7.1复习C结构体类型71
2.7.2指针和结构体73
2.7.3结构体中的指针字段74
2.7.4结构体数组76
2.7.5自引用结构体77
2.8C中的I/O(标准I/O和文件I/O)79
2.8.1标准I/O79
2.8.2文件I/O83
2.8.3在C程序中使用文本文件83
2.8.4stdio.h中的标准I/O和文件I/O函数84
2.9C语言的一些高级特性87
2.9.1switch语句87
2.9.2命令行参数89
2.9.3void*类型及类型转换90
2.9.4指针运算91
2.9.5C库的使用、编译和链接95
2.9.6编写和使用自己的C库100
2.9.7编译C源文件为汇编代码,以及编译并链接汇编代码104
2.10总结107
第3章 C调试工具108
3.1使用GDB调试程序108
3.1.1GDB入门109
3.1.2GDB会话示例110
3.2GDB命令详情118
3.2.1GDB常用快捷键118
3.2.2常用GDB命令118
3.3利用Valgrind调试内存124
3.3.1堆内存访问错误示例125
3.3.2如何使用Memcheck调试工具127
3.4GDB高级功能129
3.4.1GDB和make命令129
3.4.2将GDB附加到正在运行的进程129
3.4.3跟踪分叉进程130
3.4.4信号控制131
3.4.5DDD设置和bug修复131
3.5调试汇编代码131
3.5.1使用GDB检查二进制代码132
3.5.2在汇编代码级别使用DDD进行调试133
3.5.3GDB汇编代码调试命令和示例134
3.5.4汇编调试常用命令快速摘要135
3.6使用GDB调试多线程程序135
3.6.1GDB和线程136
3.6.2GDB线程特定命令136
3.6.3示例137
3.7总结139
第4章 二进制与数据表示法140
4.1基数和无符号数142
4.1.1十进制数142
4.1.2无符号二进制数143
4.1.3十六进制144
4.1.4存储限制145
4.2数制转换146
4.2.1二进制和十六进制之间的转换146
4.2.2转换为十进制147
4.2.3从十进制转换147
4.3有符号二进制数149
4.3.1原码149
4.3.2补码150
4.4二进制算术运算153
4.4.1加法153
4.4.2减法155
4.4.3乘法和除法155
4.5溢出156
4.5.1用里程表作类比156
4.5.2二进制溢出157
4.5.3溢出总结160
4.5.4溢出后果160
4.6位运算符161
4.6.1按位与(AND)161
4.6.2按位或(OR)162
4.6.3按位异或(XOR)163
4.6.4按位非(NOT)163
4.6.5移位164
4.7整数字节序165
4.8二进制中的实数167
4.8.1定点数表示法167
4.8.2浮点数表示法168
4.8.3舍入结果169
4.9总结169
第5章 冯诺依曼计算机体系结构171
5.1现代计算机体系结构的起源172
5.1.1图灵机173
5.1.2早期电子计算机173
5.1.3冯·诺依曼知道些什么175
5.2冯诺依曼体系结构175
5.2.1CPU176
5.2.2运算器176
5.2.3控制器176
5.2.4存储器176
5.2.5输入/输出(I/O)设备177
5.2.6冯·诺依曼计算机的运行:执行程序177
5.3逻辑门179
5.3.1基础逻辑门179
5.3.2其他逻辑门180
5.4电路181
5.4.1算术/逻辑电路182
5.4.2控制电路186
5.4.3存储电路190
5.4.4RS锁存器190
5.5构建处理器:将它们放在一起193
5.5.1ALU193
5.5.2寄存器堆195
5.5.3CPU196
5.6处理器执行程序指令197
5.6.1时钟驱动程序指令的执行200
5.6.2将它们放在一起:完整计算机中的CPU201
5.7流水线:让CPU更快202
5.8高级流水线指令注意事项204
5.8.1流水线注意事项:数据冒险204
5.8.2流水线冒险:控制冒险205
5.9展望未来:现代CPU技术207
5.9.1指令级并行207
5.9.2多核和硬件多线程208
5.9.3一些处理器示例210
5.10总结210
第6章 C语言底层:深入理解汇编212
6.1学习汇编的好处212
6.2你将在接下来的章 节中学到什么214
第7章 64位x86(x86-64)汇编215
7.1x86-64汇编基础知识216
7.1.1寄存器217
7.1.2高级寄存器符号217
7.1.3指令结构218
7.1.4操作数示例219
7.1.5指令后缀220
7.2常见指令220
7.3算术指令226
7.3.1移位指令226
7.3.2位指令227
7.3.3加载有效地址指令228
7.4条件和循环228
7.4.1预备知识228
7.4.2汇编中的if语句232
7.4.3汇编中的循环语句237
7.5汇编中的函数242
7.5.1函数参数243
7.5.2通过示例进行追踪243
7.5.3通过main函数进行追踪245
7.6递归函数257
7.7数组259
7.8矩阵261
7.8.1连续二维数组262
7.8.2非连续矩阵264
7.9汇编中的结构体267
7.10真实世界:缓存区溢出270
7.10.1缓存区溢出经典案例270
7.10.2初步探索:猜谜游戏271
7.10.3进一步了解(在C环境下)272
7.10.4缓存区溢出:首次尝试275
7.10.5更聪明的缓存区溢出:再次尝试276
7.10.6缓存区溢出防御278
第8章 32位x86(IA32)汇编281
8.1IA32汇编基础知识282
8.1.1寄存器283
8.1.2高级寄存器符号283
8.1.3指令结构284
8.1.4操作数示例284
8.1.5指令后缀285
8.2常见指令286
8.3算术指令291
8.3.1移位指令291
8.3.2位指令292
8.3.3加载有效地址指令292
8.4条件和循环293
8.4.1预备知识293
8.4.2汇编中的if语句296
8.4.3汇编中的循环语句301
8.5汇编中的函数305
8.5.1通过示例进行追踪307
8.5.2通过main函数进行追踪308
8.6递归函数322
8.7数组323
8.8矩阵326
8.8.1连续二维数组327
8.8.2非连续矩阵328
8.9汇编中的结构体331
8.10真实世界:缓存区溢出334
8.10.1缓存区溢出经典案例334
8.10.2初步探索:猜谜游戏334
8.10.3进一步了解(在C环境下)336
8.10.4缓存区溢出:首次尝试338
8.10.5更聪明的缓存区溢出:再次尝试340
8.10.6缓存区溢出防御341
第9章 ARM汇编345
9.1ARM汇编基础知识346
9.1.1寄存器347
9.1.2高级寄存器符号347
9.1.3指令结构348
9.1.4操作数示例348
9.2常见指令349
9.3算术指令354
9.3.1移位指令355
9.3.2位指令356
9.4条件和循环356
9.4.1预备知识356
9.4.2汇编中的if语句360
9.4.3汇编中的循环语句365
9.5汇编中的函数370
9.5.1函数参数372
9.5.2通过示例进行追踪372
9.5.3通过main函数进行追踪373
9.6递归函数385
9.7数组387
9.8矩阵390
9.8.1连续二维数组391
9.8.2非连续矩阵393
9.9汇编中的结构体395
9.10真实世界:缓存区溢出398
9.10.1缓存区溢出经典案例399
9.10.2初步探索:猜谜游戏399
9.10.3进一步了解(在C环境下)400
9.10.4缓存区溢出:首次尝试403
9.10.5更聪明的缓存区溢出:再次尝试404
9.10.6缓存区溢出防御406
第10章 汇编要点409
10.1共同特点409
10.2进一步阅读410
第11章 存储和内存层次结构411
11.1内存层次结构412
11.2存储设备413
11.2.1主存储设备414
11.2.2辅助存储设备415
11.3局部性417
11.3.1代码中的局部性示例418
11.3.2从局部性到缓存419
11.3.3时间局部性420
11.3.4空间局部性421
11.4CPU缓存421
11.4.1直接映射缓存422
11.4.2缓存未命中和关联设计429
11.4.3集合关联缓存430
11.5缓存分析和Valgrind434
11.5.1理论分析和基准测试436
11.5.2现实世界中的缓存分析:Cachegrind437
11.6展望未来:多核处理器上的缓存439
11.6.1缓存一致性441
11.6.2MSI协议441
11.6.3实现缓存一致性协议443
11.6.4有关多核缓存的更多信息443
11.7总结444
第12章 代码优化445
12.1优化之前:了解编译器445
12.1.1编译器已经做了什么445
12.1.2编译器无法始终完成的任务:学习代码优化的好处447
12.1.3与编译器合作:一个示例程序450
12.2代码优化第一步:代码分析451
12.2.1使用Callgrind进行性能分析453
12.2.2循环不变代码移动455
12.3其他编译器优化技术:循环展开和函数内联457
12.3.1函数内联457
12.3.2循环展开458
12.4内存注意事项460
12.4.1循环交换460
12.4.2用于改进局部性的其他一些编译器优化技术:循环裂变和融合461
12.4.3使用Massif进行内存分析463
12.5总结465
第13章 操作系统467
13.1操作系统的工作原理及运行方式468
13.1.1操作系统的引导过程469
13.1.2让操作系统执行任务:中断和陷阱469
13.2进程472
13.2.1多道程序设计和上下文切换472
13.2.2进程状态473
13.2.3创建(和销毁)进程475
13.2.4退出和等待480
13.3虚拟内存482
13.3.1内存地址484
13.3.2虚拟地址到物理地址的转换485
13.3.3分页486
13.3.4内存效率492
13.4进程间通信494
13.4.1信号495
13.4.2消息传递499
13.4.3共享内存500
13.5总结501
第14章 在多核时代利用共享内存503
14.1编程多核系统505
14.1.1多核系统对进程执行的影响505
14.1.2使用线程加速进程执行506
14.2编写你的第一个多线程程序508
14.2.1创建和加入线程509
14.2.2线程函数511
14.2.3运行代码511
14.2.4重新审视标量乘法512
14.2.5改进标量乘法:传递多个参数514
14.3线程同步515
14.3.1互斥521
14.3.2信号量528
14.3.3其他同步机制529
14.4并行程序的性能测量534
14.4.1并行程序性能测量基础534
14.4.2并行程序性能测量进阶537
14.5缓存一致性和虚假共享538
14.5.1多核系统中的缓存539
14.5.2虚假共享540
14.5.3解决虚假共享542
14.6线程安全543
14.7OpenMP中的隐式线程547
14.7.1常用编译指示548
14.7.2为OpenMP增添趣味548
14.7.3一个更复杂的示例:OpenMP中的CountSort算法550
14.7.4了解更多关于OpenMP的知识552
14.8总结552
第15章 展望:其他并行系统和并行编程模型554
15.1异构计算:硬件加速器、GPGPU计算和CUDA555
15.1.1硬件加速器555
15.1.2GPU体系结构简介556
15.1.3GPGPU计算557
15.1.4CUDA557
15.1.5其他GPGPU编程语言561
15.2分布式内存系统、消息传递和MPI561
15.2.1并行和分布式处理模型563
15.2.2通信协议563
15.2.3消息传递接口564
15.2.4MPIHelloWorld564
15.2.5MPI标量乘法566
15.2.6分布式内存系统面临的挑战572
15.3迈向百亿亿次计算:云计算、大数据和计算科学的未来572
15.3.1云计算574
15.3.2MapReduce575
15.3.3展望未来:机遇与挑战579
| 基本信息 | |
|---|---|
| 出版社 | 人民邮电出版社 |
| ISBN | 9787115638151 |
| 条码 | 9787115638151 |
| 编者 | (美)苏珊娜·J.马修斯(Suzanne J.Matthews),(美)蒂亚·纽霍尔(Tia Newhall),(美)凯文·C.韦布(Kevin C.Webb) 著 著 李玉博,王艺铭 译 译 |
| 译者 | |
| 出版年月 | 2026-01-01 00:00:00.0 |
| 开本 | 16开 |
| 装帧 | 平装 |
| 页数 | 580 |
| 字数 | 966000 |
| 版次 | 1 |
| 印次 | 1 |
| 纸张 | |
暂无商品评论信息 [发表商品评论]
暂无商品咨询信息 [发表商品咨询]