热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

XEN虚拟机架构概述

名词缩写VM:virtualmachinexen虚拟环境由多个组件构成,它们一起提供虚拟化的环境。这些组件包括:xenhypervisorDomain0DomainManagementandControl(XenDMC)DomainU(DomU)PVGuestDomainU(DomU)HVMGuest下图为这些组件的基
名词缩写

VM: virtual machine

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

Xen hypervisor是基础软件抽象层,其直接位于硬件之上,操作系统之下。 它负责为运行硬件之上的多个VM提供CPU调度和内部划分管理。Xen hypervisor不仅仅为VM抽象出硬件层,它同时负责控制VM的执行,因为这些VM共享公共的进程环境。它对通常存在于计算机系统上网络,外部存储,视频以及其它公共I/O功能一无所知。

DOM 0

Dom 0是一个被修改过得linux kernel,它是唯一一个运行于Xen hypervisor 层之上拥有特权来访问物理I/O资源的VM,同时可以同其它VM进行通信。所以的Xen 虚拟化环境要求只有在Domain 0 VM启动之后,其它的VM才可以运行,也就是说Domain 0 VM 必须运行于其它VM之前。

在Dom 0中包含了两个driver,分别用于支持从Dom U(PV or HVM)发起的网络和本地磁盘的请求,它们是Network Backend Driver 和 Block Backend Driver。

Network Backend Driver 直接同本地的网络设备进行通信,用来处理来自于Dom U的网络请求。 Block Backend Driver同本地的硬件存储磁盘相通信,用来处理磁盘的读写请求,进而来满足Dom U的请求。

DOM U

在Xen hypervisor上运行的半虚拟化(paravirtualized)的VM称之为Dom U PV Guest, 在Dom U PV Guest里运行的是修改过的linux OS,比如Solaris, FreeBSD 或者其它的UNIX OS。

在Xen hypervisor上运行的全虚拟化(full virtualized)的VM称之为Dom U HVM Guest,在Dom U HVM Guest上可以运行Window和其它未修改的OS。

一个Dom U PV Guest VM包含两个driver分别是network driver和disk access driver,称之为PV Network Driver和PV Block Driver。

一个Dom U HVM Guest VM里面没有PV drivers,替代的是为每一个Dom U HVM Guest在Dom 0里面启动一个对应的Daemon, 叫做Qemu-dm。Qemu-dm用来支持Domain U HVM Guest的network和disk access 请求。

Dom U HVM Guest 必须被初始化,使得它好像是某种特定的机器,而相应的软件要被加入到Dom U HVM Guest中去,这个软件是Xen virtual firmware,它被用来模拟一个OS在启动的时候需要的BIOS信息。

Domain Management and Control

一系列的linux daemons被开源社区归类到Domain Management and Control. 这些服务支持所有的虚拟化环境的管理和控制工作,并且这些服务都存在于Dom 0 VM里面。

Xend

Xend daemon是一个Python App,它被认为是Xen 环境的系统管理器。 它通过使用libxenctrl 库来对Xen hypervisor发出请求。 所有对Xend发出的请求都是通过xm

工具以XML RPC方式递交。

XM

命令行工具,用来接收用户的输入,通过XML RPC将请求传送给Xend。

Xenstored

Xenstored daemon维护了一个包括内存和Domain 0和其他Domain U Guest之间的event channel link在内的registry信息。 Domain 0 vm通过这些registry信息来为其他VM建立device channel。

libxenctrl

libxenctrl是一个c语言编写的库,它为Xend提供通过Dom 0同Xen hypervisor通话的能力。 在Dom 0中一个特殊的称之为privcmd的driver,用来将Xend的请求交付给hypervisor。

Qemu-dm

每一个在Xen 虚拟环境中运行的HVM Guest需要一个Qemu daemon。这个工具用来处理所有从HVM Guest来的network和disk请求,进而在Xen 虚拟化环境中实现全虚拟化。 Qemu必须存在于hypervisor之外,这是因为它需要访问网络和I/O,而这些功能存在于Dom 0,所有Qemu daemon存在于Dom 0.(一个新的feature正在开发当中,stub-dm,用来取代qemu-dm,可能随xen 3.3发布)

xen virtual firmware

xen virtual firmware是一个虚拟的BIOS,被嵌到每一个Dom U HVM VM 当中去,用来确保每个OS启动的过程中可以收到所有它期待的指令。

Xen operation ? Domain 0 to Domain U communication

Xen hypervisor 不支持网络和disk请求,因此一个Dom U PV Guest必须通过Xen hypervisor同Dom 0 进行通信进而完成一个一次网络或disk请求。

下面以一次Dom U PV Guest 写操作为例来进行说明。

当在Dom U PV Guest 里面进行写操作时,Guest PV Block driver收到写disk操作请求,然后通过Xen hypervisor将数据写入本地内存当中,这块内存是和Dom 0 共享的。一个event channel存在于Dom 0和Dom U PV Guest之间,这使得它们可以通过在xen hypervisor中异步的inter-domain interrupt来进行通信。 Domain 0会收到一个从xen hypervisor来的interrupt,这使得Domain 0中Block Backend Driver 开始访问系统内存,将Domain U PV Guest本地共享内存的数据读出,然后Domain 0将读出的数据写入到本地disk相应的位置。


推荐阅读
  • 本文详细介绍了Java中实现异步调用的多种方式,包括线程创建、Future接口、CompletableFuture类以及Spring框架的@Async注解。通过代码示例和深入解析,帮助读者理解并掌握这些技术。 ... [详细]
  • 远程过程调用(RPC)是一种允许客户端通过网络请求服务器执行特定功能的技术。它简化了分布式系统的交互,使开发者可以像调用本地函数一样调用远程服务,并获得返回结果。本文将深入探讨RPC的工作原理、发展历程及其在现代技术中的应用。 ... [详细]
  • 本文详细介绍了Grand Central Dispatch (GCD) 的核心概念和使用方法,探讨了任务队列、同步与异步执行以及常见的死锁问题。通过具体示例和代码片段,帮助开发者更好地理解和应用GCD进行多线程开发。 ... [详细]
  • 本文介绍如何从字符串中移除大写、小写、特殊、数字和非数字字符,并提供了多种编程语言的实现示例。 ... [详细]
  • Python 工具推荐 | PyHubWeekly 第二十一期:提升命令行体验的五大工具
    本期 PyHubWeekly 为大家精选了 GitHub 上五个优秀的 Python 工具,涵盖金融数据可视化、终端美化、国际化支持、图像增强和远程 Shell 环境配置。欢迎关注并参与项目。 ... [详细]
  • 通常情况下,修改my.cnf配置文件后需要重启MySQL服务才能使新参数生效。然而,通过特定命令可以在不重启服务的情况下实现配置的即时更新。本文将详细介绍如何在线调整MySQL配置,并验证其有效性。 ... [详细]
  • 本文详细介绍了 Python 中的条件语句和循环结构。主要内容包括:1. 分支语句(if...elif...else);2. 循环语句(for, while 及嵌套循环);3. 控制循环的语句(break, continue, else)。通过具体示例,帮助读者更好地理解和应用这些语句。 ... [详细]
  • Python自动化测试入门:Selenium环境搭建
    本文详细介绍如何在Python环境中安装和配置Selenium,包括开发工具PyCharm的安装、Python环境的设置以及Selenium包的安装方法。此外,还提供了编写和运行第一个自动化测试脚本的步骤。 ... [详细]
  • Spring Boot 中静态资源映射详解
    本文深入探讨了 Spring Boot 如何简化 Web 应用中的静态资源管理,包括默认的静态资源映射规则、WebJars 的使用以及静态首页的处理方法。通过本文,您将了解如何高效地管理和引用静态资源。 ... [详细]
  • 本文详细介绍如何使用 Python 集成微信支付的三种主要方式:Native 支付、APP 支付和 JSAPI 支付。每种方式适用于不同的应用场景,如 PC 网站、移动端应用和公众号内支付等。 ... [详细]
  • 本文详细介绍了 Android 开发中 layout_gravity 属性的使用方法及其在不同布局下的效果,旨在帮助开发者更好地理解和利用这一属性来精确控制视图的布局。 ... [详细]
  • Python3 中使用 lxml 模块解析 XPath 数据详解
    XPath 是一种用于在 XML 文档中查找信息的路径语言,同样适用于 HTML 文件的搜索。本文将详细介绍如何利用 Python 的 lxml 模块通过 XPath 技术高效地解析和抓取网页数据。 ... [详细]
  • Shell脚本中变量操作详解
    本文基于《鸟哥的Linux私房菜》一书,详细介绍了Shell脚本中变量的使用方法,包括变量的赋值规则、字符串处理技巧以及环境变量的管理等,旨在帮助读者更好地理解和使用Shell中的变量。 ... [详细]
  • 中断向量是计算机系统中用于指向中断服务程序的入口地址。每个中断向量对应一个特定的中断事件,存储在内存中的中断向量表中。该表通常包含256个条目,每个条目占用4个字节,用于存放跳转指令或直接指向中断处理程序的地址。 ... [详细]
  • 本文介绍了一种根据目标检测结果,从原始XML文件中提取并分析特定类别的方法。通过解析XML文件,筛选出特定类别的图像和标注信息,并保存到新的文件夹中,以便进一步分析和处理。 ... [详细]
author-avatar
Yatmiiml
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有