热门标签 | 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相应的位置。


推荐阅读
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • Python语法上的区别及注意事项
    本文介绍了Python2x和Python3x在语法上的区别,包括print语句的变化、除法运算结果的不同、raw_input函数的替代、class写法的变化等。同时还介绍了Python脚本的解释程序的指定方法,以及在不同版本的Python中如何执行脚本。对于想要学习Python的人来说,本文提供了一些注意事项和技巧。 ... [详细]
  • 恶意软件分析的最佳编程语言及其应用
    本文介绍了学习恶意软件分析和逆向工程领域时最适合的编程语言,并重点讨论了Python的优点。Python是一种解释型、多用途的语言,具有可读性高、可快速开发、易于学习的特点。作者分享了在本地恶意软件分析中使用Python的经验,包括快速复制恶意软件组件以更好地理解其工作。此外,作者还提到了Python的跨平台优势,使得在不同操作系统上运行代码变得更加方便。 ... [详细]
  • windows平台使用NSP拦截具体进程的域名解析过程(xFsRedir的代理功能之域名代理)
    byfanxiushu2022-10-17转载或引用请注明原始作者。xFsRedir软件其中之一的功能就是实现了全方位的网络代理,从主机代理,到本地代理 ... [详细]
  • 本文为转载,原连接:https:www.zhihu.comquestion40822826简单说一下吧做要解释这些要从netconf说起。netconf ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了多因子选股模型在实际中的构建步骤,包括风险源分析、因子筛选和体系构建,并进行了模拟实证回测。在风险源分析中,从宏观、行业、公司和特殊因素四个角度分析了影响资产价格的因素。具体包括宏观经济运行和宏经济政策对证券市场的影响,以及行业类型、行业生命周期和行业政策对股票价格的影响。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • 本文介绍了在Mac上安装Xamarin并使用Windows上的VS开发iOS app的方法,包括所需的安装环境和软件,以及使用Xamarin.iOS进行开发的步骤。通过这种方法,即使没有Mac或者安装苹果系统,程序员们也能轻松开发iOS app。 ... [详细]
  • java布尔字段用is前缀_POJO类中布尔类型的变量都不要加is前缀详解
    前言对应阿里巴巴开发手册第一章的命名风格的第八条。【强制】POJO类中布尔类型的变量都不要加is前缀,否则部分框架解析会引起序列化错误。反例:定义为基本 ... [详细]
  • springboot dubbo框架中log4j与slf4jlog4j12日志冲突问题的解决方法
    在基于springboot开发项目中,使用dubbo的RPC框架进行业务拆分,出 ... [详细]
  • 包含utf8字符的 pickle  转 json的大坑处理过程
    背景:希望将pickle转换为json,由于pickle里有utf8的字符,因此转换失败。转换代码如下:Convertap ... [详细]
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社区 版权所有