人民邮电出版社有限公司店铺主页二维码
人民邮电出版社有限公司 微信认证
人民邮电出版社微店,为您提供最全面,最专业的一站式购书服务
微信扫描二维码,访问我们的微信店铺
你可以使用微信联系我们,随时随地的购物、客服咨询、查询订单和物流...

深入解析计算机系统 操作系统教材 C语言 汇编语言 多核编程

125.80
运费: ¥ 0.00-20.00
深入解析计算机系统 操作系统教材 C语言 汇编语言 多核编程 商品图0
深入解析计算机系统 操作系统教材 C语言 汇编语言 多核编程 商品图1
深入解析计算机系统 操作系统教材 C语言 汇编语言 多核编程 商品图2
深入解析计算机系统 操作系统教材 C语言 汇编语言 多核编程 商品图3
深入解析计算机系统 操作系统教材 C语言 汇编语言 多核编程 商品图4
深入解析计算机系统 操作系统教材 C语言 汇编语言 多核编程 商品缩略图0 深入解析计算机系统 操作系统教材 C语言 汇编语言 多核编程 商品缩略图1 深入解析计算机系统 操作系统教材 C语言 汇编语言 多核编程 商品缩略图2 深入解析计算机系统 操作系统教材 C语言 汇编语言 多核编程 商品缩略图3 深入解析计算机系统 操作系统教材 C语言 汇编语言 多核编程 商品缩略图4

商品详情

书名:深入解析计算机系统
定价:179.8
ISBN:9787115638151
作者:[美]苏珊娜·J. 马修斯(Suzanne J. Matthews) 蒂亚·纽霍尔(Tia Newhall) 凯文·C. 韦布(Kevin C. Web
版次:第1版
出版时间:2026-01

内容提要:
计算机系统是计算机专业的常见课程,也是学习编程过程中的重要学习内容。本书是计算机系统的入门图书,介绍了现代计算机系统的主要硬件和软件。本书按抽象层次设置各章节,从常用于编写操作系统的 C 语言基础知识逐步衍生,先介绍现代计算机的组成、结构、操作系统原理、汇编语言,再介绍各种计算机体系结构的代码优化方法、使用共享内存实现并行计算、多核 CPU环境下的内存管理等。 本书适合作为计算机系统相关课程的教材,也适合有编程基础的人阅读。



作者简介:
苏珊娜·J. 马修斯,西点军校计算机科学副教授。 蒂亚·纽霍尔,斯沃斯莫尔学院计算机科学教授。 凯文·C. 韦布,斯沃斯莫尔学院计算机科学副教授。

目录:
第 1 章 靠近 C,靠近 C,靠近美丽的 C  1
1.1 开始使用 C 编程  2
 1.1.1 编译和运行 C 程序  4
 1.1.2 C 类型  6
1.2 输入和输出(函数 printf 和 scanf)  9
 1.2.1 printf 函数  9
 1.2.2 scanf 函数  11
1.3 条件和循环  13
 1.3.1 C 中的布尔值  15
 1.3.2 C 中的循环  16
1.4 函数  20
1.5 数组和字符串  25
 1.5.1 数组介绍  25
 1.5.2 数组访问方法  27
 1.5.3 数组和函数  28
 1.5.4 C 字符串和字符串库介绍  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.2 C 指针变量  43
2.3 指针与函数  46
2.4 动态内存分配  48
 2.4.1 堆内存  48
 2.4.2 函数 malloc 和 free  49
 2.4.3 动态分配数组和字符串  50
 2.4.4 指向堆内存和函数的指针  52
2.5 C 中的数组  53
 2.5.1 一维数组  53
 2.5.2 二维数组  56
2.6 C 字符串和字符串库  62
 2.6.1 C 语言对静态分配字符串(char 数组)的支持  62
 2.6.2 动态分配字符串  63
 2.6.3 用于操作 C 字符串和字符的库  64
2.7 C 结构体  71
 2.7.1 复习 C 结构体类型  71
 2.7.2 指针和结构体  73
 2.7.3 结构体中的指针字段  74
 2.7.4 结构体数组  76
 2.7.5 自引用结构体  77
2.8 C 中的 I/O(标准 I/O 和文件 I/O)  79
 2.8.1 标准 I/O  79
 2.8.2 文件 I/O  83
 2.8.3 在 C 程序中使用文本文件  83
 2.8.4 stdio.h 中的标准 I/O 和文件 I/O 函数  84
2.9 C 语言的一些*特性  87
 2.9.1 switch 语句  87
 2.9.2 命令行参数  89
 2.9.3 void *类型及类型转换  90
 2.9.4 指针运算  91
 2.9.5 C 库的使用、编译和链接  95
 2.9.6 编写和使用自己的 C 库  100
 2.9.7 编译 C 源文件为汇编代码,以及编译并链接汇编代码  104
2.10 总结  107

第 3 章 C 调试工具  108
3.1 使用 GDB 调试程序  108
 3.1.1 GDB 入门  109
 3.1.2 GDB 会话示例  110
3.2 GDB 命令详情  118
 3.2.1 GDB 常用快捷键  118
 3.2.2 常用 GDB 命令  118
3.3 利用 Valgrind 调试内存  124
 3.3.1 堆内存访问错误示例  125
 3.3.2 如何使用 Memcheck 调试工具  127
3.4 GDB *功能  129
 3.4.1 GDB 和 make 命令  129
 3.4.2 将 GDB 附加到正在运行的进程  129
 3.4.3 跟踪分叉进程  130
 3.4.4 信号控制  131
 3.4.5 DDD 设置和 bug 修复  131
3.5 调试汇编代码  131
 3.5.1 使用 GDB 检查二进制代码  132
 3.5.2 在汇编代码级别使用 DDD 进行调试  133
 3.5.3 GDB 汇编代码调试命令和示例  134
 3.5.4 汇编调试常用命令快速摘要  135
3.6 使用 GDB 调试多线程程序  135
 3.6.1 GDB 和线程  136
 3.6.2 GDB 线程特定命令  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.1 CPU  176
 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.4 RS 锁存器  190
5.5 构建处理器:将它们放在一起  193
 5.5.1 ALU  193
 5.5.2 寄存器堆  195
 5.5.3 CPU  196
5.6 处理器执行程序指令  197
 5.6.1 时钟驱动程序指令的执行  200
 5.6.2 将它们放在一起:完整计算机中的 CPU  201
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.1 x86-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.1 IA32 汇编基础知识  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.1 ARM 汇编基础知识  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.4 CPU 缓存  421
 11.4.1 直接映射缓存  422
 11.4.2 缓存未命中和关联设计  429
 11.4.3 集合关联缓存  430
11.5 缓存分析和 Valgrind  434
 11.5.1 理论分析和基准测试  436
 11.5.2 现实世界中的缓存分析:Cachegrind  437
11.6 展望未来:多核处理器上的缓存  439
 11.6.1 缓存一致性  441
 11.6.2 MSI 协议  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.7 OpenMP 中的隐式线程  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 计算和 CUDA  555
 15.1.1 硬件加速器  555
 15.1.2 GPU 体系结构简介  556
 15.1.3 GPGPU 计算  557
 15.1.4 CUDA  557
 15.1.5 其他 GPGPU 编程语言  561
15.2 分布式内存系统、消息传递和MPI  561
 15.2.1 并行和分布式处理模型  563
 15.2.2 通信协议  563
 15.2.3 消息传递接口  564
 15.2.4 MPI Hello World  564
 15.2.5 MPI 标量乘法  566
 15.2.6 分布式内存系统面临的挑战  572
15.3 迈向百亿亿次计算:云计算、大数据和计算科学的未来  572
 15.3.1 云计算  574
 15.3.2 MapReduce  575
 15.3.3 展望未来:机遇与挑战  579
人民邮电出版社有限公司店铺主页二维码
人民邮电出版社有限公司 微信公众号认证
人民邮电出版社微店,为您提供最全面,最专业的一站式购书服务
扫描二维码,访问我们的微信店铺
随时随地的购物、客服咨询、查询订单和物流...

深入解析计算机系统 操作系统教材 C语言 汇编语言 多核编程

手机启动微信
扫一扫购买

收藏到微信 or 发给朋友

1. 打开微信,扫一扫左侧二维码

2. 点击右上角图标

点击右上角分享图标

3. 发送给朋友、分享到朋友圈、收藏

发送给朋友、分享到朋友圈、收藏

微信支付

支付宝

扫一扫购买

打开微信,扫一扫

或搜索微信号:renyoushe
人民邮电出版社官方微信公众号

收藏到微信 or 发给朋友

1. 打开微信,扫一扫左侧二维码

2. 点击右上角图标

点击右上角分享图标

3. 发送给朋友、分享到朋友圈、收藏

发送给朋友、分享到朋友圈、收藏