点击上方“中兴开发者社区”,关注我们
每天读一篇一线开发者原创好文
1. ACRN背景简介
ACRN是Linux基金会今年发布的一款新的嵌入式hypervisor参考软件,项目的官方名称为ACRN,这是一个专为物联网和嵌入式设备设计的管理程序。该项目得益于英特尔代码和工程的贡献,其目标是创建一个灵活小巧的虚拟机管理系统。通过基于 Linux 的服务操作系统,ACRN 可以同时运行多个客户操作系统,如 Android、其他Linux发行版,或者RTOS,使其成为许多场景的理想选择。ACRN架构如图所示:
图1 ACRN架构
我们下面需要验证的功能就是ACRN的InterruptWindow功能模型,在验证该模型之前我们需要先进行一下基础知识的培训。
2. x86_64架构的InterruptWindow原理介绍
Intel InterruptWindow功能是专门为运行在x86_64平台上的虚拟机处理虚拟中断设计的硬件功能,那么为什么要有InterruptWindow功能我们还要从虚拟中断的处理流程开始说起,一般来讲基于x86_64平台物理机中断处理简化流程如下所示:
图2 x86_64平台物理机中断处理流程
那么现在我们回过头来再看看如果是虚拟机该如何模拟物理机的中断过程,我们说做设计之前一般做法是首先要做几个核心问题的抽象,然后再根据这些问题找到相应的解决方案,最后当问题迎刃而解的时候设计方案也自然水到渠成,相应的我们做虚拟机中断模型分析之前也需要先抛出几个核心问题:
运行中的虚拟机如何处理外部中断?
外部中断如何注入到虚拟机的中断控制器中?
虚拟机的中断控制器何时进行中断的计算与分发?
回答一:Intel目前的处理方式分为两种情况考虑:
1)外部中断分发到虚拟机正在运行的CPU核,此时硬件会产生一个vm_exit事件让虚拟机暂停运行退出到Hypervisor层进行中断处理;
2)外部中断分发到非虚拟机运行的CPU核,此时由Hypervisor层对该中断进行处理。
回答二:Intel提供了inject_event方式注入中断,简单说是将需要马上处理的虚拟中断写入到硬件提供VMX内存页的VMX_ENTRY_INT_INFO_FIELD字段,当系统执行vm_entry指令返回虚拟机运行模式时这个字段会被硬件检测触发中断动作跳转到虚拟机的I