第1章 虚拟化技术的现状 1
1.1什么是虚拟化技术 1
1.1.1 CPU的虚拟化 2
1.1.2 I/O的虚拟化 3
1.2为什么要虚拟化 4
1.3历史上第一台虚拟机 5
1.4 x86架构虚拟化的问题 6
1.5一些解决x86架构虚拟化问题的方案 6
1.5.1二进制翻译 7
1.5.2泛虚拟化 8
1.5.3硬件辅助虚拟化 10
1.6 Xen的理念 11
1.6.1方案和机制的分离 11
1.6.2做得越少越好 12
1.7 Xen的系统结构 13
1.7.1 Hypervisor,操作系统,应用程序之间的关系 13
1.7.2 Domain 0的角色 15
1.7.3非特权级的Domain 17
1.7.4 HVM的Domain 18
1.7.5 Xen的结构配置 18
第2章 探索Xen虚拟体系结构 22
2.1作为泛虚拟化客户端启动 22
2.2利用特权级限制操作 23
2.3用超级调用取代特权指令 24
2.4探索Xen事件模型 27
2.5与共享内存进行通信 28
2.6拆分设备驱动模型 29
2.7 VM生命周期 30
2.8练习:最简单的Xen内核 31
2.8.1客户机入口点 33
2.8.2把所有内容放在一起 35
第3章 理解Shared Info Pages 39
3.1获取启动时钟信息 39
3.2 Shared Info Page 42
3.3 Xen中的时间管理 44
3.4练习:实现函数gettimeofday() 45
第4章 使用授权表(Grant Table) 49
4.1内存共享 49
4.1.1映射(Mapping)一个页面 51
4.1.2 domain间的数据传递(Transferring) 52
4.2设备I/O环 54
4.3授权以及撤销授权 55
4.4练习:映射授权页面(granted page) 57
4.5练习:在VM之间共享内存 59
第5章 Xen的内存管理 62
5.1 x86环境下的内存管理 62
5.2伪物理地址模型(Pseudo-Physical Memory Model) 65
5.3 32位x86系统中的分段模式 66
5.4使用Xen Memory Assist 67
5.5使用Ballon Driver控制内存使用 69
5.6其他内存操作 70
5.7更新页表 73
5.7.1创建新的虚拟机(VM)实例 77
5.7.2处理页故障 77
5.7.3暂停(suspend)、恢复和迁移 78
5.8练习:映射Shared Info Page 79
第6章 理解设备驱动 80
6.1分离设备模型 80
6.2将驱动程序移出Domain 0 82
6.3理解共享存储器环形缓冲区 83
6.3.1分析Xen的实现 85
6.3.2通过内存栅障(Memory Barriers)实现顺序操作 87
6.4通过XenBus连接设备 88
6.5处理来自消息的通知 90
6.6通过XenStore进行配置 90
6.7练习:控制台设备 91
第7章 使用事件通道 96
7.1事件和中断 96
7.2处理陷阱(Trap) 96
7.3事件类型 99
7.4请求事件 100
7.5绑定事件通道到VCPU上 103
7.6绑定通道上的操作 104
7.7获取通道状态 105
7.8屏蔽事件 106
7.9事件和调度 108
7.10示例:一个完整的控制台驱动 109
第8章 深入学习XenStore 116
8.1 XenStore接口 116
8.2浏览 XenStore 117
8.3 XenStore设备 119
8.4读和写一个键 121
8.4.1用户空间方法 122
8.4.2从内核调用的方法 124
8.5其他操作 132
第9章 支持核心设备 133
9.1虚拟块设备驱动 133
9.1.1设置块设备 134
9.1.2数据传输 136
9.2使用Xen网络 139
9.2.1虚拟网络接口驱动 140
9.2.2设置虚拟接口 140
9.2.3发送和接收 141
9.2.4 NetChanne12 144
第10章 其他Xen设备 147
10.1 CD的支持 147
10.2虚拟帧缓冲器(Frame Buffer) 147
10.3 TPM驱动 152
10.4原生硬件 152
10.4.1 PCI支持 153
10.4.2 USB设备 155
10.5添加新的设备类型 155
10.5.1广播设备 156
10.5.2设置环形缓冲区 156
10.5.3困难 157
10.5.4访问设备 158
10.5.5设计后端驱动 159
第11章 Xen API 162
11.1 XML-RPC 162
11.1.1 XML-RPC数据类型 162
11.1.2远程过程调用 164
11.2探索Xen接口层次 164
11.3 Xen API类 166
11.4 Xend的功能 169
11.5 Xm命令行 171
11.6 Xen CIM提供者 172
11.7练习:枚举正在运行的虚拟机 173
11.8总结 177
第12章 虚拟机调度 178
12.1调度器接口概述 178
12.2历史上的调度器 180
12.2.1 SEDF 181
12.2.2 Credit调度器 182
12.3使用调度器API 183
12.3.1运行一个调度器 184
12.3.2 Domain0交互 187
12.4练习:添加一个新的调度器 188
12.5总结 191
第13章 HVM 192
13.1运行未经修改的操作系统 192
13.2 Intel VT-x和AMD SVM 194
13.3 HVM设备支持 195
13.4混合虚拟化 196
13.5 BIOS仿真 199
13.6设备模型和传统的I/O仿真 200
13.7半虚拟化I/O 201
13.8 Xen中HVM支持 202
第14章 未来的发展方向 206
14.1真实到虚拟,周而复始 206
14.2仿真和虚拟化 207
14.3移植的努力 207
14.4桌面 209
14.5功耗管理 211
14.6关于Domain0的问题 213
14.7 Stub域 215
14.8新的设备 216
14.9特殊的架构 217
14.10前景 219
附录 泛虚拟化客户操作系统移植概述 221
A.1 Domain创建工具(Domain Builder) 221
A.2启动环境 222
A.3设置虚拟中断描述符表(IDT) 222
A.4页表管理 223
A.5驱动 223
A.6 Domain0的责任 224
A.7效率 224
A.8小结 225