本书主要介绍与计算机系统相关的核心概念,解释这些概念如何相互关联并最终影响程序执行的结果和性能。本书共分8章,主要内容包括数据的表示和运算、程序的转换及机器级表示、程序的链接、程序的执行、存储器层次结构、虚拟存储器、异常控制流和I/O操作的实现等。本书内容详尽,反映现实,概念清楚,通俗易懂,实例丰富,并提供大量典型习题供读者练习。本书可以作为计算机专业本科或大专院校学生计算机系统方面的基础性教材,也可以作为有关专业研究生或计算机技术人员的参考书
目录
- 丛书序言
- 序 言
- 前 言
- 第一部分 系统概述和可执行目标文件的生成
- 第1章 计算机系统概述2
- 1.1 计算机的发展历程2
- 1.1.1 电子计算机的诞生2
- 1.1.2 第一代计算机2
- 1.1.3 第二代计算机3
- 1.1.4 第三代计算机3
- 1.1.5 第四代计算机4
- 1.2 计算机系统的基本功能和基本组成5
- 1.2.1 计算机系统的基本功能5
- 1.2.2 计算机硬件6
- 1.2.3 计算机软件10
- 1.3 程序开发与执行过程11
- 1.3.1 从源程序到可执行程序11
- 1.3.2 可执行文件的启动和执行12
- 1.3.3 程序中每条指令的执行13
- 1.4 计算机系统的层次结构15
- 1.4.1 计算机系统抽象层的转换15
- 1.4.2 计算机系统的不同用户17
- 1.5 计算机系统性能评价19
- 1.5.1 计算机性能的定义19
- 1.5.2 计算机性能的测试19
- 1.5.3 用指令执行速度进行性能评估21
- 1.5.4 用基准程序进行性能评估23
- 1.6 本书的主要内容和组织结构24
- 1.7 小结26
- 习题27
- 第2章 数据的机器级表示与处理29
- 2.1 数制和编码29
- 2.1.1 信息的二进制编码29
- 2.1.2 进位计数制31
- 2.1.3 定点与浮点表示35
- 2.1.4 定点数的编码表示35
- 2.2 整数的表示40
- 2.2.1 无符号整数和带符号整数的表示40
- 2.2.2 C语言中的整数及其相互转换41
- 2.3 浮点数的表示43
- 2.3.1 浮点数的表示范围43
- 2.3.2 浮点数的规格化44
- 2.3.3 IEEE 754浮点数标准44
- 2.3.4 C语言中的浮点数类型48
- 2.4 十进制数的表示50
- 2.4.1 用ASCII码字符表示50
- 2.4.2 用BCD码表示50
- 2.5 非数值数据的编码表示51
- 2.5.1 逻辑值51
- 2.5.2 西文字符51
- 2.5.3 汉字字符52
- 2.6 数据的宽度和存储54
- 2.6.1 数据的宽度和单位54
- 2.6.2 数据的存储和排列顺序55
- 2.7 数据的基本运算58
- 2.7.1 按位运算和逻辑运算59
- 2.7.2 左移运算和右移运算59
- 2.7.3 位扩展运算和位截断运算61
- 2.7.4 整数加减运算61
- 2.7.5 整数乘除运算65
- 2.7.6 常量的乘除运算67
- 2.7.7 浮点数运算69
- 2.8 小结73
- 习题74
- 第3章 程序的转换及机器级表示82
- 3.1 程序转换概述82
- 3.1.1 机器指令及汇编指令83
- 3.1.2 指令集体系结构84
- 3.1.3 生成机器代码的过程84
- 3.2 IA-32指令系统概述88
- 3.2.1 数据类型及其格式89
- 3.2.2 寄存器组织和寻址方式90
- 3.3 IA-32常用指令类型及其操作95
- 3.3.1 传送指令95
- 3.3.2 定点算术运算指令98
- 3.3.3 按位运算指令101
- 3.3.4 控制转移指令102
- 3.3.5 x87浮点处理指令107
- 3.3.6 MMX/SSE指令集108
- 3.4 C语言程序的机器级表示110
- 3.4.1 过程调用的机器级表示110
- 3.4.2 选择语句的机器级表示121
- 3.4.3 循环结构的机器级表示125
- 3.5 复杂数据类型的分配和访问128
- 3.5.1 数组的分配和访问128
- 3.5.2 结构体数据的分配和访问132
- 3.5.3 联合体数据的分配和访问135
- 3.5.4 数据的对齐137
- 3.6 越界访问和缓冲区溢出138
- 3.6.1 缓冲区溢出攻击139
- 3.6.2 缓冲区溢出攻击的防范141
- 3.7 兼容IA-32的64位系统143
- 3.7.1 x86-64的发展简史143
- 3.7.2 x86-64的基本特点144
- 3.7.3 x86-64的基本指令和对齐144
- 3.8 小结150
- 习题151
- 第4章 程序的链接165
- 4.1 编译、汇编和静态链接165
- 4.1.1 编译和汇编165
- 4.1.2 可执行目标文件的生成166
- 4.2 目标文件格式168
- 4.2.1 ELF目标文件格式168
- 4.2.2 可重定位目标文件格式170
- 4.2.3 可执行目标文件格式171
- 4.3 符号表和符号解析173
- 4.3.1 符号和符号表173
- 4.3.2 符号解析176
- 4.3.3 与静态库的链接179
- 4.4 重定位181
- 4.4.1 重定位信息182
- 4.4.2 重定位过程182
- 4.5 可执行文件的加载186
- 4.6 动态链接188
- 4.6.1 动态链接的特性188
- 4.6.2 程序加载时的动态链接188
- 4.6.3 程序运行时的动态链接190
- 4.7 小结191
- 习题192
- 第二部分 可执行目标文件的运行
- 第5章 程序的执行200
- 5.1 程序执行概述200
- 5.1.1 程序及指令的执行过程200
- 5.1.2 CPU的基本功能和组成202
- 5.1.3 打断程序正常执行的事件204
- 5.2 数据通路基本结构和工作原理205
- 5.2.1 数据通路基本结构205
- 5.2.2 数据通路的时序控制206
- 5.2.3 数据通路基本工作原理208
- 5.3 流水线方式下指令的执行213
- 5.3.1 指令流水线的基本原理213
- 5.3.2 适合流水线的指令集特征217
- 5.3.3 CISC和RISC风格指令集217
- 5.3.4 指令流水线的实现220
- 5.3.5 高级流水线实现技术224
- 5.4 小结225
- 习题226
- 第6章 层次结构存储系统229
- 6.1 存储器概述229
- 6.1.1 存储器的分类229
- 6.1.2 主存储器的组成和基本操作231
- 6.1.3 存储器的主要性能指标231
- 6.1.4 各类存储元件的特点232
- 6.1.5 存储器的层次结构233
- 6.2 主存与CPU的连接及其读写操作233
- 6.2.1 主存模块的连接和读写操作233
- 6.2.2 “装入”指令和“存储”指令操作过程237
- 6.3 磁盘存储器238
- 6.3.1 磁盘存储器的结构238
- 6.3.2 磁盘存储器的性能指标240
- 6.3.3 磁盘存储器的连接242
- 6.3.4 固态硬盘243
- 6.4 高速缓冲存储器244
- 6.4.1 程序访问的局部性244
- 6.4.2 cache的基本工作原理246
- 6.4.3 cache行和主存块的映射248
- 6.4.4 cache中主存块的替换算法253
- 6.4.5 cache一致性问题254
- 6.4.6 影响cache性能的因素255
- 6.4.7 IA-32的cache结构举例257
- 6.4.8 cache和程序性能258
- 6.5 虚拟存储器261
- 6.5.1 虚拟存储器的基本概念262
- 6.5.2 虚拟地址空间263
- 6.5.3 虚拟存储器的实现264
- 6.5.4 存储保护271
- *6.6 IA-32/Linux中的地址转换272
- 6.6.1 逻辑地址到线性地址的转换272
- 6.6.2 线性地址到物理地址的转换277
- 6.7 小结280
- 习题280
- 第7章 异常控制流287
- 7.1 进程与进程的上下文切换287
- 7.1.1 程序和进程的概念287
- 7.1.2 进程的逻辑控制流288
- 7.1.3 进程的上下文切换290
- 7.1.4 进程的私有地址空间291
- 7.1.5 程序的加载和运行293
- 7.2 异常和中断295
- 7.2.1 基本概念295
- 7.2.2 异常的分类296
- 7.2.3 中断的分类300
- 7.2.4 异常和中断的响应过程301
- 7.2.5 IA-32的中断向量表303
- 7.2.6 IA-32的中断描述符表303
- 7.2.7 IA-32中异常和中断的处理305
- 7.2.8 Linux对异常和中断的处理306
- 7.2.9 IA-32/Linux的系统调用309
- 7.3 小结312
- 习题312
- 第8章 I/O操作的实现315
- 8.1 I/O子系统概述315
- 8.2 用户空间I/O软件318
- 8.2.1 用户程序中的I/O函数319
- 8.2.2 文件的基本概念320
- 8.2.3 系统级I/O函数322
- 8.2.4 C标准I/O库函数324
- 8.2.5 用户程序中的I/O请求328
- 8.3 I/O硬件与软件的接口330
- 8.3.1 I/O设备330
- 8.3.2 设备控制器331
- 8.3.3 I/O端口及其编址333
- 8.3.4 I/O控制方式334
- 8.4 内核空间I/O软件341
- 8.4.1 与设备无关的I/O软件341
- 8.4.2 设备驱动程序343
- 8.4.3 中断服务程序344
- 8.5 小结346
- 习题347
- 附录A 数字逻辑电路基础352
- 附录B gcc的常用命令行选项366
- 附录C GDB的常用命令368
- 参考文献371