VMM

介绍 

       VMM名称是Virtual Machine Module,即虚拟机模块。虚拟的意思在于RT-Thread/VMM会以半虚拟化的方式虚拟运行另外一个操作系统,例如Linux。半虚拟化的意思是,让另外的操作系统以本地运行方式运行,而不是解释执行机器指令的方式进行,目标操作系统的指令是什么就由真实物理机器执行什么指令。当然RT-Thread/VMM会虚拟化部分东西,会是:中断控制器、页表、OS定时器等等。


        这种模式可以在单核或者多核上运行,单核上:RT-Thread与Linux共享一个核心,“并行”执行;


        多核上:RT-Thread与Linux分别运行在不同的核心上,并行执行。多核上,虚拟化相对来说没这么明显,更多的是两个系统间的同步、通信,这部分也是一个新的组件(或者说是RT-Thread/VMM的一部分内容,称为VBUS,虚拟软件总线)

        RT-Thread/VMM初期只支持ARM Cortex-A系列处理器。它仅仅是一个组件,不是一套独立的系统,RT-Thread本身依然是原来的核心,能够在ARM Cortex-A/R/M上单独执行。RT-Thread/VMM作为RT-Thread Platform的一部分而存在,起到补充的作用:复杂的功能,通过虚拟化的Linux来实现。而实时部分,则依赖RT-Thread本身的实时性。通过这样的方式也形成了一种操作系统级别的big.LITTLE结构,不同的部分具备不同的作用。

        VMM组件要求的技术性也更高,一般用于一些可靠性要求非常高的场合。在RT-Thread 2.0.0版本中也终于支持了LPC4357这样的小异构系统(LPC4357中包含了ARM Cortex M4/M0两个异构核心),实现了M4/M0上分别运行RT-Thread系统,两者之间则通过VBUS进行通信。所以,对多系统/VBUS感兴趣的同学可以从LPC4357上入手。

技术指标

  • 单核中断延迟
    • 中断延迟时间 ≤ 10us (系统切换的开销)
  • 多核中断延迟
    • 中断延迟时间 ≤ 1us

体验

        在开发的过程中也出现了一个附加品,QEMU/realview上模拟执行RT-Thread(或者Linux/RT-Thread)的BSP,它可以让未经修改的标准QEMU,去软件仿真模拟执行RT-Thread,或更进一步,执行Linux/RT-Thread。