QNX Hypervisor 2.2 用户手册1.4 虚拟机
Posted 高桐@BILL
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QNX Hypervisor 2.2 用户手册1.4 虚拟机相关的知识,希望对你有一定的参考价值。
一个运行的hypervisor由hypervisor微内核,虚拟化模块,以及一个或多个虚拟机进程实例(qvm)组成。
一、什么是虚拟机?
在QNX hypervisor环境下,一个VM就是一个qvm进程实例。qvm进程就是一个运行在内核外,hypervisor主机上的OS实例。每个实例有一个标识符用于标记它,这样微内核就知道它是一个qvm进程。
如果你记得一些VM相关的事物,记住从guest OS的角度,托管guest的VM就是硬件基础设施。也就意味着,就像OS运行在物理主板一样,在这个“物理主板上”同样包含着内存、CPU、存储器等其他设备一样。
当你配置一个VM,就像你在组装一个硬件平台一样。不同之处就时,你只需要指定你的虚拟机上的虚拟组件来替代物理主板上的硬件组件(如cpu,内存,存储器等)。随后,qvm进程会根据的配置来进行创建初始化。
配置规则与实际的物理主板相同:
- 不要试图安装响应同一个物理地址的组件。
- VM 配置组装的环境必须是要运行的软件(来宾 OS)准备处理的环境。
硬件模拟工作也适合其他方向。虚拟机不需要知道guest在做什么,就像硬件不直达OS在做什么一样。实际上VM也无法知道guest在做什么。
例如,VM不知道为什么guest退出。如果你想知道为什么guest退出,你需要以来guest告诉你为什么要退出。如果guest还没有一个机制来做这件事,你需要开发一个合适的机制来。对于QNX guest,“Shutdown”也许提供了一些相关的功能。
二、qvm 服务
每个qvm进程实例都提供了关键的hypervisor服务。
三、VM 组装与配置
为了创建一个guest OS可以运行的虚拟机环境。一个qvm进程实例在启动时需要执行下面的几个步骤:
- 读取、解析和验证VM配置文件(*.qvmconf),和启动时输入的配置信息。如果配置无效需要退出并打印有实际意义的错误信息到日志中。
- 设置中间阶段表(ARM:stage 2 page tables;X86:Extended Page Table,EPT)。
- 创建(装配)和配置它的VM,包括:
- 为guest分配RAM(r/w)和ROM(只读);
- 为每个开放给guest的虚拟CPU(vCPU)提供一个线程;
- 提供直达设备给到guest,并使其对guest可见;
- 为guest定义和配置虚拟设备(vdevs)
四、VM操作
在虚拟机操作期间,一个qvm进程实例需要做以下的事情:
- 捕捉连入连出guest访问意图,并决定geust想要做什么。(简而言之,如果地址是虚拟设备vdev,调用vdev代码;如果地址是连出,则待之如此。)
- 让出一个物理CPU前保存guest的上下文
- 把执行权归还给guest前恢复guest上下文
- 处理任何中断处理
- 执行确保 VM 完整性所需的任何维护活动
五、Guest开关机
VM中guest的启动就像在硬件上的启动一样。从guest的角度来讲,它开始在物理CPU上执行。无论如何,这个CPU即使是一个qvm vCPU线程。guest可以使能它的中断,就像不是运行在虚拟机一样。
当第一个vCPU线程在guest的VM中开始执行时,VM可以监测到guest已经被启动了。
初始化guest关机同行是guest的一项功能。qvm进程通过一些通用的方法如PSCI和ACPI可以探测到shutdown的初始化。如果你想使用一个qvm无法自动识别的函数,你可以写一个vdev用来检测到shutdown的动作并做出相应的回应。
六、管理guest上下文
qvm进程实例在guest进入和退出时管理者权限等级,以确保guest可以正常运行,并保证系统免受错误代码的影响。
在guest进入时,qvm进程实例告诉CPU给到guest一定的运行权限以保证其运行,但仅此而已。当guest退出时,qvm进程实例会告诉CPU将之前请求运行所需的权限归还给宿主hypervisor。
以上是关于QNX Hypervisor 2.2 用户手册1.4 虚拟机的主要内容,如果未能解决你的问题,请参考以下文章
QNX Hypervisor 2.2 用户手册1.3 QNX hypervisor架构