失效链接处理 |
奔跑吧Linux内核(第2版)卷1:基础架构 PDF 下载
下载地址:
版权归出版社和原作者所有,链接已删除,请购买正版
用户下载说明:
电子版仅供预览,下载后24小时内务必删除,支持正版,喜欢的请购买正版书籍:
http://product.dangdang.com/11418996551.html
相关截图: 资料简介: 相对于Linux 4.0内核,Linux 5.0内核中增加了很多新特性,并且内核的实现已经发生了很大变化。本书旨在介绍Linux内核中核心模块的实现,主要内容包括ARM64架构,ARM64在Linux内核中的实现,内存管理的理论知识和案例,以及进程管理的基础知识与案例等。本书适合Linux系统开发人员、嵌入式系统开发人员及Android开发人员阅读。 资料目录: 第 1章 处理器架构 1
1.1 处理器架构介绍 3
1.1.1 精简指令集和复杂指令集 3
1.1.2 大/小端字节序 3
1.1.3 一条存储读写指令的
执行全过程 4
1.1.4 内存屏障产生的原因 8
1.1.5 高速缓存的工作方式 10
1.1.6 高速缓存的映射方式 11
1.1.7 组相联的高速缓存 13
1.1.8 PIPT和VIVT的区别 14
1.1.9 页表的创建和查询过程 17
1.1.10 TLB 21
1.1.11 MESI协议 21
1.1.12 高速缓存伪共享 26
1.1.13 高速缓存在Linux内核中的
应用 27
1.1.14 ARM的大/小核架构 28
1.1.15 高速缓存一致性和一致性
内存模型 30
1.1.16 高速缓存的回写策略和
替换策略 30
1.1.17 NUMA 31
1.1.18 ARM处理器设计 32
1.1.19 进展 33
1.2 ARM64架构 34
1.2.1 ARMv8-A架构 34
1.2.2 采用ARMv8架构的常见处理器
内核 35
1.2.3 ARMv8架构中的基本概念 35
1.2.4 ARMv8处理器执行状态 36
1.2.5 ARMv8支持的数据宽度 36
1.2.6 不对齐访问 37
1.3 ARMv8寄存器 37
1.3.1 通用寄存器 37
1.3.2 处理器状态 38
1.3.3 特殊寄存器 39
1.3.4 系统寄存器 41
1.4 A64指令集 42
1.4.1 常用的算术和搬移指令 42
1.4.2 乘法和除法指令 43
1.4.3 移位操作指令 45
1.4.4 位操作指令 45
1.4.5 条件操作 47
1.4.6 内存加载指令 48
1.4.7 多字节内存加载和存储指令 50
1.4.8 非特权访问级别的加载和存储
指令 50
1.4.9 内存屏障指令简介 51
1.4.10 独占内存访问指令 51
1.4.11 跳转与比较指令 52
1.4.12 异常处理指令 53
1.4.13 系统寄存器访问指令 54
1.5 GCC内联汇编 55
1.6 函数调用标准和栈布局 57
1.7 ARM64异常处理 59
1.7.1 异常类型 59
1.7.2 同步异常和异步异常 60
1.7.3 异常发生后的处理 60
第 2章 ARM64在Linux内核中的实现 62
2.1 ARM64内存管理 63
2.1.1 页表 63
2.1.2 页表映射 64
2.1.3 页表项描述符 65
2.1.4 Linux内核中的页表 68
2.1.5 ARM64内核内存分布 74
2.1.6 案例分析:ARM64的页表映射
过程 78
2.2 高速缓存管理 84
2.3 TLB管理 87
2.4 内存属性 90
2.4.1 内存属性 91
2.4.2 高速缓存共享属性 94
2.5 内存屏障 95
2.5.1 内存屏障指令 95
2.5.2 加载-获取屏障原语与存储-
释放屏障原语 96
2.6 Linux内核汇编代码分析 97
2.6.1 链接文件基础知识 97
2.6.2 vmlinux.lds.S文件分析 99
2.6.3 启动汇编代码 102
2.6.4 创建恒等映射和内核映像
映射 106
2.6.5 __cpu_setup函数分析 114
2.6.6 __primary_switch函数分析 117
2.7 关于页表的常见疑问 120
2.7.1 关于下一级页表基地址 121
2.7.2 软件遍历页表 121
第3章 内存管理之预备知识 124
3.1 从硬件角度看内存管理 126
3.1.1 内存管理的“远古时代” 126
3.1.2 分段机制 127
3.1.3 分页机制 128
3.1.4 虚拟地址到物理地址的
转换 128
3.2 从软件角度看内存管理 129
3.2.1 从Linux系统使用者的角度看
内存管理 129
3.2.2 从Linux应用程序开发人员的
角度看内存管理 130
3.2.3 从内存分布的角度看
内存管理 131
3.2.4 从进程的角度看内存管理 131
3.2.5 从Linux内核的角度看
内存管理 135
3.3 物理内存管理之预备知识 136
3.3.1 内存架构之UMA和NUMA 136
3.3.2 内存管理之数据结构 138
3.3.3 内存大小 140
3.3.4 物理内存映射 141
3.3.5 zone初始化 143
3.3.6 空间划分 145
3.3.7 物理内存初始化 146
第4章 物理内存与虚拟内存 152
4.1 页面分配之快速路径 153
4.1.1 分配物理页面的接口函数 154
4.1.2 分配掩码 155
4.1.3 alloc_pages()函数 158
4.1.4 get_page_from_freelist()函数 162
4.1.5 zone_watermark_fast()函数 164
4.1.6 rmqueue()函数 165
4.1.7 释放页面 167
4.1.8 小结 170
4.2 slab分配器 170
4.2.1 slab分配器产生的背景 170
4.2.2 创建slab描述符 173
4.2.3 slab分配器的内存布局 176
4.2.4 配置slab描述符 178
4.2.5 分配slab对象 180
4.2.6 释放slab缓存对象 183
4.2.7 slab分配器和伙伴系统的接口
函数 185
4.2.8 管理区 185
4.2.9 kmalloc() 188
4.2.10 小结 189
4.3 vmalloc() 190
4.4 虚拟内存管理之进程地址空间 194
4.4.1 进程地址空间 194
4.4.2 mm_struct数据结构 195
4.4.3 VMA数据结构 197
......
|