学习资料:
鸟哥的 Linux 私房菜-- 利用 Xen 设计虚拟机器
http://www.ha97.com/book/vbird_linux/linux_enterprise/xen.htm
参考:
【 1 】
该文档对 Xen Hypervisor (管理程序)和其相关的工具以及所有支撑一个虚拟化环境所必需的应用程序做了一个较高层的,对于架构的综述。
Xen Components
一个 Xen 虚拟环境包括几个重要组成部分:
Xen Hypervisor
Domain 0
Domain Management and Control ( Xen DM&C )
Domain U ( Dom U ) PV Guest
Domain U ( Dom U ) HVM Guest
下图描述了这几部分之间的关系:
Xen hypervisor 是对这个软件的最基本、最底层的抽象层。它主要负责针对运行在该硬件设备之上的多个虚拟机的 CPU 轮转,内存划分的工作。 Hypervisor 不仅仅对底层硬件设备进行了抽象,而且同时控制着虚拟机的执行。它不负责联网、外存、显示以及任何其他 IO 功能。
Domain 0
Domain 0 是 一个修改过的 Linxu kernel ,一个运行在 Xen hypervisor 之上的独特的虚拟机,它可以控制物理 IO 资源,并且同时与其他运行于该平台上的虚拟机进行交互 ( Domain U : PV and HVM Guests )。所有的 Xen 虚拟环境都需要一个运行着的 Domain 0 来启动其他的虚拟机。
Domain 0 包括了两个驱动,来支持来自于其他虚拟机的网络和本地磁盘请求。 (见下图); Network Backend Driver 和 Block Backend Driver 。 NB Driver 直接与本地网络硬件进行交互,来处理所有来自于 Domain U 的虚拟机请求。 BB Driver 直接与本地磁盘进行交互,基于 Domain U 的请求来从驱动器读写数据。
所有的运行于 Xen hypervisor 之上的半虚拟机( Paravirtualization ),都叫做 Domain U PV Guests ,他们( PV Guests )运行的是修改后的 Linux OS , Solaris , FreeBSD 和其他 UNIX OS 。所有运行于 Xen hypervisor 之上的全虚拟机都是叫做 Domain U HVM Guests ,并且可以运行标准的 Windows 或者任何没有修改过的操作系统。
Domain U PV Guests 知道不能直接访问硬件,并且知道在本地机器上运行的其他虚拟机。 Domain U HVM Guests 不知道它在分享处理器时间以及其他虚拟机的存在。
PV Guest 包含有两个针对网络和磁盘访问的驱动, PV Network Driver 和 PV Block Driver
HVM Guest 没有 PV 驱动安装在虚拟机上,但是针对每一个启动的 HVM Guest 都有一个特殊的 daemon---- Qemu-dm 。 Qemu-dm 支持 HVM Guests 进行网络互联和磁盘访问请求。
HVM Guests 必须初始化,以便于软件能够添加到 HVM Guests , Xen Virtual firmware 来模拟 BIOS 来启动操作系统。(?? The Domain U HVM Guest must initialize as it would on a typical machine so software is added to the Domain U HVM Guest , Xen virtual firmware, to simulate the BIOS an operating system would expect on startup. )。
很多的 Linux daemons 都被开源社区定义为域管理和控制的。这些服务支持对整个虚拟环境的管理和控制,存在于 Domain 0 的虚拟机中。
Xend
Xend daemon 是一个 python 程序,它被认为是 Xen 环境的系统管理员。 它利用 libxenctrl 库来发起对 Xen hypervisor 的请求。所有由 Xend 所处理的请求都是通过一个 XML RPC 接口,这些 RPC 请求来自于 Xm 工具。
Xm
一个命令行工具,它获取用户输入,通过 XML RPC 传递给 Xend 。
Xenstored
Xenstored daemon 维护一个注册信息,这些信息包括了内存和事件管道( event channel ),其将 Domain 0 与所有其他的 Domain U 连接起来。 Domain 0 虚拟机利用这个注册信息来设置与其他虚拟机的通信管道。
Libxenctrl 是一个 C 函数库,它提供给 Xend 与 Xen hypervisor 进行交互的能力,通过 Domain 0. 在 Domain 0 中的一个特殊驱动, privcmd 将这些请求发送给 hypervisor 。
每一个 HVM Guest 都需要一个 Qemu daemon 。这个工具 处理所有从 HVM Guest 发出的联网和磁盘请求 。 Qemu 必须存在于 Xen hypervisor 的外面,因为它需要访问网络和 IO ,因此它存在于 Domain 0 。
Xen Virtual Firmware
Xen Virtual Firmware 是一个虚拟的 BIOS ,它被插入到每一个 Domain U HVM Guest 中,来确保操作系统收到所有标准的启动指令。
Xen Operation
Domain 0 与 Domain U 交互
Xen hypervisor 是不支持网络或者平请求的,因此一个 Domain U PV Guest 必须通过 xen hypervisor 与 Domain 0 通信来完成一个网络或磁盘请求。
下图中的事件管道是 Domain 0 和 Domain U 之间的一个直接连接。事实上,事件管道贯穿 Xen hypervisor ,并且已经在 Xenstored 注册了具体的中断,允许 Domain 0 和 Domain U 的 PV Guest 通过本地内存快速的共享信息。