《ARM认证工程师应试指南》PDF下载

  • 购买积分:11 如何计算积分?
  • 作  者:奚海蛟,谌利编著
  • 出 版 社:北京:电子工业出版社
  • 出版年份:2013
  • ISBN:9787121213618
  • 页数:254 页
图书介绍:本书主要内容分为两部分:前一部分为AAE认证考试大纲所涉及的各知识点介绍,并指出了各知识点所需要参考的本书第二部分的内容索引;第二部分则为系统知识的主体部分,系统地介绍了ARM Cortex-A系列的架构和处理器、内核模型、汇编指令集、浮点协处理器和NEON技术、中断模型、ARM系统优化、启动代码和系统移植知识、多内核系统架构和对称系统架构、软件并行运算、系统功耗设计概念、系统安全、虚拟化、系统调试模块,以及ARM的bigLITTLE技术等。

第1部分 ARM认证工程师学习指南 2

第1章 学习指南 2

1.1 ARM认证工程师介绍 2

1.2 ARM认证工程师大纲概述 2

1.3 大纲详述 3

1.3.1 实现 3

1.3.2 软件调试 4

1.3.3 架构 9

1.3.4 软件开发 21

1.3.5 系统 30

1.3.6 软件优化 33

第2部分 Cortex-A系列程序员指南 38

第2章 ARM简介 38

2.1 ARM的历史 38

2.2 片上系统(SoC) 39

2.3 嵌入式系统 39

第3章 ARM体系结构和处理器 41

3.1 体系结构的版本 42

3.2 体系结构的历史与扩展 42

3.3 ARM Cortex-A系列处理器架构关键点 45

3.4 处理器和路径 46

3.5 Cortex-A系列处理器 47

3.5.1 Cortex-A5处理器 47

3.5.2 Cortex-A7处理器 48

3.5.3 Cortex-A8处理器 48

3.5.4 Cortex-A9处理器 49

3.5.5 Cortex-A15处理器 50

3.5.6 高通公司的Scorpion 51

第4章 工具、操作系统和开发板 52

4.1 Linux发行版 52

4.1.1 ARM的Linux系统 52

4.1.2 Linux术语 53

4.1.3 嵌入式Linux 54

4.1.4 板级支持包 54

4.1.5 Linaro 54

4.2 有用工具 55

4.3 ARM处理器的软件工具链 56

4.4 ARM DS5 58

4.5 示例平台 60

第5章 ARM寄存器、模式和指令集 61

5.1 指令集 61

5.2 模式 62

5.3 寄存器 62

5.4 指令流水线 64

5.4.1 并发流水线 66

5.4.2 寄存器重命名 66

5.5 分支预测 67

5.5.1 返回栈 67

5.5.2 程序员的观点 68

第6章 汇编语言简介 69

6.1 与其他汇编语言的对比 69

6.2 指令集 70

6.3 GNU汇编器简介 71

6.3.1 激活GNU汇编器 71

6.3.2 GNU汇编器语法 71

6.3.3 程序段 72

6.3.4 编译器的伪指令 72

6.3.5 表达式 73

6.3.6 GNU工具的命名惯例 73

6.4 ARM工具汇编语言 73

6.4.1 ARM汇编语法 74

6.4.2 标签 74

6.4.3 伪指令 74

6.5 交互工作 75

6.6 识别汇编代码 76

第7章 ARM/Thumb的统一汇编语言指令 77

7.1 指令集基础 77

7.1.1 常量的值 77

7.1.2 条件执行 78

7.1.3 状态标志位和条件码 80

7.2 数据处理操作 80

7.3 乘法运算 82

7.4 存储器指令 83

7.4.1 寻址方式 84

7.4.2 多指令传送 84

7.5 分支指令 85

7.6 整数SIMD指令 85

7.6.1 整数寄存器SIMD指令 86

7.6.2 整数寄存器SIMD乘法 86

7.6.3 绝对差之和 87

7.6.4 数据打包和解包 87

7.6.5 字节选择 88

7.7 饱和算法 88

7.8 杂项指令 88

7.8.1 协处理器指令 88

7.8.2 协处理器15(CP15) 89

7.8.3 SVC 90

7.8.4 修改PSR 91

7.8.5 位操作 91

7.8.6 高速缓存预加载 91

7.8.7 字节反转 91

7.8.8 其他指令 92

第8章 浮点 93

8.1 浮点运算的基本知识以及IEEE 754标准 93

8.1.1 舍入算法 95

8.1.2 ARM VFP 95

8.1.3 指令 97

8.1.4 启用VFP 97

8.2 GCC对VFP的支持 97

8.3 ARM编译器对VFP的支持 98

8.4 Linux对VFP的支持 98

8.5 浮点优化 99

第9章 NEON简介 100

9.1 SIMD 100

9.2 NEON结构概述 101

9.2.1 VFP的通用性 102

9.2.2 数据类型 102

9.2.3 NEON寄存器 102

9.2.4 NEON指令集 104

第10章 高速缓存 106

10.1 为什么高速缓存卓有成效 107

10.2 高速缓存的缺点 107

10.3 存储器层次 107

10.4 高速缓存的结构 108

10.4.1 高速缓存控制器 109

10.4.2 直接映射高速缓存 109

10.4.3 Set关联高速缓存 110

10.4.4 高速缓存术语 111

10.4.5 现实中的例子 112

10.4.6 虚拟和物理的标签和索引 112

10.5 缓存策略 113

10.5.1 分配策略 113

10.5.2 替换策略 113

10.5.3 写策略 114

10.6 写缓冲区和取缓冲区 114

10.7 缓存的性能和命中率 115

10.8 无效化和清空缓存 115

10.9 一致点和统一点 116

10.10 二级缓存控制器 117

10.11 奇偶校验和ECC高速缓存 117

第11章 内存管理单元 118

11.1 虚拟内存 119

11.2 一级页表 120

11.3 二级页表 122

11.4 转换查找缓冲区 123

11.5 TLB的一致性 124

11.6 页大小的选择 124

11.7 内存属性 125

11.7.1 内存访问权限 125

11.7.2 内存类型 125

11.7.3 域 126

11.8 多任务和操作系统使用的页表 127

11.8.1 地址空间ID 127

11.8.2 页表基址寄存器0和1 128

11.8.3 快速上下文切换扩展 128

11.9 大物理地址扩展 129

第12章 内存访问排序 131

12.1 ARM存储排序模型 132

12.1.1 Strongly-ordered和Device 内存 132

12.1.2 Normal内存 133

12.2 内存隔离 134

12.2.1 内存隔离使用示例 135

12.2.2 用隔离避免死锁 136

12.2.3 WFE和WFI的隔离 137

12.2.4 Linux下使用的隔离 137

12.3 缓存一致性问题 138

12.3.1 复制代码的问题 138

12.3.2 编译器的重新排序优化 138

第13章 异常处理 139

13.1 异常类型 140

13.2 异常模式一览 141

13.3 进入异常处理程序 142

13.4 退出异常处理程序 143

13.5 向量表 143

13.6 返回指令 143

第14章 中断处理 144

14.1 外部中断请求 144

14.1.1 中断分配 145

14.1.2 简单中断处理 145

14.1.3 中断嵌套处理 145

14.2 通用中断控制器 146

14.2.1 配置 147

14.2.2 初始化顺序 147

14.2.3 中断处理 147

第15章 其他异常处理程序 149

15.1 中止异常处理程序 149

15.2 未定义指令处理 149

15.3 SVC异常处理 150

15.4 Linux的异常程序流 150

15.4.1 引导过程 151

15.4.2 中断调度 151

第16章 引导代码 152

16.1 启动一个裸机系统 152

16.2 配置 156

16.3 引导Linux 156

16.3.1 复位异常处理 157

16.3.2 引导程序 157

16.3.3 初始化内存系统 157

16.3.4 内核镜像 157

16.3.5 内核参数 158

16.3.6 内核入口 158

16.3.7 平台的具体行为 158

16.3.8 内核启动代码 158

第17章 移植 160

17.1 大小端 160

17.2 对齐 163

17.3 其他的C代码移植问题 164

17.3.1 unsigned char和signed char 164

17.3.2 编译器packing结构体 164

17.3.3 堆栈的使用 165

17.3.4 其他问题 166

17.4 移植ARM的汇编代码到ARMv-7 166

17.5 移植ARM代码到Thumb架构 167

17.5.1 使用PC作为操作数 167

17.5.2 分支和互连 167

17.5.3 操作数组合 168

17.5.4 ARM/Thumb的其他差异 169

第18章 应用程序二进制接口 170

18.1 过程调用标准 170

18.1.1 VFP和NEON寄存器的使用 173

18.1.2 链接 174

18.1.3 栈和堆 175

18.1.4 返回结果 175

18.2 C和汇编代码混合编程 175

第19章 性能分析 178

19.1 分析器输出 179

19.2 Gprof 179

19.3 OProfile 180

19.4 DS-5 Streamline 180

19.5 ARM性能监视器 181

19.6 Linux的Perf事件 182

19.7 Ftrace 182

19.8 Valgrind和Cachegrind 182

第20章 优化运行在ARM处理器的代码 183

20.1 编译器优化 184

20.1.1 函数内联 184

20.1.2 消除公共子表达式 184

20.1.3 循环展开 185

20.1.4 GCC优化选项 186

20.1.5 armcc优化选项 187

20.2 ARM存储系统优化 187

20.2.1 数据缓存优化 188

20.2.2 循环分片 188

20.2.3 循环交换 189

20.2.4 结构对齐 189

20.2.5 关联性的影响 190

20.2.6 优化指令缓存的使用 190

20.2.7 优化L2和外部缓存的使用 191

20.2.8 优化TLB的使用 191

20.2.9 数据中止优化 191

20.2.10 预取内存块访问 192

20.3 修改源代码 192

20.3.1 循环结束 192

20.3.2 循环合并 192

20.3.3 减少堆和栈的使用 193

20.3.4 变量选择 193

20.3.5 指针别名 194

20.3.6 除法和取模 195

20.3.7 外部数据 195

20.3.8 内联或嵌入汇编 195

20.3.9 复杂寻址模式 195

20.3.10 非对齐访问 196

20.3.11 链接器优化 196

第21章 编写NEON代码 197

21.1 NEON C编译器和汇编器 197

21.1.1 矢量化 197

21.1.2 NEON库 197

21.1.3 内部函数 198

21.1.4 C的NEON类型 198

21.1.5 变量和常量 199

21.1.6 从C/C++代码生成NEON指令 199

21.1.7 NEON汇编器和.ABI的限制 200

21.1.8 检测NEON 200

21.2 优化NEON汇编代码 201

21.2.1 内存访问优化 201

21.2.2 对齐 202

21.2.3 调度 202

21.3 NEON省电 202

第22章 多重处理简介 204

22.1 多处理器ARM系统 205

22.2 对称多重处理 206

22.3 非对称多重处理AMP 207

第23章 SMP架构考虑 209

23.1 缓存一致性 209

23.1.1 MESI协议 210

23.1.2 MOESI协议 210

23.1.3 ACP 211

23.2 TLB和缓存维护广播 211

23.3 在SMP系统中处理中断 212

23.4 独占访问 212

23.5 引导SMP系统 215

23.5.1 处理器ID 215

23.5.2 Linux中SMP启动 216

23.6 私有内存区域 216

第24章 并行软件 218

24.1 分解法 218

24.2 线程模型 219

24.3 线程库 220

24.3.1 线程间的通信 222

24.3.2 线程性能 222

24.3.3 线程关联 222

24.4 Linux内核中的同步机制 222

24.4.1 结束(Completions)机制 222

24.4.2 自旋锁 223

24.4.3 信号量 223

24.4.4 无锁同步 223

第25章 并行软件的问题 224

25.1 线程安全性和可重入性 224

25.2 性能问题 225

25.2.1 带宽问题 225

25.2.2 线程依赖性 225

25.2.3 缓存抖动 226

25.2.4 伪共享 226

25.2.5 死锁和活锁 226

25.3 剖析SMP系统 226

第26章 电源管理 227

26.1 待机模式 228

26.2 休眠模式 228

26.3 汇编语言电源指令 229

26.4 动态电压和频率调整 229

第27章 安全性 230

27.1 可信区的硬件架构 230

27.2 多处理器系统的安全性扩展 232

27.3 正常世界和安全世界的相互作用 233

第28章 虚拟化 235

28.1 用于ARMv7-A的虚拟化扩展 236

28.1.1 在ARMv7-A的虚拟化扩展中的权限模型 236

28.1.2 超级管理模式 236

28.1.3 内存转换 237

28.2 超级监控程序异常模型 237

28.3 虚拟化和ARM安全扩展之间的关系 238

第29章 big.LITTLE简介 239

29.1 big.LITTLE配置 239

29.2 big.LITTLE系统的结构 240

29.3 big.LITTLE中的执行模型 241

29.3.1 big.LITTLE迁移模型 241

29.3.2 集群迁移 242

29.3.3 CPU迁移 243

29.4 big.LITTLE MP操作 244

第30章 调试 245

30.1 ARM调试硬件 245

30.2 ARM跟踪硬件 246

30.3 调试监视器 248

30.4 调试Linux应用程序 248

30.5 DS-5的调试和跟踪 249

30.5.1 使用DS-5调试Linux应用程序 250

30.5.2 调试Linux内核模块 250

30.5.3 使用DS-5调试Linux内核 251

30.5.4 使用DS-5调试多线程应用程序 251

30.5.5 调试共享库 251

30.5.6 DS-5的跟踪支持 251

参考文献 254