hypervisor介绍

hypervisor:一种运行在物理服务器和操作系统之间的中间层软件,可以允许多个操作系统和应用共享一套基础物理硬件。可以将hypervisor看做是虚拟环境中的“元”操作系统,可以协调访问服务器上的所有物理设备和虚拟机,所以又称为虚拟机监视器(virtual machine monitor)。hypervisor是所有虚拟化技术的核心,非中断的支持多工作负载迁移是hypervisor的基本功能。当服务器启动并执行hypervisor时,会给每一台虚拟机分配适量的内存,cpu,网络和磁盘资源,并且加载所有虚拟机的客户操作系统。

以下内容来自https://www.ibm.com/developerworks/cn/linux/l-hypervisor/

非常不错的介绍,分享给大家。

hypervisor 之于操作系统类似于操作系统之于进程。它们为执行提供独立的虚拟硬件平台,而虚拟硬件平台反过来又提供对底层机器的虚拟的完整访问。但并不是所有 hypervisor 都是一样的,这是件好事,因为 Linux 就是以灵活性和选择性著称。本文首先简要介绍虚拟化和 hypervisor,然后探索两个基于 Linux 的 hypervisor。

虚拟化和 hypervisor

我们首先花一点时间理解为什么虚拟化很重要,以及 hypervisor 的扮演的角色。(要更多地了解这两个主题,请参见 参考资料)。

在本文中,虚拟化 就是通过某种方式隐藏底层物理硬件的过程,从而让多个操作系统可以透明地使用和共享它。这种架构的另一个更常见的名称是平台虚拟化。在典型的分层架构中,提供平台虚拟化的层称为 hypervisor (有时称为虚拟机管理程序 或 VMM)。来宾操作系统称为虚拟机(VM),因为对这些 VM 而言,硬件是专门针对它们虚拟化的。图 1 简单的展示了这个分层架构。

图 1. 显示常用硬件虚拟化的简单分层架构

显示常用硬件虚拟化的简单分层架构

平台虚拟化的好处很多。美国环境保护署(EPA)报告的一组有趣的统计数据就证明了其好处。EPA 研究服务器和数据中心的能源效率时发现,实际上服务器只有 5% 的时间是在工作的。在其他时间,服务器都处于 “休眠” 状态。在单个服务器上的虚拟化平台能够改善服务器的利用率,但是减少服务器的数量才是它的最大功用。减少服务器数量意味着减少不动资产、能耗、冷却和管理成本。使用更少的硬件还能提高可靠性。总之,平台虚拟化不仅带来技术优势,还能创造成本和能源优势。

在图 1 中可以看到,hypervisor 是提供底层机器虚拟化的软件层(在某些情况下需要处理器支持)。并不是所有虚拟化解决方案都是一样的,您可以在 参考资料 中了解更多的虚拟化方式。继续讨论进程,操作系统将对机器的底层资源的访问虚拟化为进程。hypervisor 也做一样的事情,但其对象不是进程,而是整个来宾操作系统。

hypervisor 分类

hypervisor 可以划分为两大类。首先是类型 1,这种 hypervisor 是直接运行在物理硬件之上的。其次是类型 2,这种 hypervisor 运行在另一个操作系统(运行在物理硬件之上)中。类型 1 hypervisor 的一个例子是基于内核的虚拟机(KVM —— 它本身是一个基于操作系统的 hypervisor)。类型 2 hypervisor 包括 QEMU 和 WINE。

 

hypervisor 的构成

hypervisor(不管是什么类型)仅是一个从其来宾操作系统抽象机器硬件的分层应用程序。通过这种方式,每个来宾操作系统看到的仅是一个 VM 而不是真实的硬件机器。我们大致看一下 hypervisor 的内部组成,以及它在 VM(来宾操作系统)上的表示。

在较高级别上,hypervisor 需要少量设施启动来宾操作系统:一个需要驱动的内核映像、一个配置(比如 IP 地址和所需的内存量)、一个磁盘盒一个网络设备。磁盘和网络设备通常映射到机器的物理磁盘和网络设备(如图 2 所示)。最后,需要使用一组来宾操作系统工具启动和管理来宾操作系统。

图 2. 在假设 hypervisor 中的最小资源映射

在假设 hypervisor 中的最小资源映射

然后,一个简化的 hypervisor 架构实现最后的关键功能,从而使来宾操作系统可以和宿主操作系统同时运行。实现这个功能需要一些特定的要素,如图 3 所示。首先,类似于将用户空间应用程序和内核函数连接起来的系统调用,一个通常可用的虚拟化调用(hapercall,hypervisor 对操作系统进行的系统调用)层允许来宾系统向宿主操作系统发出请求。可以在内核中虚拟化 I/O,或通过来宾操作系统的代码支持它。故障必须由 hypervisor 亲自处理,从而解决实际的故障,或将虚拟设备故障发送给来宾操作系统。hypervisor 还必须处理在来宾操作系统内部发生的异常。(毕竟,来宾操作系统发生的错误仅会停止该系统,而不会影响 hypervisor 或其他来宾操作系统)。hypervisor 的核心要素之一是页映射器,它将硬件指向特定操作系统(来宾或 hypervisor)的页。最后,需要使用一个高级别的调度器在hypervisor和来宾操作系统之间传输控制。

图 3. 简化的基于 Linux 的hypervisor

简化的基于 Linux 的hypervisor

 

Linux hypervisor

本文探索两个基于 Linux 的 hypervisor 解决方案。首先是 KVM,它是首个被集成到 Linux 内核的 hypervisor 解决方案,并且实现了完整的虚拟化。其次是 Lguest,这是一个实验 hypervisor,它通过少量的更改提高准虚拟化。

KVM

KVM 针对运行在 x86 硬件硬件上的、驻留在内核中的虚拟化基础结构。KVM 是第一个成为原生 Linux 内核(2.6.20)的一部分的 hypervisor,它是由 Avi Kivity 开发和维护的,现在归 Red Hat 所有。

这个 hypervisor 提供 x86 虚拟化,同时拥有到 PowerPC® 和 IA64 的通道。另外,KVM 最近还添加了对对称多处理(SMP)主机(和来宾)的支持,并且支持企业级特性,比如活动迁移(允许来宾操作系统在物理服务器之间迁移)。

KVM 是作为内核模块实现的,因此 Linux 只要加载该模块就会成为一个hypervisor。KVM 为支持 hypervisor 指令的硬件平台提供完整的虚拟化(比如 Intel® Virtualization Technology [Intel VT] 或 AMD Virtualization [AMD-V] 产品)。KVM 还支持准虚拟化来宾操作系统,包括 Linux 和 Windows®。

这种技术由两个组件实现。第一个是可加载的 KVM 模块,当在 Linux 内核安装该模块之后,它就可以管理虚拟化硬件,并通过 /proc 文件系统公开其功能(见图 4)。第二个组件用于 PC 平台模拟,它是由修改版 QEMU 提供的。QEMU 作为用户空间进程执行,并且在来宾操作系统请求方面与内核协调。

图 4. KVM hypervisor 的高级别视图

KVM hypervisor的高级别视图

当新的操作系统在 KVM 上启动时(通过一个称为 kvm 的实用程序),它就成为宿主操作系统的一个进程,因此就可以像其他进程一样调度它。但与传统的 Linux 进程不一样,来宾操作系统被 hypervisor 标识为处于 “来宾” 模式(独立于内核和用户模式)。

每个来宾操作系统都是通过 /dev/kvm 设备映射的,它们拥有自己的虚拟地址空间,该空间映射到主机内核的物理地址空间。如前所述,KVM 使用底层硬件的虚拟化支持来提供完整的(原生)虚拟化。I/O 请求通过主机内核映射到在主机上(hypervisor)执行的 QEMU 进程。

KVM 在 Linux 环境中以主机的方式运行,不过只要底层硬件虚拟化支持,它就能够支持大量的来宾操作系统。您可以在 参考资料 部分找一个到受支持的来宾操作系统的列表。

Lguest(以前的 lhype)

Lguest hypervisor 由澳大利亚 IBM 的 Rusty Russell 开发,它采用完全不同的方式实现虚拟化。Lguest 并没有为运行任意操作系统提供完整的虚拟化支持,而是为支持 x86 的 Linux 来宾操作系统(也称为Linux-on-Linux 虚拟化)提供轻量级准虚拟化。这意味着来宾操作系统知道自己正在被虚拟化,并且这同时还会改进性能。但是,Lguest 不需要 QEMU 提供平台虚拟化(像在 KVM 中一样)来改进性能。使用 Lguest 这种方法还减少了总代码需求,仅需在来宾操作系统和宿主操作系统中使用一个瘦层。现在,我们探索这些变化,并查看 Lguest 环境的高级别架构。

如图 5 所示,来宾操作系统包含一个 Lguest 代码瘦层(根据定义,就是准虚拟化)。这段代码提供许多服务。在最高的级别,有一些代码可以决定正在启动的内核是否被虚拟化。此外,还有一个通过虚拟化调用将特权操作发送给宿主操作系统的抽象层(通过 paravirt_ops 实现)。例如,来宾操作系统不能禁用中断,以使这些请求在宿主操作系统中执行。您还可找到一个为来宾操作系统实现设备抽象的总线,以及一组实现控制台、虚拟块驱动器和虚拟网络驱动器(允许与其他来宾通信)的简单驱动器。

图 5. 实现 x86 准虚拟化的 Lguest 的架构

实现 x86 准虚拟化的 Lguest 的架构

内核部分被实现为可加载的模块,即lg.ko。这个模块包含来宾操作系统通向宿主内核的接口。第一个组件是切换器,它实现一种方法,让来宾操作系统在执行时根据上下文进行切换。这个模块还实现 /proc 文件系统代码(针对 /dev/lguest),该代码实现到内核和驱动器(包括虚拟化调用)的用户空间接口。还有一些代码通过使用影子页表(shadow page-table)和管理 x86 区段来提供内存映射。

最后,内核中的 Documentation 子目录包含启动实用程序(lguest),用于启动新的来宾操作系统实例。这个文件负责两项任务,即使用和记录。

Lguest 从 2.6.23(2007 年 10 月)开始就成为主流内核,并且由 Rusty Russell 开发和维护。它大约包含 5000 行源代码,包括用户空间实用程序。尽管 Lguest 很简单(据说是这样的),但它能提供真正的准虚拟化。不过简单性往往与局限性相随。例如,Lguest 仅虚拟化其他支持 Lguest 的来宾操作系统,并且目前仅能用于 x86 架构。尽管存在这些限制,Lguest 仍然提供一种有趣的虚拟化方式,并且对任何希望研究 Rusty 的代码的人员公开。

 

Linux hypervisor 的益处

使用 Linux 作为内核开发 hypervisor 有实实在在的好处。最明显的是, 以 Linux 为基础开发 hypervisor 受益于稳步前进的 Linux,以及为改进 Linux 投入的大量工作。从典型的优化、bug 修复、调度和内存管理创新到支持不同处理器架构,Linux 都是一个不断进步的平台(引自 Salisbury 市的 John 的 “站在巨人的肩膀上” 一文)。

不久前已经证明,通过向 KVM 添加一个内核模块,就可以将 Linux 内核转变为 hypervisor。Lguest 进一步改进了这种方法,并且通过受限制的准虚拟化进一步简化了该解决方案。

使用 Linux 作为平台的另一个奇特好处是,除了可以将该平台用作 hypervisor 之外,您还可以将其用作操作系统。因此,除了可以在 Linux hypervisor 上运行多个来宾操作系统之外,您还可以在该级别上运行其他传统的应用程序。所以,不必担心带有新的应用编程接口(API)的新平台,因为您拥有用于开发应用程序的标准 Linux 平台(如果需要监控应用程序或 hypervisor)。标准协议(TCP/IP)和其他有用的应用程序(Web 服务器)和来宾操作系统都是可用的。回顾一下讨论 KVM 时的 图 4:除了来宾操作系统之外,还使用了修改了 KVM 的 QEMU。这是一个标准进程,并展示了 Linux 作为 hypervisor 的强大之处。KVM 在平台虚拟化中利用 QEMU,并使用 Linux 作为hypervisor,因此实现了这个构思,即让来宾操作系统能够和其他 Linux 应用程序协调执行。

 

结束语

在 hypervisor 开发的过程中,hypervisor 就是新开辟的战场。3 年以前,操作系统是战场的主线,并且控制了一小部分据点。然而,今天战场已转移到 hypervisor,并且 Linux 担任一个明确的角色。

但是,也有声音反对使用 Linux 作为 hypervisor,并且最剧烈的批评来自于夸夸其谈的空论。在数年以前这种情况曾出现在嵌入式领域。今天,作为嵌入式操作系统的 Linux 已是不曾止步的强者。但是我们也有对付批评的办法,通过一些架构上的改进可以让 Linux 成为最强大、最普遍和更灵活的操作系统。

### RTS Hypervisor介绍 RTS Hypervisor是一种虚拟化平台,旨在支持多种实时操作系统(RTOS)以及通用操作系统(GPOS),并确保这些操作系统的高效运行和互不干扰。通过该hypervisor的支持列表可以看出其广泛的兼容性,包括但不限于Microsoft Windows 10 和 11, Debian, Ubuntu, VxWorks, Xenomai, TenAsys Intime分布式RTOS, QNX Neutrino, Real-Time Linux等[^1]。 这种广泛的操作系统支持意味着开发者可以在同一硬件平台上部署不同类型的软件环境,从而满足多样化的需求场景。例如,在工业自动化领域中可能同时存在对高性能计算能力和严格时间约束的任务处理需求;而在汽车电子行业中,则更侧重于安全性和可靠性方面的要求。 ### 工作原理概述 为了实现上述目标,RTS Hypervisor采用了先进的隔离机制和技术手段: - **资源分配与管理**:能够精确划分CPU周期、内存空间及其他物理设备给各个客户机操作系统使用; - **中断重定向**:使得来自外设的消息可以直接传递到指定的目标VM而不影响其他部分的工作状态; - **I/O虚拟化**:提供了一套完整的接口用于模拟实际存在的控制器行为模式,让应用程序认为自己正在直接访问真实的硬件设施; - **优化调度算法**:针对不同的负载特性设计特定策略以达到最佳性能表现的同时兼顾公平性原则。 特别值得注意的是,在ARM架构下,由于WFE(等待事件)指令可由Hypervisor捕获而SEV(发送事件)不可被捕获这一特点,这表明了对于某些低功耗状态下唤醒源的特殊处理方式[^2]。 ### 应用案例分析 考虑到RTS Hypervisor强大的多核处理器管理和跨平台移植能力,以下是几个典型的应用实例: #### 智能交通控制系统 在此类项目里往往涉及到大量传感器数据采集任务以及复杂逻辑运算过程,借助于本产品所提供的稳定可靠的服务质量保障措施,不仅提高了整个系统的响应速度而且增强了抗干扰水平。 #### 医疗监护仪器开发 医疗级电子产品通常有着极为严苛的安全标准规定,利用内置的安全扩展模块配合严密的身份验证流程,可以有效防止非法入侵者篡改重要参数设置造成严重后果的发生风险。 #### 嵌入式消费类产品制造 随着物联网概念日益普及开来,越来越多的家庭用品也开始融入智能化元素进去,比如智能家居网关就非常适合采用此类解决方案来构建一个开放式的生态系统框架结构。 ```python # Python伪代码展示如何创建两个独立运行的操作系统实例 from rts_hypervisor import create_vm win_os = create_vm('Windows', memory=8GB, cores=[0, 1]) linux_rt = create_vm('Real-Time Linux', memory=4GB, cores=[2]) def start_systems(): win_os.start() linux_rt.start() start_systems() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值