本书从程序员视角出发,基于单处理器计算机系统各抽象层之间的关联关系,以可执行文件的生成和加载、程的正常执行和异常/中断处理、应用程序中I/O操作的底层实现机制、硬件与操作系统之间的协同关系、程序的调试和性能优化、网络编程、多线程并发编程为主要内容,重构建高级语言程序和指令集体系结构、编译器、汇编器、器、操作系统、底层微架构等位于计算机系统各抽象层之间的系统级关联知识体系。本书共12章,主要包括数据的表示和运算、程序的转换及机器级表示、程序的和加载执行、存储器层次结构、虚拟存储器、程控制和异常控制流、I/O操作的实现、程序性能的优化、网络编程和并发编程等内容。
售 价:¥
纸质售价:¥66.10购买纸书
温馨提示:数字商品不支持退换货,不提供源文件,不支持导出打印
为你推荐
前折页
书名页
出版说明
前言
第1章 计算机系统概述
1.1 计算机系统的基本工作原理
1.1.1 冯·诺依曼结构的基本思想
1.1.2 冯·诺依曼机的基本结构
1.1.3 程序和指令的执行过程
1.2 程序的开发与运行
1.2.1 程序设计语言和翻译程序
1.2.2 从源程序到可执行文件
1.2.3 可执行文件的启动和执行
1.3 计算机系统的层次结构
1.3.1 计算机系统抽象层的转换
1.3.2 计算机系统核心层之间的关联
1.3.3 计算机系统的不同用户
1.4 本章小结
习题
第2章 数据的机器级表示与处理
2.1 数制和编码
2.1.1 信息的二进制编码
2.1.2 进位计数制
2.1.3 定点数与浮点数
2.1.4 定点数的编码表示
2.2 整数的表示
2.2.1 无符号整数和带符号整数
2.2.2 C语言中的整数及其相互转换
2.3 浮点数的表示
2.3.1 浮点数的表示范围
2.3.2 浮点数的规格化
2.3.3 IEEE 754浮点数标准
2.3.4 C语言中的浮点数类型
2.4 非数值数据的编码表示
2.4.1 逻辑值
2.4.2 西文字符
2.4.3 汉字字符
2.5 数据的宽度和存储
2.5.1 数据的宽度和单位
2.5.2 数据的存储和排列顺序
2.6 数据的基本运算
2.6.1 按位运算和逻辑运算
2.6.2 左移和右移运算
2.6.3 位扩展和位截断运算
2.6.4 整数加减运算
2.6.5 整数乘除运算
2.6.6 常量的乘除运算
2.6.7 浮点数运算
2.7 本章小结
习题
第3章 程序转换与指令系统
3.1 程序转换概述
3.1.1 机器指令和汇编指令
3.1.2 指令集体系结构概述
3.1.3 指令系统设计风格
3.1.4 机器代码的生成过程
3.2 IA-32/x86-64指令系统
3.2.1 操作数类型
3.2.2 寄存器组织
3.2.3 寻址方式
3.2.4 机器指令格式
3.3 IA-32/x86-64常用指令类型及操作
3.3.1 传送指令
3.3.2 定点算术运算指令
3.3.3 按位运算指令
3.3.4 程序执行流控制指令
*3.3.5 x87浮点处理指令
*3.3.6 MMX/SSE/AVX指令
*3.3.7 x86-64中的浮点处理指令
3.4 本章小结
习题
第4章 程序的机器级表示
4.1 过程调用的机器级表示
4.1.1 IA-32的过程调用约定
4.1.2 变量的作用域和生存期
4.1.3 按值传递参数和按地址传递参数
4.1.4 递归过程调用
4.1.5 非静态局部变量的存储分配
4.1.6 x86-64的过程调用
*4.1.7 x86-64过程的浮点参数传递
4.2 流程控制语句的机器级表示
4.2.1 选择语句的机器级表示
4.2.2 循环语句的机器级表示
4.3 复杂数据类型的分配和访问
4.3.1 数组的分配和访问
4.3.2 结构体数据的分配和访问
4.3.3 联合体数据的分配和访问
4.3.4 数据的对齐
4.4 越界访问和缓冲区溢出
4.4.1 数组的越界访问
4.4.2 缓冲区溢出攻击
4.4.3 对缓冲区溢出攻击的防范
4.5 本章小结
习题
第5章 程序的链接与加载执行
5.1 编译、汇编和静态链接
5.1.1 编译和汇编
5.1.2 可执行文件的生成
5.2 目标文件格式
5.2.1 ELF目标文件格式
5.2.2 可重定位文件格式
5.2.3 可执行文件格式
5.2.4 可执行文件的存储器映像
5.3 符号表和符号解析
5.3.1 符号和符号表
5.3.2 符号解析
5.3.3 与静态库的链接
5.4 重定位
5.4.1 重定位信息
5.4.2 重定位过程
*5.5 动态链接
*5.5.1 动态链接的特性
*5.5.2 程序加载时的动态链接
*5.5.3 程序运行时的动态链接
*5.5.4 位置无关代码
*5.6 库打桩机制
*5.6.1 编译时打桩
*5.6.2 链接时打桩
*5.6.3 运行时打桩
5.7 可执行文件的加载和执行
5.7.1 可执行文件的加载
5.7.2 程序和指令的执行过程
5.7.3 CPU的基本功能和基本组成
5.7.4 打断程序正常执行的事件
5.8 本章小结
习题
第6章 存储器层次结构
6.1 存储器概述
6.1.1 存储器的分类
6.1.2 主存储器的组成和基本操作
6.1.3 层次化存储结构
6.1.4 程序访问的局部性
6.2 半导体随机存取存储器
6.2.1 基本存储元件
6.2.2 DRAM芯片
6.2.3 SDRAM芯片技术
6.2.4 内存条及其与CPU的连接
6.2.5 存储器芯片的扩展
6.2.6 主存控制器
6.3 外部存储器
6.3.1 磁盘存储器的结构
6.3.2 磁盘存储器的性能指标
*6.3.3 闪速存储器和U盘
*6.3.4 固态硬盘
6.4 cache
6.4.1 cache的基本工作原理
6.4.2 cache的映射方式
6.4.3 cache的替换算法
6.4.4 cache的写策略
*6.4.5 cache的设计
*6.4.6 cache和程序性能
6.5 本章小结
习题
第7章 虚拟存储器
7.1 虚拟存储器概述
7.1.1 虚拟存储器的基本概念
7.1.2 进程的虚拟地址空间
7.1.3 虚拟存储器的基本类型
7.2 页式虚拟存储器的实现
7.2.1 页表和页表项的结构
7.2.2 页式存储管理总体结构
7.2.3 页式虚拟存储地址转换
7.2.4 快表
7.3 具有TLB和cache的存储系统
7.3.1 层次化存储系统结构
7.3.2 CPU访存过程
7.3.3 cache的4种查找方式
7.4 存储保护机制
*7.5 IA-32+Linux中的地址转换
7.5.1 逻辑地址到线性地址的转换
7.5.2 线性地址到物理地址的转换
*7.6 实例:Intel Core i7+Linux存储系统
7.6.1 Core i7的层次化存储器结构
7.6.2 Core i7的地址转换机制
7.6.3 Linux系统的虚拟存储管理
*7.7 堆区动态分配
7.7.1 动态存储分配
7.7.2 显式动态分配
7.7.3 隐式动态分配
7.7.4 与存储访问相关的常见错误
7.8 本章小结
习题
第8章 进程与异常控制流
8.1 进程与进程的上下文切换
8.1.1 程序和进程的概念
8.1.2 进程的逻辑控制流
8.1.3 进程的上下文切换
8.2 异常和中断
8.2.1 异常和中断的基本概念
8.2.2 异常的分类
8.2.3 中断的分类
8.2.4 异常和中断的响应
*8.3 IA-32/x86-64+Linux的异常和中断机制
8.3.1 中断向量表和中断描述符表
8.3.2 异常和中断的处理
8.3.3 系统调用机制
*8.4 Linux中的进程控制
8.4.1 进程的创建、休眠和终止
8.4.2 进程ID的获取和子进程的回收
8.4.3 程序的加载运行
*8.5 Linux中的信号与非本地跳转
8.5.1 Linux中的信号处理机制
8.5.2 信号的发送
8.5.3 信号捕获和信号处理
8.5.4 非本地跳转处理
8.6 本章小结
习题
第9章 I/O操作的实现
9.1 I/O子系统概述
9.2 用户空间I/O软件
9.2.1 用户程序中的I/O函数
9.2.2 文件的基本概念
9.2.3 系统级I/O函数
9.2.4 C标准I/O库函数
9.3 内核空间I/O软件
9.3.1 设备无关的I/O软件层
9.3.2 设备驱动程序
9.3.3 中断服务程序
9.4 I/O硬件与软件的接口
9.4.1 I/O设备
9.4.2 基于总线的互连结构
9.4.3 I/O接口的功能和结构
9.4.4 I/O端口及其编址
9.4.5 中断系统
9.5 hello程序运行过程综述
9.5.1 shell进程等待用户键盘输入
9.5.2 用户从键盘输入命令行
9.5.3 唤醒并切换至shell进程
9.5.4 使用fork()函数创建子进程
9.5.5 hello进程的加载和执行
9.6 本章小结
习题
第10章 程序性能的优化
10.1 计算机系统性能评估
10.1.1 计算机性能的定义
10.1.2 计算机性能的测试
10.1.3 用指令执行速度进行性能评估
10.1.4 用基准程序进行性能评估
10.1.5 阿姆达尔定律
10.2 程序性能瓶颈分析
10.2.1 基于事件统计报告的性能瓶颈分析
10.2.2 基于踪迹的性能瓶颈分析
10.3 基于分层的性能优化技术分类
10.3.1 软件层次
10.3.2 指令集和硬件层次
10.4 编写适合编译优化的源代码
10.4.1 优化函数调用
10.4.2 优化指针别名
10.5 本章小结
习题
第11章 网络编程
11.1 客户端-服务器模型和网络I/O
11.1.1 案例:远程函数调用
11.1.2 网络I/O
11.2 局域网和广域网
11.2.1 局域网
11.2.2 交换机
11.2.3 广域网与互联网
11.3 IP网络通信协议
11.3.1 IP地址
11.3.2 子网掩码与子网划分
11.3.3 路由与转发
11.3.4 TCP/IP
11.4 套接字编程
11.4.1 套接字接口
11.4.2 套接字地址与接口函数
11.4.3 套接字编程实例
11.5 本章小结
习题
第12章 并发编程
12.1 并发编程概述
12.2 多进程与多线程
12.2.1 多进程并发编程
12.2.2 线程与线程的上下文切换
12.2.3 POSIX线程库函数
12.2.4 多线程编程实例
12.3 同步与互斥
12.3.1 互斥锁
12.3.2 信号量
12.3.3 线程安全和可重入性
12.3.4 死锁
12.4 并行编程
12.4.1 并行程序设计思想
12.4.2 并行程序性能评估
12.5 本章小结
习题
附录A gcc的常用命令行选项
附录B GDB的常用命令
参考文献
后折页
买过这本书的人还买过
读了这本书的人还在读
同类图书排行榜