QNX Hypervisor —— 虚拟机

一个正在运行的虚拟机管理器包括虚拟机管理器微内核及其虚拟化库(libmod_qvm.a)和一个或多个虚拟机进程实例(qvm)。

什么是虚拟机?

在QNX Hypervisor环境中,每个虚拟机(VM)都是一个qvm进程实例。qvm进程是一个操作系统进程,运行在内核之外的虚拟机管理器宿主机中。每个实例都由一个标识符进行标记,以便让微内核知道它是一个qvm进程。

如果您还记得关于VM的任何内容,请记住,从客户机操作系统的角度来看,托管该客户机的VM是硬件。这意味着,就像一个运行在物理主板上的操作系统预期的某些硬件特征(体系结构、主板规格、内存和CPU、设备等),一个运行在VM上的操作系统也期望这些特征:运行客户机的VM必须匹配客户机的期望。

当您配置VM时,您实际上正在组装一个硬件平台。不同之处在于,您不是组装物理存储卡、CPU等,而是在指定机器的虚拟组件,qvm进程将根据您的规格创建和配置这些组件。

关于什么地方出现什么东西的规则和真实的板子是一样的:

  • 不要安装两个东西,却都试图响应相同物理地址。

  • 您的VM配置所组装的环境,必须是您将要运行的软件(客户机操作系统)准备运行的环境。

对硬件的类比,也在另一个方向上起作用。VM不需要知道它的客户机在做什么,正如硬件不需要知道操作系统在做什么一样。事实上,VM也不可能知道客户机在做什么(“客户机是一个二进制大对象”)。

更多的有关配置VM的信息,请参见“配置”章节中的“组装和配置VM”。

qvm服务

每个qvm进程实例都提供的关键的虚拟机管理器服务。

VM启动

为了创建可以运行客户机操作系统的虚拟环境,qvm进程实例在启动时执行以下操作:

  • 读取、解析和验证VM配置文件(*.qvmconf)以及进程的启动命令行所输入的配置信息,如果配置无效则退出,并将有意义的错误消息打印到日志中。

  • 设置中间阶段表(intermediate state tables)(ARM:阶段2(Stage 2)的页表,x86:扩展页表(Extended Page Tables:EPT))。

  • 创建(组装)和配置VM,包括:

    • 为客户机分配RAM(读/写)和ROM(只读)

    • 为它呈现给客户机的每个虚拟CPU提供一个线程

    • 准备透传设备,并使得其对客户机可用

    • 为托管的客户机定义和配置虚拟设备(vdev)

VM操作

在操作一个qvm进程实例的过程中,执行以下操作:

  • 对客户机尝试访问的内存地址上下边界设置陷阱,并确定如何处理它们(例如:如果地址是到vdev,则调用vdev代码(客户端退出,然后在vdev代码完成时调用客户端入口);如果该地址确实超出了边界,做类似的处理)。

  • 在释放物理CPU前,保存其客户机的上下文。

  • 在将客户机重新投入执行之前,恢复其客户机的上下文。

  • 负责任何失效处理。

  • 执行确保VM完整性所需的任何维护活动。

管理客户机上下文

在虚拟化环境中,CPU虚拟化扩展的职责是从客户机的动作中,识别出客户机什么时候需要退出。不过当CPU触发客户机退出时,托管客户机的qvm进程实例(例如VM)会保存客户机的上下文。当客户机完成其任务,并准备重新进入时,进程实例将恢复客户的上下文。

管理特权等级

qvm进程实例管理客户机在进入和退出时特权级别,以确保客户机可以运行,并保护系统不受错误代码的影响。

在客户机进入时,qvm进程实例要求CPU提供客户机运行所需的特权级别,仅此而已。

在客户端退出时,qvm进程实例要求CPU恢复到虚拟机管理器宿主机运行所需的特权级别。

只有CPU硬件才能改变特权级别。qvm进程执行更改CPU特权级别所需的操作。这种机制(也即操作)是特定于体系结构的。

客户机访问虚拟和物理的资源

每个qvm进程实例都管理其托管的客户机对虚拟和物理资源的访问。

当客户机以以下的某种方式,试图访问其客户机物理内存中的地址时,托管该客户机的qvm进程将检查该访问尝试,并作出如下响应:

允许

        客户机试图访问其所拥有的内存区域。

        qvm进程实例不做任何操作。

透传设备

        客户机试图访问分配给物理设备的内存,并且客户机的VM被配置为知道客户机可以直接访问该设备。

        qvm进程实例不做任何操作。客户机直接与设备通信。

虚拟设备

        客户机试图访问分配给虚拟设备的内存(虚拟的或准虚拟的)

        qvm进程实例请求适当的特权级别更改,并将执行传递给它所请求设备的代码。例如,客户机的CPUID请求会触发qvm进程实例来仿真硬件,并像非虚拟化系统中的硬件那样响应客户机。

故障

        客户端试图访问它没有权限访问的内存。

        qvm进程实例向客户返回一个适当的错误。

以上是通过CPU进行的访问尝试。DMA访问控制由SMMU管理器管理(参见“DMA设备容器(smmuman)”)。

原文链接:

http://www.qnx.com/developers/docs/7.0.0/#com.qnx.doc.hypervisor.user/topic/virt/qvm.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值