读书频道 > 系统 > 其他综合 > 虚拟化技术原理与实现
目录
2012-10-19 11:13:05     我来说两句 
收藏    我要投稿   

本文所属图书 > 虚拟化技术原理与实现

本书对云计算中关键技术之一的虚拟化技术进行了深入的分析,从x86 计算机体系结构以及操作系统的工作原理出发,介绍了虚拟化技术原理以及业界主流虚拟化软件产品,并以Xen、KVM 开源软件为例分析了虚拟化软件的...  立即去当当网订购
第一篇  云计算与虚拟化技术
第1章 虚拟化技术基本原理    2
1.1  云计算与虚拟化技术   3
1.2  x86和非x86体系结构基础       4
1.2.1  x86的发展历程 4
1.2.2  x86-64       6
1.2.3  x86内存架构    7
1.2.4  x86-64的基本模式   23
1.2.5  x86-64的寄存器组   25
1.2.6  中断与异常       26
1.2.7  I/O架构     31
1.2.8  DMA  32
1.2.9  时钟   33
1.3  操作系统与虚拟化      34
1.3.1  操作系统   35
1.3.2  进程   35
1.3.3  系统虚拟化       38
1.3.4  系统虚拟化的发展历程   39
1.3.5  可虚拟化条件   41
1.3.6  虚拟化的原理与分类       43
1.4  VMM技术架构分类    45
1.4.1  Hypervisor模型 46
1.4.2  宿主(Hosted)模型 47
1.4.3  混合模型   48
1.5  本章小结      49
第2章 虚拟化实现技术架构    50
2.1  处理器虚拟化实现技术      52
2.1.1  Intel VT     53
2.1.2  AMD SVM 55
2.1.3  vCPU  55
2.2  中断虚拟化实现技术   56
2.3  内存虚拟化实现技术   58
2.3.1  影子页表   60
2.3.2  Intel EPT    65
2.3.3  AMD NPT  67
2.4  I/O设备虚拟化实现技术    68
2.4.1  Intel VT-d   69
2.4.2  DMA重映射     70
2.4.3  I/O页表     73
2.4.4  AMD IOMMU   74
2.5  网络虚拟化技术   76
2.5.1  虚拟通道   77
2.6  时间虚拟化技术   79
2.6.1  操作系统和客户机的时间概念       79
2.6.2  客户机时间概念的实现   82
2.7  主流虚拟化产品及其特点   84
2.7.1  Xen     84
2.7.2  VMware     86
2.7.3  Hyper –V   87
2.7.4  KVM  88
2.8  本章小结      90
第二篇  Xen虚拟化技术篇
第3章 Xen软件系统原理 92
3.1  Xen软件模块结构       93
3.1.1  Xen Hypervisor  93
3.1.2  特权虚拟域0(Dom0)   94
3.1.3  独立设备驱动域(IDD) 95
3.1.4  非特权虚拟域U(DomU)  96
3.1.5  硬件虚拟域(HVM)      96
3.2  Xen系统启动工作原理及流程   96
3.2.1  系统引导过程   97
3.2.2  Hypervisor启动与初始化过程 98
3.2.3  Dom0启动过程 99
3.2.4  DomU的启动    99
3.3  Xen CPU虚拟化工作原理  100
3.3.1  x86体系虚拟化存在的问题    100
3.3.2  CPU虚拟化—半虚拟化(又称为泛虚拟化)      102
3.3.3  CPU虚拟化技术—硬件虚拟化技术支持的全虚拟化   103
3.4  Xen内存虚拟化工作原理   105
3.4.1  内存虚拟化—直接模式   106
3.4.2  内存虚拟化—影子模式   107
3.5  I/O虚拟化工作原理    108
3.5.1  半虚拟化I/O     108
3.5.2  全虚拟化I/O     109
3.6  Xen虚拟机(DomU)生命周期管理 110
3.7  本章小结      112
第4章 Xen Hypervisor技术实现     113
4.1  Xen Hypervisor关键技术概述    114
4.2  Hypercall      114
4.2.1  Hypercall的实现机制      115
4.2.2  自定义Hypercall的方法  118
4.2.3  应用程序使用Hypercall的方法      120
4.3  事件通道      121
4.3.1  事件通道的初始化   121
4.3.2  事件通道的绑定       122
4.3.3  发送事件通知   136
4.3.4  事件通知的处理       138
4.4  数据共享      142
4.4.1  授权表(Grant table)     142
4.4.2  XenStore和XenBus  146
4.4.3  分离设备驱动   149
4.5  本章小结      154
第三篇 KVM虚拟化技术篇
第5章 qemu-kvm虚拟化解决方案  156
5.1  概述      157
5.2  内核模块组成概述      158
5.3  KVM所提供的API     162
5.4  KVM内核模块重要的数据结构 168
5.4.1  KVM结构体     168
5.4.2  kvm_vcpu结构体     169
5.4.3  kvm_x86_ops结构体       169
5.4.4  KVM API中重要的结构体      171
5.5  KVM内核模块重要流程的分析 173
5.5.1  初始化流程       173
5.5.2  虚拟机的创建   175
5.5.3  vCPU的创建     177
5.5.4  vCPU的运行     180
5.6  qemu-kvm软件架构分析    184
5.6.1  QEMU的三种运行模式   184
5.6.2  libvirt和virt-manager      185
5.6.3  KVM的调试接口     186
5.7 本章小结 187
第6章 qemu-kvm原理与分析  188
6.1  QEMU软件架构  189
6.1.1  qemu-kvm的配置与编译 189
6.1.2  qemu-kvm的架构与配置 190
6.2  QEMU组件  190
6.2.1  模块模型   190
6.2.2  libkvm模块       193
6.2.3  virtio组件  196
6.3  基于KVM的QEMU PC Emulator     199
6.3.1  KVM中的Machine模块  199
6.3.2  基于KVM加速支持的CPU虚拟化模块       207
6.3.3  虚拟机的内存管理   216
6.3.4  I/O管理     223
6.4  本章小结      225
第四篇 虚拟化软件开放接口
第7章 Xen API接口技术及实现     228
7.1  Xen Management API接口概述  229
7.2  XML-RPC工作原理    230
7.2.1  XML-RPC概述 231
7.2.2  XML-RPC请求 232
7.2.3  XML-RPC响应 234
7.3  Xen Managemnet API的实现      236
7.3.1  C语言和Python语言的扩展与嵌入      236
7.3.2  Xen Management API类的定义      237
7.3.3  Xen Management API处理流程分析      238
7.4  本章小结      242
第8章 libvirt虚拟化控制中间件     243
8.1  libvirt概述    244
8.1.1  libvirt简介及使用样例    244
8.1.2  基于libvirt所开发的开源应用       245
8.1.3  安装与配置       245
8.2  libvirt架构与开发       247
8.2.1  libvirt架构说明 247
8.2.2  libvirt API控制接口 250
8.2.3  libvirt的主机域管理 254
8.2.4  libvirt的网络架构    254
8.2.5  libvirt的存储管理    256
8.3  基于libvirt的XML配置解析    256
8.3.1  XML配置格式简析  256
8.3.2  针对Xen的libvirt配置详解   265
8.3.3  针对KVM/QEMU的libvirt配置详解    271
8.4  本章小结      282
参考文献       283
图目录
 
图1-1 x86的发展历程      4
图1-2  线性地址空间构造  9
图1-3  分段机制流程分布  11
图1-4  段选择符的结构     12
图1-5  段寄存器的构造     13
图1-6  段描述符的结构     14
图1-7  通过段选择符索引段描述符表     16
图1-8  分页机制流程分布  17
图1-9  未启用PAE的4KB页——二级页表   18
图1-10 启用PAE的4KB页——三级页表       20
图1-11  四级页表结构       23
图1-12  APIC系统架构     28
图1-13  中断门的格式       30
图1-14  陷阱门的格式       30
图1-15  DMA传输示意图  33
图1-16  系统虚拟化结构   38
图1-17  系统虚拟化的发展历程       39
图1-18  虚拟环境的组成   41
图1-19  Hypervisor模型的VMM      46
图1-20  宿主模型的VMM 47
图1-21  混合模型的VMM 48
 
图2-1  Intel VT的组成      51
图2-2  VT-x 的基本思想   54
图2-3  物理平台的中断架构     57
图2-4  虚拟机的中断架构  57
图2-5  内存虚拟化示意图  59
图2-6  影子页表的作用     60
图2-7  客户机操作系统页表与影子页表  61
图2-8  EPT原理图     66
图2-9  传统分页技术下的地址转换  67
图2-10  嵌套分页技术下的地址转换       68
图2-11  使用VT-d后访问内存架构  69
图2-12  BDF结构      70
图2-13  根条目的结构       71
图2-14  上下文条目的结构       72
图2-15  根条目表和上下文条目表构成的两级结构       73
图2-16  DMA重映射的4KB页面地址转换过程    74
图2-17  IOMMU技术示意图    75
图2-18  虚拟化网卡的基本原理       77
图2-19  SR-IOV原理图     78
图2-20  操作系统的时间概念   80
图2-21  客户机时间概念1
图2-22  客户机时间概念2(客户机时间与实际时间统一) 81
图2-23  客户机被调度出去情况下时间概念的实现       83
图2-24  客户机被调度出去情况下中断注入的微观示意图   84
图2-25  Xen架构图    85
图2-26  微软Hyper-V架构图   88
图2-27  KVM架构图  89
 
图3-1  Xen软件体系结构图      93
图3-2  Xm、Xend、Xen Hypervisor调用关系图    94
图3-3  Xen系统启动流程图      97
图3-4  x86体系、RISC体系指令示意图 102
图3-5  Xen系统特权级分布图(IA32保护模式) 103
图3-6  基于VT-x技术的虚拟机生命周期       104
图3-7  直接模式下客户机操作系统对页表项的读/写操作    106
图3-8  虚拟机页表与影子页表的对应关系     108
图3-9  虚拟I/O驱动分离模型  109
图3-10  Xen网络I/O全虚拟化模型 110
图3-11  Xen虚拟机状态转移图 111
 
图4-1  Hypercall的作用     114
图4-2  分离设备驱动处理I/O请求流程图      150
 
图5-1  KVM和Xen虚拟化方案比较       157
图5-2  qemu-kvm虚拟机的运行时进程信息   158
图5-3  KVM的用户空间访问接口   162
图5-4  KVM模块初始化阶段   173
图5-5  KVM的初始化流程       174
图5-6  QEMU的三种模块架构 184
图5-7  基于libvirt和virt-manager的虚拟机管理工具   186
图5-8  KVM调试信息图   186
 
图6-1  qemu-kvm的默认参数   189
图6-2  QEMU系统中模块的相互关系     192
图6-3  设备层半虚拟化与全虚拟化架构图     196
图6-4  virtio驱动程序架构       197
图6-5  KVM的CPU执行架构  207
图6-6  KVM的内存映射原理   216
图6-7  Guest OS内存访问流程示意图     217
图6-8  EPT内存管理模式  217
图6-9  qemu-kvm的I/O处理流程    224
 
图7-1  Xen Management API分层架构图 229
图7-2  XML-RPC远程调用图   231
图7-3  Xen Management API函数调用流程图 241
 
图8-1  没有使用libvirt的虚拟机管理方式     247
图8-2  使用libvirt的虚拟机管理方式     248
图8-3  使用libvirt的远程虚拟机管理方式     249
图8-4  libvirt API 与相关驱动程序的层次结构      249
图8-5  高级libvirt API示意图  250
图8-6  libvirt驱动结构示意图   253
图8-7  libvirt远程接入示意图   253
图8-8  libvirt网络架构逻辑示意图   255
图8-9  libvirt网络架构物理示意图   255
表目录
 
表1-1  x86-64所支持模式的特点总结     25
表1-2  x86-64的寄存器组 26
表1-3  中断与异常     31
 
表 3-1  Xen虚拟机(DomU)状态说明  111
 
表5-1  KVM API类型       162
表5-2  system ioctl指令字  163
表5-3  vm ioctl指令字       164
表5-4  kvm_run结构体的重要字段  165
表5-5  vcpu ioctl指令字(寄存器配置类)  165
表5-6  vcpu ioctl指令字(中断和控制类)  166
表5-7  vcpu ioctl指令字(中断和控制类)  167
表5-8  vcpu ioctl指令字(中断和控制类)  167
 
表6-1  qemu-kvm中Configure的配置参数说明     189
 
表7-1  参数<value>数据类型    233
代码目录
 
代码 3-1  非Xen Linux GRUB条目脚本  98
代码 3-2  Xen Linux GRUB条目脚本      98
代码 3-3  显示虚拟机的状态信息    112
 
代码4-1  Xen的超级调用hypercall  115
代码4-2  _hypercall0()函数的调用    117
代码4-3  hypercall_page_initialise函数    118
代码4-4  注册一个新的系统调用号  118
代码4-5  更新系统调用表  119
代码4-6  /xen/include/asm-x86/hypercall.h中定义新函数      119
代码4-7  /xen/arch/x86/XX.c中定义新函数     119
代码4-8  privcmd系统调用结构体   120
代码4-9  调用privcmd驱动程序      120
代码4-10  domain_create调用evtchn_init进行事件通道
代码4-11  evtchn_init函数 122
代码4-12  evtchn_op结构体      123
代码4-13  do_event_channel_op 123
代码4-14  evtchn_alloc_unbound结构体参数  125
代码4-15  evtchn_alloc_unbound处理函数      125
代码4-16  evtchn_bind_interdomain结构体     126
代码4-17  evtchn_bind_interdomain处理函数  127
代码4-18  evtchn_bind_virq结构体与处理函数      129
代码4-19  evtchn_bind_pirq结构体  131
代码4-20  evtchn_bind_pirq处理函数      131
代码4-21  evtchn_bind_ipi结构体与处理函数 133
代码4-22  evtchn_bind_vcpu结构体与处理函数     134
代码4-23  evtchn_send结构体   136
代码4-24  evtchn_send处理函数      137
代码4-25  Xen对事件通知的处理    139
代码4-26  evtchn_device_upcall处理函数       139
代码4-27  grant_entry结构体    142
代码4-28  network_alloc_rx_buffers调用gnttab_grant_foreign_
transfer_ref实现页面传送    143
代码4-29  gnttab_grant_foreign_transfer_ref设置标识位为
GTF_accept_transfer      144
代码4-30  blkif_queue_request调用gnttab_grant_foreign_
access_ref共享内存      144
代码4-31  gnttab_grant_foreign_transfer_ref设置标识位为
GTF_permit_access       145
代码4-32  观察窗的设置   147
代码4-33  Xenbus.c中的netback和blkback    150
代码4-34  blkback_probe    151
代码4-35  setup_blkring建立I/O环和事件通道     153
 
代码5-1  KVM的Makefile文件       158
代码5-2  svm.c中的kvm_x86_ops初始化代码片段      170
代码5-3  kvm_x86_ops赋值      171
代码5-4  kvm_chardev_ops 171
代码5-5  kvm_vm_fops结构体  172
代码5-6  kvm_vcpu_fops结构体      172
代码5-7  KVM_CREATE_VM实现代码  175
代码5-8  kvm_arch_hardware_enable函数代码       176
代码5-9  调用anon_inode_getfd创建kvm-vm 177
代码5-10  kvm_vm_ioctl_create_vcpu代码      178
代码5-11  __vcpu_run函数       181
 
代码6-1  模块初始化声明代码  192
代码6-2  module_init代码 192
代码6-3  kvm_create_vm函数代码   193
代码6-4  kvm_callbacks结构体 194
代码6-5  kvm_notify函数  198
代码6-6  qemu-kvm的启动示例指令       199
代码6-7  pc_machine结构体     201
代码6-8  pc_init1实际的初始化函数       202
代码6-9  kvm_init_vcpu代码    208
代码6-10  ap_main_loop函数    209
代码6-11  kvm_create_vcpu函数      210
代码6-12  kvm_main_loop_cpu函数 212
代码6-13  kvm_run函数    212
代码6-14  CPUPhysMemoryClient结构体       218
代码6-15  kvm_set_phys_mem函数  218
代码6-16  kvm_set_user_memory_region代码 222
 
代码7-1  XML-RPC请求示例   232
代码7-2  结构体示例  233
代码7-3  数组的<data>元素      234
代码7-4  XML-RPC应答示例   234
代码7-5  XML-RPC调用失败示例   235
代码7-6  Xen Management API所涉及的类以及实现方法     237
代码7-7  xen_vm_create调用VM.create来创建虚拟机  238
代码7-8  Session结构体    239
代码7-9  调用xen_session_login_with_password函数创建会话    239
代码7-10  xen_session_login_with_password    239
代码7-11  call_raw函数     240
 
代码8-1  解压源码包,并进入解压后的文件目录  246
代码8-2  编译安装     246
代码8-3  GIT更新      246
代码8-4  用autogen.sh命令进行编译      247
代码8-5  域的通用元数据XML格式       257
代码8-6  网络的通用元数据XML格式   258
代码8-7  虚拟网络与物理LAN连接的XML配置格式  258
代码8-8  基于NAT的虚拟网络的XML配置  259
代码8-9  存储池通用元数据的XML格式       260
代码8-10  存储卷的通用元数据的XML格式 260
代码8-11  基于file存储池的XML配置  261
代码8-12  基于iscsi存储池的XML配置 262
代码8-13  存储卷的XML配置 262
代码8-14  qcow格式的XML示例    263
代码8-15  node device的XML格式示例 263
代码8-16  Xen连接URI示例   265
代码8-17  XM配置文件转换为libvirt域XML描述形式      265
代码8-18  libvirt域XML描述形式转换为XM配置文件      266
代码8-19  半虚拟化的客户机的XML配置示例     267
代码8-20  半虚拟化客户机的直接内核引导   268
代码8-21  全虚拟化客户机的BIOS引导 269
代码8-22  全虚拟化客户机的直接内核引导   270
代码8-23  libvirt驱动URI连接示例       272
代码8-24  设置存储磁盘映像的目录       274
代码8-25  guest可以访问的共享设备      278
代码8-26  安装cgroups设备管理器 278
代码8-27  QEMU args转换成domain XML    279
代码8-28  domain XML转换成QEMU args    280
代码8-29  x86_64上QEMU 模拟的客户机    281
代码8-30  i686上KVM硬件增速的客户机    281
点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:前言
下一篇:第三篇 KVM虚拟化技术篇
相关文章
图文推荐
2.7.12 使用仿真器查
2.7.11 栈和寄存器组
2.7.8 出栈
2.7.7 压栈
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站