商品详情
定价:89.0
ISBN:9787111738824
作者:袁春风
版次:1
内容提要:
本书主要介绍与计算机系统相关的核心概念,解释这些概念如何相互关联并最终影响程序执行的结果和性能。本书共分12章,主要包括数据的机器级表示和处理、程序的转换及机器级表示、程序的链接和加载执行、存储器层次结构、虚拟存储器、进程和异常控制流、I/O操作的实现、程序性能的优化、网络编程以及并发编程等内容。
本书内容详尽,概念清楚,通俗易懂,实例丰富,并提供大量典型习题以供读者练习,可以作为计算机专业本科或大专院校学生计算机系统方面的基础性教材,也可以作为有关专业研究生或计算机技术人员的参考书。
目录:
目 录
出版说明
前言
第1章 计算机系统概述 1
1.1 计算机系统的基本工作原理 1
1.1.1 冯·诺依曼结构的基本思想 1
1.1.2 冯·诺依曼机的基本结构 2
1.1.3 程序和指令的执行过程 3
1.2 程序的开发与运行 6
1.2.1 程序设计语言和翻译程序 6
1.2.2 从源程序到可执行文件 8
1.2.3 可执行文件的启动和执行 9
1.3 计算机系统的层次结构 11
1.3.1 计算机系统抽象层的转换 11
1.3.2 计算机系统核心层之间的关联 12
1.3.3 计算机系统的不同用户 14
1.4 本章小结 17
习题 17
第2章 数据的机器级表示与处理 19
2.1 数制和编码 19
2.1.1 信息的二进制编码 19
2.1.2 进位计数制 21
2.1.3 定点数与浮点数 24
2.1.4 定点数的编码表示 25
2.2 整数的表示 29
2.2.1 无符号整数和带符号整数 29
2.2.2 C语言中的整数及其相互转换 30
2.3 浮点数的表示 32
2.3.1 浮点数的表示范围 32
2.3.2 浮点数的规格化 33
2.3.3 IEEE 754浮点数标准 33
2.3.4 C语言中的浮点数类型 37
2.4 非数值数据的编码表示 38
2.4.1 逻辑值 38
2.4.2 西文字符 39
2.4.3 汉字字符 40
2.5 数据的宽度和存储 41
2.5.1 数据的宽度和单位 41
2.5.2 数据的存储和排列顺序 43
2.6 数据的基本运算 47
2.6.1 按位运算和逻辑运算 47
2.6.2 左移和右移运算 47
2.6.3 位扩展和位截断运算 48
2.6.4 整数加减运算 49
2.6.5 整数乘除运算 53
2.6.6 常量的乘除运算 56
2.6.7 浮点数运算 57
2.7 本章小结 63
习题 63
第3章 程序转换与指令系统 72
3.1 程序转换概述 72
3.1.1 机器指令和汇编指令 72
3.1.2 指令集体系结构概述 73
3.1.3 指令系统设计风格 75
3.1.4 机器代码的生成过程 77
3.2 IA-32/x86-64指令系统 82
3.2.1 操作数类型 83
3.2.2 寄存器组织 85
3.2.3 寻址方式 89
3.2.4 机器指令格式 92
3.3 IA-32/x86-64常用指令类型及操作 95
3.3.1 传送指令 95
3.3.2 定点算术运算指令 99
3.3.3 按位运算指令 103
3.3.4 程序执行流控制指令 105
*3.3.5 x87浮点处理指令 110
*3.3.6 MMX/SSE/AVX指令 113
*3.3.7 x86-64中的浮点处理指令 115
3.4 本章小结 118
习题 118
第4章 程序的机器级表示 122
4.1 过程调用的机器级表示 122
4.1.1 IA-32的过程调用约定 122
4.1.2 变量的作用域和生存期 125
4.1.3 按值传递参数和按地址传递参数 127
4.1.4 递归过程调用 132
4.1.5 非静态局部变量的存储分配 133
4.1.6 x86-64的过程调用 136
*4.1.7 x86-64过程的浮点参数传递 142
4.2 流程控制语句的机器级表示 143
4.2.1 选择语句的机器级表示 143
4.2.2 循环语句的机器级表示 147
4.3 复杂数据类型的分配和访问 150
4.3.1 数组的分配和访问 150
4.3.2 结构体数据的分配和访问 155
4.3.3 联合体数据的分配和访问 158
4.3.4 数据的对齐 160
4.4 越界访问和缓冲区溢出 163
4.4.1 数组的越界访问 163
4.4.2 缓冲区溢出攻击 165
4.4.3 对缓冲区溢出攻击的防范 167
4.5 本章小结 170
习题 171
第5章 程序的链接与加载执行 184
5.1 编译、汇编和静态链接 184
5.1.1 编译和汇编 184
5.1.2 可执行文件的生成 185
5.2 目标文件格式 187
5.2.1 ELF目标文件格式 188
5.2.2 可重定位文件格式 189
5.2.3 可执行文件格式 192
5.2.4 可执行文件的存储器映像 194
5.3 符号表和符号解析 195
5.3.1 符号和符号表 195
5.3.2 符号解析 199
5.3.3 与静态库的链接 202
5.4 重定位 204
5.4.1 重定位信息 205
5.4.2 重定位过程 206
*5.5 动态链接 209
*5.5.1 动态链接的特性 210
*5.5.2 程序加载时的动态链接 210
*5.5.3 程序运行时的动态链接 212
*5.5.4 位置无关代码 213
*5.6 库打桩机制 218
*5.6.1 编译时打桩 218
*5.6.2 链接时打桩 219
*5.6.3 运行时打桩 220
5.7 可执行文件的加载和执行 222
5.7.1 可执行文件的加载 222
5.7.2 程序和指令的执行过程 223
5.7.3 CPU的基本功能和基本组成 225
5.7.4 打断程序正常执行的事件 226
5.8 本章小结 227
习题 228
第6章 存储器层次结构 233
6.1 存储器概述 233
6.1.1 存储器的分类 233
6.1.2 主存储器的组成和基本操作 234
6.1.3 层次化存储结构 235
6.1.4 程序访问的局部性 236
6.2 半导体随机存取存储器 238
6.2.1 基本存储元件 238
6.2.2 DRAM芯片 240
6.2.3 SDRAM芯片技术 242
6.2.4 内存条及其与CPU的连接 243
6.2.5 存储器芯片的扩展 245
6.2.6 主存控制器 247
6.3 外部存储器 247
6.3.1 磁盘存储器的结构 247
6.3.2 磁盘存储器的性能指标 249
*6.3.3 闪速存储器和U盘 250
*6.3.4 固态硬盘 252
6.4 cache 253
6.4.1 cache的基本工作原理 253
6.4.2 cache的映射方式 254
6.4.3 cache的替换算法 261
6.4.4 cache的写策略 265
*6.4.5 cache的设计 266
*6.4.6 cache和程序性能 270
6.5 本章小结 274
习题 275
第7章 虚拟存储器 279
7.1 虚拟存储器概述 279
7.1.1 虚拟存储器的基本概念 279
7.1.2 进程的虚拟地址空间 280
7.1.3 虚拟存储器的基本类型 282
7.2 页式虚拟存储器的实现 284
7.2.1 页表和页表项的结构 284
7.2.2 页式存储管理总体结构 285
7.2.3 页式虚拟存储地址转换 287
7.2.4 快表 287
7.3 具有TLB和cache的存储系统 290
7.3.1 层次化存储系统结构 290
7.3.2 CPU访存过程 291
7.3.3 cache的4种查找方式 293
7.4 存储保护机制 293
*7.5 IA-32+Linux中的地址转换 295
7.5.1 逻辑地址到线性地址的转换 295
7.5.2 线性地址到物理地址的转换 300
*7.6 实例:Intel Core i7+Linux存储系统 302
7.6.1 Core i7的层次化存储器结构 302
7.6.2 Core i7的地址转换机制 302
7.6.3 Linux系统的虚拟存储管理 305
*7.7 堆区动态分配 309
7.7.1 动态存储分配 310
7.7.2 显式动态分配 313
7.7.3 隐式动态分配 318
7.7.4 与存储访问相关的常见错误 319
7.8 本章小结 323
习题 323
第8章 进程与异常控制流 327
8.1 进程与进程的上下文切换 327
8.1.1 程序和进程的概念 327
8.1.2 进程的逻辑控制流 328
8.1.3 进程的上下文切换 329
8.2 异常和中断 331
8.2.1 异常和中断的基本概念 331
8.2.2 异常的分类 333
8.2.3 中断的分类 336
8.2.4 异常和中断的响应 337
*8.3 IA-32/x86-64+Linux的异常和中断机制 339
8.3.1 中断向量表和中断描述符表 339
8.3.2 异常和中断的处理 341
8.3.3 系统调用机制 345
*8.4 Linux中的进程控制 348
8.4.1 进程的创建、休眠和终止 348
8.4.2 进程ID的获取和子进程的回收 351
8.4.3 程序的加载运行 354
*8.5 Linux中的信号与非本地跳转 357
8.5.1 Linux中的信号处理机制 357
8.5.2 信号的发送 359
8.5.3 信号捕获和信号处理 361
8.5.4 非本地跳转处理 362
8.6 本章小结 364
习题 365
第9章 I/O操作的实现 370
9.1 I/O子系统概述 370
9.2 用户空间I/O软件 372
9.2.1 用户程序中的I/O函数 372
9.2.2 文件的基本概念 375
9.2.3 系统级I/O函数 377
9.2.4 C标准I/O库函数 380
9.3 内核空间I/O软件 385
9.3.1 设备无关的I/O软件层 385
9.3.2 设备驱动程序 389
9.3.3 中断服务程序 396
9.4 I/O硬件与软件的接口 398
9.4.1 I/O设备 398
9.4.2 基于总线的互连结构 399
9.4.3 I/O接口的功能和结构 402
9.4.4 I/O端口及其编址 404
9.4.5 中断系统 408
9.5 hello程序运行过程综述 409
9.5.1 shell进程等待用户键盘输入 409
9.5.2 用户从键盘输入命令行 410
9.5.3 唤醒并切换至shell进程 411
9.5.4 使用fork()函数创建子进程 412
9.5.5 hello进程的加载和执行 414
9.6 本章小结 418
习题 418
第10章 程序性能的优化 424
10.1 计算机系统性能评估 424
10.1.1 计算机性能的定义 424
10.1.2 计算机性能的测试 424
10.1.3 用指令执行速度进行性能评估 426
10.1.4 用基准程序进行性能评估 428
10.1.5 阿姆达尔定律 429
10.2 程序性能瓶颈分析 430
10.2.1 基于事件统计报告的性能瓶颈
分析 430
10.2.2 基于踪迹的性能瓶颈分析 433
10.3 基于分层的性能优化技术分类 435
10.3.1 软件层次 435
10.3.2 指令集和硬件层次 439
10.4 编写适合编译优化的源代码 440
10.4.1 优化函数调用 440
10.4.2 优化指针别名 442
10.5 本章小结 445
习题 446
第11章 网络编程 449
11.1 客户端–服务器模型和网络I/O 449
11.1.1 案例:远程函数调用 449
11.1.2 网络I/O 451
11.2 局域网和广域网 452
11.2.1 局域网 452
11.2.2 交换机 453
11.2.3 广域网与互联网 455
11.3 IP网络通信协议 455
11.3.1 IP地址 455
11.3.2 子网掩码与子网划分 456
11.3.3 路由与转发 458
11.3.4 TCP/IP 461
11.4 套接字编程 463
11.4.1 套接字接口 463
11.4.2 套接字地址与接口函数 464
11.4.3 套接字编程实例 467
11.5 本章小结 472
习题 472
第12章 并发编程 474
12.1 并发编程概述 474
12.2 多进程与多线程 475
12.2.1 多进程并发编程 475
12.2.2 线程与线程的上下文切换 478
12.2.3 POSIX线程库函数 479
12.2.4 多线程编程实例 481
12.3 同步与互斥 483
12.3.1 互斥锁 484
12.3.2 信号量 487
12.3.3 线程安全和可重入性 490
12.3.4 死锁 491
12.4 并行编程 492
12.4.1 并行程序设计思想 493
12.4.2 并行程序性能评估 495
12.5 本章小结 496
习题 497
附录A gcc的常用命令行选项 499
附录B GDB的常用命令 500
参考文献 502
- 机械工业出版社旗舰店 (微信公众号认证)
- 扫描二维码,访问我们的微信店铺
- 随时随地的购物、客服咨询、查询订单和物流...