深度探索linux系统虚拟化原理与实现,深度探索Linux系统虚拟
化:原理与实现
前 ⾔
第1章 CPU虚拟化 1
1.1 x86架构CPU虚拟化 1
1.1.1 陷⼊和模拟模型 2
1.1.2 x86架构虚拟化的障碍 2
1.1.3 VMX 3
1.1.4 VCPU⽣命周期 5
1.2 虚拟机切⼊和退出 8
1.2.1 GCC内联汇编 8
1.2.2 虚拟机切⼊和退出及相关的上下⽂保存 10
1.3 陷⼊和模拟 15
1.3.1 访问外设 15
1.3.2 特殊指令 22
1.3.3 访问具有副作⽤的寄存器 27
1.4 对称多处理器虚拟化 28
1.4.1 MP Table 28
1.4.2 处理器启动过程 33
1.5 ⼀个简单KVM⽤户空间实例 41
1.5.1 创建虚拟机实例 43
1.5.2 创建内存 43
1.5.3 创建处理器 44
1.5.4 Guest 46
1.5.5 加载Guest镜像到内存 47
1.5.6 运⾏虚拟机 47
第2章 内存虚拟化 49
2.1 内存寻址 49
2.1.1 段式寻址 50
2.1.2 平坦内存模型 50
2.1.3 页式寻址 54
2.1.4 页式寻址实例 55
2.2 VMM为Guest准备物理内存 61
2.2.1 内核是如何获取内存的 62
2.2.2 建⽴内存段信息 64
2.2.3 准备中断0x15的处理函数以及设置IVT 65 2.2.4 中断0x15的处理函数实现 68
2.2.5 虚拟内存条 69
2.3 实模式Guest的寻址 72
2.3.1 设置CPU运⾏于Virtual-8086模式 74 2.3.2 设置Guest模式下的cr3寄存器 75
2.3.3 虚拟MMU的上下⽂ 75
2.3.4 缺页异常处理 77
2.4 保护模式Guest的寻址 81
2.4.1 偷梁换柱cr3 83
2.4.2 影⼦页表缺页异常处理 86
2.5 EPT 92
2.5.1 设置EPT页表 93
2.5.2 EPT异常处理 95
2.5.3 EPT⽀持下的地址翻译过程 97
第3章 中断虚拟化 99
3.1 虚拟中断 99
3.2 PIC虚拟化 102
3.2.1 可编程中断控制器8259A 103
3.2.2 虚拟设备向PIC发送中断请求 106
3.2.3 记录中断到IRR 107
3.2.4 设置待处理中断标识 108
linux内核设计与实现 pdf
3.2.5 中断评估 110
3.2.6 中断ACK 112
3.2.7 关于EOI的处理 113
3.2.8 中断注⼊ 114
3.3 APIC虚拟化 116
3.3.1 外设中断过程 118
3.3.2 核间中断过程 123
3.3.3 IRQ routing 125
3.4 MSI(X)虚拟化 128
3.4.1 MSI(X)Capability数据结构 129
3.4.2 建⽴IRQ routing表项 131
3.4.3 MSI设备中断过程 132
3.5 硬件虚拟化⽀持 134
3.5.1 虚拟中断寄存器页⾯(virtual-APIC page) 134 3.5.2 Guest模式下的中断评估逻辑 136
3.5.3 posted-interrupt processing 139
第4章 设备虚拟化 142
4.1 设备虚拟化模型演进 142
4.2 PCI配置空间及其模拟 144
4.3 设备透传 152
4.3.1 虚拟配置空间 153
4.3.2 DMA重映射 157
4.3.3 中断重映射 160
4.4 完全虚拟化 166
4.4.1 Guest发送数据 167
4.4.2 Guest接收数据 173
第5章 Virtio虚拟化 182
5.1 I/O栈 182
5.1.1 ⽂件系统 182
5.1.2 通⽤块层 190
5.1.3 块设备驱动 194
5.1.4 page cache 196
5.1.5 bio 201
5.1.6 I/O调度器 202
5.2 Virtio协议 204
5.2.1 描述符表 205
5.2.2 可⽤描述符区域 207
5.2.3 已⽤描述符区域 208
5.2.4 Virtio设备的PCI配置空间 209
5.3 初始化Virtqueue 210
5.4 驱动根据I/O请求组织描述符链 216
5.5 驱动通知设备处理请求 221
5.6 设备处理I/O请求 222
5.7 驱动侧回收I/O请求 226
5.8 设备异步处理I/O 229
5.9 轻量虚拟机退出 231
5.9.1 创建eventfd 232
5.9.2 kvmtool监听eventfd 235
5.9.3 VM exit处理函数唤醒I/O任务 236
第6章 ⽹络虚拟化 239
6.1 基于Overlay的虚拟⽹络⽅案 239
6.1.1 计算节点 240
6.1.2 ⽹络节点 247
6.1.3 Open vSwitch 251
6.2 虚拟机访问外部主机 255
6.2.1 数据包在计算节点Linux⽹桥中的处理 256
6.2.2 数据包在计算节点的Open vSwitch中的处理 257 6.2.3 数据包在⽹络节点的Open vSwitch中的处理 265 6.3 外部主机访问虚拟机 272
6.3.1 数据包在⽹关中的处理过程 273
6.3.2 数据包在⽹络节点的Open vSwitch中的处理 274 6.3.3 数据包在计算节点的Open vSwitch中的处理 279 6.3.4 数据包在Linux⽹桥中的处理 283

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。