注重体验与质量的电子书资源下载网站
分类于: 职场办公 设计
简介
计算机系统基础 第2版 豆 0.0分
资源最后更新于 2020-07-25 14:09:44
作者:袁春风
出版社::机械工业出版社
出版日期:2018-01
ISBN:9787111604891
文件格式: pdf
标签: 计算机体系结构 计算机科学 Linux CS 计算机 编程 C++ Assembly
简介· · · · · ·
本书主要介绍与计算机系统相关的核心概念,解释这些概念如何相互关联并终影响程序执行的结果和性能。本书共分8章,主要内容包括数据的表示和运算、程序的转换及机器级表示、程序的链接、程序的执行、存储器层次结构、虚拟存储器、异常控制流和I/O操作的实现等。本书将计算机系统每个抽象 层涉及的重要概念通过程序的开发和运行串联起来,内容详尽,反映现实,概念清楚,通俗易懂,实例丰富,并提供大量典型习题以供读者练习。本书可以作为计算机专业本科或大专院校学生计算机系统方面的基础性教材,也可以作为有关专业研究生或计算机技术人员的参考书。
----------
前言
后 PC 时代的到来,使得原先基于 PC 而建立起来的专业教学内容已经远远不能反映现代社会对计算机专业人才的培养要求,原先计算机专业人才培养强调“程序”设计也变为更强调“系统”设计。这需要我们重新规划教学课程体系...
目录
丛书序言
序 言
前 言
第一部分 系统概述和可执行目标文件的生成
第 1 章 计算机系统概述 2
1.1 计算机基本工作原理 2
1.1.1 冯·诺依曼结构基本思想 2
1.1.2 冯·诺依曼机基本结构 3
1.1.3 程序和指令的执行过程 4
1.2 程序的开发与运行 7
1.2.1 程序设计语言和翻译程序 7
1.2.2 从源程序到可执行文件 9
1.2.3 可执行文件的启动和执行 10
1.3 计算机系统的层次结构 12
1.3.1 计算机系统抽象层的转换 12
1.3.2 计算机系统核心层之间的关联 14
1.3.3 计算机系统的不同用户 16
1.4 计算机系统性能评价 18
1.4.1 计算机性能的定义 19
1.4.2 计算机性能的测试 19
1.4.3 用指令执行速度进行性能评估 21
1.4.4 用基准程序进行性能评估 22
1.4.5 Amdahl 定律 23
1.5 本书的主要内容和组织结构 24
1.6 小结 27
习题 27
第 2 章 数据的机器级表示与处理 30
2.1 数制和编码 30
2.1.1 信息的二进制编码 30
2.1.2 进位计数制 32
2.1.3 定点与浮点表示 36
2.1.4 定点数的编码表示 36
2.2 整数的表示 41
2.2.1 无符号整数和带符号整数的表示 41
2.2.2 C 语言中的整数及其相互转换 42
2.3 浮点数的表示 44
2.3.1 浮点数的表示范围 44
2.3.2 浮点数的规格化 45
2.3.3 IEEE 754 浮点数标准 45
2.3.4 C 语言中的浮点数类型 49
2.4 十进制数的表示 51
2.4.1 用 ASCII 码字符表示 51
2.4.2 用 BCD 码表示 51
2.5 非数值数据的编码表示 52
2.5.1 逻辑值 52
2.5.2 西文字符 52
2.5.3 汉字字符 53
2.6 数据的宽度和存储 55
2.6.1 数据的宽度和单位 55
2.6.2 数据的存储和排列顺序 57
2.7 数据的基本运算 61
2.7.1 按位运算和逻辑运算 61
2.7.2 左移运算和右移运算 61
2.7.3 位扩展运算和位截断运算 63
2.7.4 整数加减运算 64
2.7.5 整数乘除运算 68
2.7.6 常量的乘除运算 71
2.7.7 浮点数运算 72
2.8 小结 78
习题 79
第 3 章 程序的转换及机器级表示 87
3.1 程序转换概述 87
3.1.1 机器指令及汇编指令 88
3.1.2 指令集体系结构 89
3.1.3 生成机器代码的过程 89
3.2 IA-32 指令系统概述 94
3.2.1 数据类型及其格式 95
3.2.2 寄存器组织和寻址方式 96
3.2.3 机器指令格式 101
3.3 IA-32 常用指令类型及其操作 103
3.3.1 传送指令 103
3.3.2 定点算术运算指令 106
3.3.3 按位运算指令 109
3.3.4 控制转移指令 110
3.3.5 x87 浮点处理指令 115
3.3.6 MMX/SSE 指令集 116
3.4 C 语言程序的机器级表示 118
3.4.1 过程调用的机器级表示 118
3.4.2 选择语句的机器级表示 132
3.4.3 循环结构的机器级表示 136
3.5 复杂数据类型的分配和访问 139
3.5.1 数组的分配和访问 139
3.5.2 结构体数据的分配和访问 144
3.5.3 联合体数据的分配和访问 146
3.5.4 数据的对齐 148
3.6 越界访问和缓冲区溢出 151
3.6.1 缓冲区溢出 151
3.6.2 缓冲区溢出攻击 153
3.6.3 缓冲区溢出攻击的防范 155
3.7 兼容 IA-32 的 64 位系统 158
3.7.1 x86-64 的发展简史 158
3.7.2 x86-64 的基本特点 159
3.7.3 x86-64 的基本指令和对齐 159
3.7.4 x86-64 的过程调用 161
3.7.5 x86-64 的浮点操作与 SIMD 指令 165
3.8 小结 166
习题 167
第 4 章 程序的链接 182
4.1 编译、汇编和静态链接 182
4.1.1 编译和汇编 182
4.1.2 可执行目标文件的生成 184
4.2 目标文件格式 186
4.2.1 ELF 目标文件格式 186
4.2.2 可重定位目标文件格式 187
4.2.3 可执行目标文件格式 190
4.2.4 可执行文件的存储器映像 192
4.3 符号表和符号解析 193
4.3.1 符号和符号表 193
4.3.2 符号解析 196
4.3.3 与静态库的链接 199
4.4 重定位 201
4.4.1 重定位信息 202
4.4.2 重定位过程 202
4.5 动态链接 206
4.5.1 动态链接的特性 207
4.5.2 程序加载时的动态链接 207
4.5.3 程序运行时的动态链接 209
4.5.4 位置无关代码 210
4.6 小结 214
习题 215
第二部分 可执行目标文件的运行
第 5 章 程序的执行 222
5.1 程序执行概述 222
5.1.1 程序及指令的执行过程 222
5.1.2 CPU 的基本功能和组成 224
5.1.3 打断程序正常执行的事件 226
5.2 数据通路基本结构和工作原理 227
5.2.1 数据通路基本结构 227
5.2.2 数据通路的时序控制 229
5.2.3 总线式数据通路 230
5.2.4 单周期数据通路 235
5.3 流水线方式下指令的执行 238
5.3.1 指令流水线的基本原理 238
5.3.2 适合流水线的指令集特征 241
5.3.3 CISC 和 RISC 风格指令集 242
5.3.4 指令流水线的实现 245
5.3.5 高级流水线实现技术 248
5.4 小结 249
习题 250
第 6 章 层次结构存储系统 253
6.1 存储器概述 253
6.1.1 存储器的分类 253
6.1.2 主存储器的组成和基本操作 255
6.1.3 存储器的主要性能指标 255
6.1.4 各类存储元件的特点 256
6.1.5 存储器的层次结构 257
6.2 主存与 CPU 的连接及其读写操作 257
6.2.1 主存芯片技术 257
6.2.2 主存与 CPU 的连接及其读写 260
6.2.3 “装入”指令和“存储”指令操作过程 263
6.3 硬盘存储器 266
6.3.1 磁盘存储器的结构 266
6.3.2 磁盘存储器的性能指标 268
6.3.3 磁盘存储器的连接 269
6.3.4 固态硬盘 270
6.4 高速缓冲存储器 271
6.4.1 程序访问的局部性 271
6.4.2 cache 的基本工作原理 273
6.4.3 cache 行和主存块的映射 275
6.4.4 cache 中主存块的替换算法 281
6.4.5 cache 一致性问题 282
6.4.6 影响 cache 性能的因素 283
6.4.7 IA-32 的 cache 结构举例 284
6.4.8 cache 和程序性能 285
6.5 虚拟存储器 289
6.5.1 虚拟存储器的基本概念 289
6.5.2 虚拟地址空间 290
6.5.3 虚拟存储器的实现 291
6.5.4 存储保护 299
* 6.6 IA-32 + Linux 中的地址转换 300
6.6.1 逻辑地址到线性地址的转换 301
6.6.2 线性地址到物理地址的转换 306
* 6.7 实例:Intel Core i7 + Linux 存储系统 308
6.7.1 Core i7 的层次化存储器结构 308
6.7.2 Core i7 的地址转换机制 308
6.7.3 Linux 系统的虚拟存储管理 311
6.8 小结 314
习题 315
第 7 章 异常控制流 322
7.1 进程与进程的上下文切换 322
7.1.1 程序和进程的概念 322
7.1.2 进程的逻辑控制流 323
7.1.3 进程的上下文切换 325
7.1.4 进程的存储器映射 326
7.1.5 程序的加载和运行 329
7.2 异常和中断 332
7.2.1 基本概念 333
7.2.2 异常的分类 334
7.2.3 中断的分类 337
7.2.4 异常和中断的响应过程 338
* 7.3 IA-32 + Linux 中的异常和中断 340
7.3.1 IA-32 的中断向量表 340
7.3.2 IA-32 的中断描述符表 341
7.3.3 IA-32 中异常和中断的处理 342
7.3.4 Linux 对异常和中断的处理 344
7.3.5 IA-32 + Linux 的系统调用 348
7.4 小结 350
习题 351
第 8 章 I/O 操作的实现 354
8.1 I/O 子系统概述 354
8.2 用户空间 I/O 软件 357
8.2.1 用户程序中的 I/O 函数 358
8.2.2 文件的基本概念 359
8.2.3 系统级 I/O 函数 361
8.2.4 C 标准 I/O 库函数 363
8.2.5 用户程序中的 I/O 请求 368
8.3 I/O 硬件与软件的接口 370
8.3.1 I/O 设备 370
8.3.2 基于总线的互连结构 371
8.3.3 I/O 接口的功能和结构 374
8.3.4 I/O 端口及其编址 376
8.3.5 I/O 控制方式 377
8.4 内核空间 I/O 软件 384
8.4.1 与设备无关的 I/O 软件 384
8.4.2 设备驱动程序 386
8.4.3 中断服务程序 387
8.5 小结 389
习题 390
附录 A 数字逻辑电路基础 395
附录 B GCC 的常用命令行选项 409
附录 C GDB 的常用命令 411
参考文献 414
序 言
前 言
第一部分 系统概述和可执行目标文件的生成
第 1 章 计算机系统概述 2
1.1 计算机基本工作原理 2
1.1.1 冯·诺依曼结构基本思想 2
1.1.2 冯·诺依曼机基本结构 3
1.1.3 程序和指令的执行过程 4
1.2 程序的开发与运行 7
1.2.1 程序设计语言和翻译程序 7
1.2.2 从源程序到可执行文件 9
1.2.3 可执行文件的启动和执行 10
1.3 计算机系统的层次结构 12
1.3.1 计算机系统抽象层的转换 12
1.3.2 计算机系统核心层之间的关联 14
1.3.3 计算机系统的不同用户 16
1.4 计算机系统性能评价 18
1.4.1 计算机性能的定义 19
1.4.2 计算机性能的测试 19
1.4.3 用指令执行速度进行性能评估 21
1.4.4 用基准程序进行性能评估 22
1.4.5 Amdahl 定律 23
1.5 本书的主要内容和组织结构 24
1.6 小结 27
习题 27
第 2 章 数据的机器级表示与处理 30
2.1 数制和编码 30
2.1.1 信息的二进制编码 30
2.1.2 进位计数制 32
2.1.3 定点与浮点表示 36
2.1.4 定点数的编码表示 36
2.2 整数的表示 41
2.2.1 无符号整数和带符号整数的表示 41
2.2.2 C 语言中的整数及其相互转换 42
2.3 浮点数的表示 44
2.3.1 浮点数的表示范围 44
2.3.2 浮点数的规格化 45
2.3.3 IEEE 754 浮点数标准 45
2.3.4 C 语言中的浮点数类型 49
2.4 十进制数的表示 51
2.4.1 用 ASCII 码字符表示 51
2.4.2 用 BCD 码表示 51
2.5 非数值数据的编码表示 52
2.5.1 逻辑值 52
2.5.2 西文字符 52
2.5.3 汉字字符 53
2.6 数据的宽度和存储 55
2.6.1 数据的宽度和单位 55
2.6.2 数据的存储和排列顺序 57
2.7 数据的基本运算 61
2.7.1 按位运算和逻辑运算 61
2.7.2 左移运算和右移运算 61
2.7.3 位扩展运算和位截断运算 63
2.7.4 整数加减运算 64
2.7.5 整数乘除运算 68
2.7.6 常量的乘除运算 71
2.7.7 浮点数运算 72
2.8 小结 78
习题 79
第 3 章 程序的转换及机器级表示 87
3.1 程序转换概述 87
3.1.1 机器指令及汇编指令 88
3.1.2 指令集体系结构 89
3.1.3 生成机器代码的过程 89
3.2 IA-32 指令系统概述 94
3.2.1 数据类型及其格式 95
3.2.2 寄存器组织和寻址方式 96
3.2.3 机器指令格式 101
3.3 IA-32 常用指令类型及其操作 103
3.3.1 传送指令 103
3.3.2 定点算术运算指令 106
3.3.3 按位运算指令 109
3.3.4 控制转移指令 110
3.3.5 x87 浮点处理指令 115
3.3.6 MMX/SSE 指令集 116
3.4 C 语言程序的机器级表示 118
3.4.1 过程调用的机器级表示 118
3.4.2 选择语句的机器级表示 132
3.4.3 循环结构的机器级表示 136
3.5 复杂数据类型的分配和访问 139
3.5.1 数组的分配和访问 139
3.5.2 结构体数据的分配和访问 144
3.5.3 联合体数据的分配和访问 146
3.5.4 数据的对齐 148
3.6 越界访问和缓冲区溢出 151
3.6.1 缓冲区溢出 151
3.6.2 缓冲区溢出攻击 153
3.6.3 缓冲区溢出攻击的防范 155
3.7 兼容 IA-32 的 64 位系统 158
3.7.1 x86-64 的发展简史 158
3.7.2 x86-64 的基本特点 159
3.7.3 x86-64 的基本指令和对齐 159
3.7.4 x86-64 的过程调用 161
3.7.5 x86-64 的浮点操作与 SIMD 指令 165
3.8 小结 166
习题 167
第 4 章 程序的链接 182
4.1 编译、汇编和静态链接 182
4.1.1 编译和汇编 182
4.1.2 可执行目标文件的生成 184
4.2 目标文件格式 186
4.2.1 ELF 目标文件格式 186
4.2.2 可重定位目标文件格式 187
4.2.3 可执行目标文件格式 190
4.2.4 可执行文件的存储器映像 192
4.3 符号表和符号解析 193
4.3.1 符号和符号表 193
4.3.2 符号解析 196
4.3.3 与静态库的链接 199
4.4 重定位 201
4.4.1 重定位信息 202
4.4.2 重定位过程 202
4.5 动态链接 206
4.5.1 动态链接的特性 207
4.5.2 程序加载时的动态链接 207
4.5.3 程序运行时的动态链接 209
4.5.4 位置无关代码 210
4.6 小结 214
习题 215
第二部分 可执行目标文件的运行
第 5 章 程序的执行 222
5.1 程序执行概述 222
5.1.1 程序及指令的执行过程 222
5.1.2 CPU 的基本功能和组成 224
5.1.3 打断程序正常执行的事件 226
5.2 数据通路基本结构和工作原理 227
5.2.1 数据通路基本结构 227
5.2.2 数据通路的时序控制 229
5.2.3 总线式数据通路 230
5.2.4 单周期数据通路 235
5.3 流水线方式下指令的执行 238
5.3.1 指令流水线的基本原理 238
5.3.2 适合流水线的指令集特征 241
5.3.3 CISC 和 RISC 风格指令集 242
5.3.4 指令流水线的实现 245
5.3.5 高级流水线实现技术 248
5.4 小结 249
习题 250
第 6 章 层次结构存储系统 253
6.1 存储器概述 253
6.1.1 存储器的分类 253
6.1.2 主存储器的组成和基本操作 255
6.1.3 存储器的主要性能指标 255
6.1.4 各类存储元件的特点 256
6.1.5 存储器的层次结构 257
6.2 主存与 CPU 的连接及其读写操作 257
6.2.1 主存芯片技术 257
6.2.2 主存与 CPU 的连接及其读写 260
6.2.3 “装入”指令和“存储”指令操作过程 263
6.3 硬盘存储器 266
6.3.1 磁盘存储器的结构 266
6.3.2 磁盘存储器的性能指标 268
6.3.3 磁盘存储器的连接 269
6.3.4 固态硬盘 270
6.4 高速缓冲存储器 271
6.4.1 程序访问的局部性 271
6.4.2 cache 的基本工作原理 273
6.4.3 cache 行和主存块的映射 275
6.4.4 cache 中主存块的替换算法 281
6.4.5 cache 一致性问题 282
6.4.6 影响 cache 性能的因素 283
6.4.7 IA-32 的 cache 结构举例 284
6.4.8 cache 和程序性能 285
6.5 虚拟存储器 289
6.5.1 虚拟存储器的基本概念 289
6.5.2 虚拟地址空间 290
6.5.3 虚拟存储器的实现 291
6.5.4 存储保护 299
* 6.6 IA-32 + Linux 中的地址转换 300
6.6.1 逻辑地址到线性地址的转换 301
6.6.2 线性地址到物理地址的转换 306
* 6.7 实例:Intel Core i7 + Linux 存储系统 308
6.7.1 Core i7 的层次化存储器结构 308
6.7.2 Core i7 的地址转换机制 308
6.7.3 Linux 系统的虚拟存储管理 311
6.8 小结 314
习题 315
第 7 章 异常控制流 322
7.1 进程与进程的上下文切换 322
7.1.1 程序和进程的概念 322
7.1.2 进程的逻辑控制流 323
7.1.3 进程的上下文切换 325
7.1.4 进程的存储器映射 326
7.1.5 程序的加载和运行 329
7.2 异常和中断 332
7.2.1 基本概念 333
7.2.2 异常的分类 334
7.2.3 中断的分类 337
7.2.4 异常和中断的响应过程 338
* 7.3 IA-32 + Linux 中的异常和中断 340
7.3.1 IA-32 的中断向量表 340
7.3.2 IA-32 的中断描述符表 341
7.3.3 IA-32 中异常和中断的处理 342
7.3.4 Linux 对异常和中断的处理 344
7.3.5 IA-32 + Linux 的系统调用 348
7.4 小结 350
习题 351
第 8 章 I/O 操作的实现 354
8.1 I/O 子系统概述 354
8.2 用户空间 I/O 软件 357
8.2.1 用户程序中的 I/O 函数 358
8.2.2 文件的基本概念 359
8.2.3 系统级 I/O 函数 361
8.2.4 C 标准 I/O 库函数 363
8.2.5 用户程序中的 I/O 请求 368
8.3 I/O 硬件与软件的接口 370
8.3.1 I/O 设备 370
8.3.2 基于总线的互连结构 371
8.3.3 I/O 接口的功能和结构 374
8.3.4 I/O 端口及其编址 376
8.3.5 I/O 控制方式 377
8.4 内核空间 I/O 软件 384
8.4.1 与设备无关的 I/O 软件 384
8.4.2 设备驱动程序 386
8.4.3 中断服务程序 387
8.5 小结 389
习题 390
附录 A 数字逻辑电路基础 395
附录 B GCC 的常用命令行选项 409
附录 C GDB 的常用命令 411
参考文献 414