一种构建轻量级虚拟化系统的方法
技术领域
本申请涉及一种计算机的虚拟化(Virtualization)技术。
背景技术
虚拟化技术是把一台物理形式存在的计算机(简称为物理机)的实体资源(例如CPU、内存、外部存储器等)抽象出来,转换后呈现出来可供分割、组合为一个或多个虚拟机(virtual machine)的技术。每个虚拟机都有与物理机同样的功能,从而可在每个虚拟机上运行独立的操作系统。现有的虚拟化技术如KVM(Kernel Virtual Machine,内核虚拟机)、XEN等在没有硬件虚拟化(hardware virtualization)的支持下性能较差,影响用户体验。而基于内核容器(Container)方案的虚拟化技术在对多虚拟机的显示、外设虚拟化方面实现较差。由于现在手机等移动终端设备越来越普及,移动终端设备的虚拟化也日益受到关注。所以实现一种使用流畅、性能优良的虚拟化方案越来越有必要。
发明内容
本申请所要解决的技术问题是提供一种构建轻量级虚拟化系统的方法。该方法在不需要硬件虚拟化的前提下可以实现移动终端设备的虚拟化,使虚拟出的多个移动终端设备虚拟机能达到和物理机一样的使用效果和性能。
为解决上述技术问题,本申请提出了一种构建轻量级虚拟化系统的方法,包括如下步骤。步骤S10:构建内核驱动虚拟化,这是指让每种硬件单元的驱动程序虚拟化,从而能被多个用户操作系统调用并能正常工作;所述多个操作系统包括一个主操作系统和多个用户空间的操作系统来实现多虚拟机同时运行。步骤S20:构建存储虚拟化,这是指把电子设备中的存储空间划分成多个分区,每个操作系统使用不同的分区来支持多个操作系统同时运行。步骤S30:构建虚拟机管理驱动,这是指在主操作系统的内核中采用一个驱动程序来管理虚拟机,这个用来管理虚拟机的驱动程序称为虚拟机管理驱动。以上三个步骤的顺序或者任意在先,或者同时进行。上述方法实现了在单芯片上模拟多个虚拟手机设备并能动态切换使用。
进一步地,所述步骤S10中,构建内核驱动虚拟化具体包括以下内容。第一,实现虚拟化的硬件单元的驱动程序的多上下文。第二,支持多用户进程同时访问虚拟化的硬件单元的驱动程序进行相关硬件操作。第三,增加虚拟化的硬件单元的驱动程序对虚拟机切换事件的处理,在切换时对硬件单元进行状态复位。这是对步骤S10的详细说明。
进一步地,所述步骤S10中,在主操作系统的内核中构建虚拟化的硬件单元的驱动程序。这表明步骤S10在电子设备的哪一层进行操作。
进一步地,所述步骤S20中,在主操作系统的内核中构建虚拟化的存储分区。这表明步骤S20在电子设备的哪一层进行操作。
进一步地,所述步骤S30中,虚拟机管理驱动具体包括如下内容。第一,为每个虚拟机提供文件节点来访问虚拟机管理驱动。第二,在每个虚拟机中提供发送指令的应用程序和虚拟机通讯服务,应用程序往虚拟机通讯服务发送指令,虚拟机通讯服务处理应用程序发送的指令,然后再往虚拟机管理驱动发送指令;虚拟机通讯服务同时也处理从虚拟机管理驱动接收到的指令;从而通过虚拟机管理驱动、虚拟机通讯服务和用于发送指令的应用程序实现了虚拟机的切换和事件处理。这是对步骤S30的详细说明。
优选地,虚拟机通过虚拟机管理驱动发送和接收指令,实现虚拟机之间的消息通讯;在每个虚拟机中提供用户空间的操作系统和应用程序,用户空间的操作系统和/或应用程序在运行时通过虚拟机管理驱动发送指令和处理从虚拟机管理驱动接收到的命令,从而通过虚拟机管理驱动和用户空间的操作系统和/或应用程序实现了虚拟机的切换和事件处理。这是对步骤S30的一个优选示例说明。
优选地,虚拟机通过发送切换命令把当前虚拟机切换到前台或者后台,同时通知所有虚拟化的硬件单元的驱动程序响应切换事件,也就是告诉虚拟化的各个硬件单元的驱动程序当前激活的虚拟机是哪个,并进行各个硬件单元的状态重置;虚拟机管理驱动记录当前在前台运行的虚拟机id,也就是处于激活状态的虚拟机id;所述虚拟机id用来区分不同的虚拟机;每个虚拟机通过查询虚拟机管理驱动获知该虚拟机自身是否在前台。这是对步骤S30的另一个优选示例说明。
进一步地,所述步骤S10具体包括如下步骤。步骤S11:在显示屏的驱动程序中增加active_vmd变量用来记录当前处于前台运行的虚拟机id。步骤S12:在显示屏的驱动程序中的刷屏接口中增加判断,如果当前发送刷屏命令的虚拟机id和active_vmd变量中的值一样,那么配置寄存器刷新屏幕内容;如果当前发送刷屏命令的虚拟机id和active_vmd变量中的值不一样,那么该刷屏命令丢弃不执行。步骤S13:采用vmd_switch_event函数用来处理VMD_BACKGROUND和VMD_FOREGROUND消息;所述VMD_BACKGROUND消息用来切换发送消息的虚拟机为后台运行;所述VMD_FOREGROUND消息用来切换发送消息的虚拟机为前台运行。对VMD_BACKGROUND消息,把active_vmd变量设置为-1,并停止所有刷新屏幕任务,阻止所有虚拟机的刷屏请求,重置显示控制器状态,让显示控制器刷黑屏。对VMD_FOREGROUND消息,把active_vmd变量设置为发送该消息的虚拟机id。这是对步骤S10的一个示例说明。
进一步地,所述步骤S30具体包括如下步骤。步骤S31:为主操作系统和每个用户空间的操作系统分别创建上下文,所有上下文都有事件列表用来记录当前上下文相关的消息;使用变量active_vmd来记录当前处于激活状态的虚拟机。步骤S32:为每个虚拟机各自创建设备节点以供使用。步骤S33:对vmd节点执行写操作和/或读操作、和/或对hmd节点执行读操作。这是对步骤S30如何实现的具体说明。
进一步地,所述步骤S33中,vmd的消息类型包括:VMD_SWITCH消息表示vmd发起切换;VMD_BOOT消息表示vmd启动完成;VMD_SET_VMD_ID消息表示设置当前的激活虚拟机的vmd id;VMD_ACTIVE消息表示vmd处于激活状态,也就是处于前台;VMD_IDLE消息表示vmd处于空闲状态,也就是处于后台。hmd的消息类型包括:HMD_BOOTED_VMD消息表示vmd启动完成;HMD_BOOTED_VMD_ALL消息表示所有vmd启动完成。这里介绍了常见的消息类型及其含义。
进一步地,所述步骤S33中,处理vmd节点写入的VMD_SET_VMD_ID消息是调用所有驱动的vmd_switch_event函数发送VMD_FOREGROUND消息,设置active_vmd变量为当前的虚拟机id。处理vmd节点写入的VMD_BOOT消息是判断是否为最后一个启动的虚拟机;如果是,往hmd的事件列表中插入HMD_BOOTED_VMD_ALL消息和发起请求的虚拟机id;如果否,调用所有驱动的vmd_switch_event函数发送VMD_BACKROUND消息,设置active_vmd变量为HMD_ID,往hmd的事件列表中插入HMD_BOOTED_VMD消息和发起请求的虚拟机id。处理vmd节点写入的VMD_SWTICH消息是调用所有驱动的vmd_switch_event函数发送VMD_BACKROUND消息,设置active_vmd变量为HMD_ID;再调用所有驱动的vmd_switch_event函数发送VMD_FOREGROUND消息,设置active_vmd变量为目标的虚拟机id;往目标虚拟机的事件列表中插入VMD_ACTIVE消息和发起请求的虚拟机id。VMD节点读取消息的处理方式是判断active_vmd变量是否等于当前发起读请求的虚拟机id;如果是,返回VMD_ACTIVE消息;如果否,返回VMD_IDLE消息。HMD节点读取消息的处理方式是判断hmd的事件列表中是否有消息;如果是,返回消息;如果否,不返回消息。这里介绍了对各种常见消息类型的不同处理方式。
进一步地,所构建的轻量级虚拟化系统自下而上分别包括硬件层、主操作系统的内核层、虚拟设备层、用户空间层。在主操作系统的内核层中实现内核驱动虚拟化、存储虚拟化和虚拟机管理驱动。在虚拟设备层中虚拟多个设备,包括主设备HMD和虚拟设备VMD;主设备HMD中运行的是主操作系统;虚拟设备VMD中运行的是用户空间的操作系统;所述存储虚拟化把存储空间划分成与主设备和虚拟设备的总和具有相同数量的存储分区,每个操作系统拥有独立的系统镜像和数据存储区域。针对不同虚拟设备会用到的共同硬件,进行硬件单元的驱动程序的多上下文修改,使硬件单元的驱动程序支持多进程的并发访问;同时在以上驱动的实现里,往虚拟机管理驱动中注册虚拟机状态改变的回调函数;在虚拟机状态发生改变时,虚拟机管理驱动也响应虚拟机切换事件,设置相应的设备状态。这是对轻量级虚拟化系统的详细说明。
进一步地,所述虚拟机管理驱动在/dev节点下为每个虚拟设备生成一个文件节点;对应每个操作系统有相应的服务进程来和虚拟机管理驱动进行通讯;每个虚拟手机设备只能操作自己对应的节点;每个虚拟设备相互之间发送同步或者异步命令;同步命令需要等对应的虚拟设备接收到命令并处理完成后,发送端才能返回;异步命令则由发送端直接返回。这是对虚拟机管理驱动的结构的详细说明。
进一步地,虚拟机之间的切换流程具体包括如下步骤。步骤S41:在第一虚拟机vmd0的操作系统中选择切换应用程序,第一虚拟机vmd0发送切换命令给第一虚拟机的文件节点/dev/vmd0。步骤S42:虚拟机管理驱动接收到切换命令后,把前台虚拟机从第一虚拟机vmd0标记为第二虚拟机vmd1,然后调用所有驱动注册的回调函数,进行驱动的状态切换。步骤S43:当所有状态切换完成后,虚拟机管理驱动往第二虚拟机的文件节点/dev/vmd1中发送激活命令VMD_ACTIVE。步骤S44:第二虚拟机vmd1中的虚拟机通讯服务接收到激活命令VMD_ACTIVE后唤醒第二虚拟机vmd1的操作系统,虚拟机切换完成。这里介绍了虚拟机之间的切换流程。
进一步地,多虚拟机自动启动的流程具体包括如下步骤。步骤S51:电子设备开机自动加载HMD的主操作系统POS,POS在启动过程中会运行一个虚拟机通讯服务进行虚拟机管理驱动的消息处理并在虚拟机通讯服务启动时启动vmd0的操作系统OS0。步骤S52:OS0启动进入到桌面后,vmd0的操作系统OS0自动调用虚拟机通讯服务往虚拟机管理驱动中发送当前虚拟机启动完成命令VMD_BOOTED。步骤S53:虚拟机管理驱动接收到vmd0的操作系统启动完成命令OS0VMD_BOOTED后,查询当前需要启动的虚拟机个数;如果还有虚拟机需要启动,虚拟机管理驱动往相应的需要启动的虚拟机的文件节点/dev/hmd发送虚拟机启动命令VMD_BOOT,让HMD的操作系统POS继续启动下一个虚拟机;如果这是最后一个需要启动的虚拟机,那么虚拟机管理驱动直接返回,界面就停留在最后一个启动的虚拟机上。这里介绍了多虚拟机自动启动的流程。
本申请取得的技术效果是实现了在单芯片上模拟多个虚拟手机设备并能动态切换使用。
附图说明
图1是本申请提出的构建轻量级虚拟化系统的方法的流程示意图。
图2是步骤S10的一个具体实施例的流程示意图。
图3是步骤S30的一种具体实现方式的流程图。
图4是本申请构建的轻量级虚拟化系统的一个实施例的结构示意图。
图5是本申请提出的虚拟机管理驱动的结构示意图。
图6是虚拟机之间的切换流程示意图。
图7是多虚拟机自动启动的流程示意图。
具体实施方式
请参阅图1,本申请提出的构建轻量级虚拟化系统的方法包括如下步骤。
步骤S10:构建内核驱动虚拟化。所述内核驱动虚拟化是指让每种硬件单元的驱动程序虚拟化,从而能被多个用户操作系统调用并能正常工作。
以手机为例,其包括GPU(graphics processing unit,图像处理器)、触摸屏、显示屏、按键等硬件单元,这些硬件单元都有相应的驱动程序来进行驱动。如果在手机上通过虚拟机运行多个操作系统,那么每个操作系统都要能调用驱动程序来操作这些硬件单元。然而每种硬件单元只有一个,多个操作系统对同一硬件单元的驱动就存在竞争关系,可能会导致硬件异常。构建内核驱动虚拟化之后,就好像每个用户操作系统都有独立的硬件单元一样。
所述构建内核驱动虚拟化具体包括以下内容。
第一,实现虚拟化的硬件单元的驱动程序的多上下文(multi-Context)功能。
第二,支持多用户进程同时访问虚拟化的硬件单元的驱动程序进行相关硬件操作。
第三,增加虚拟化的硬件单元的驱动程序对虚拟机切换事件的处理,在切换时对硬件单元进行状态复位。这样可以使多用户空间的应用程序并发使用同一硬件资源而不出现系统异常。
本申请在为电子设备构建虚拟化系统时,使用一个主操作系统和多个用户空间的操作系统来实现多虚拟机同时运行,在主操作系统的内核中构建虚拟化的硬件单元的驱动程序。
步骤S20:构建存储虚拟化。这是指把电子设备中的存储空间划分成多个分区,每个操作系统使用不同的分区来支持多个操作系统同时运行。这样就使得每个操作系统拥有独立的系统镜像和数据存储区域,互不干扰。
这一步也是在主操作系统的内核中构建虚拟化的存储分区。
步骤S30:构建虚拟机管理驱动,这是指在主操作系统的内核(例如Linux kernel,Linux内核)中采用一个驱动程序来管理虚拟机,这个用来管理虚拟机的驱动程序称为虚拟机管理驱动。
所述虚拟机管理驱动具体包括如下内容。
第一,为每个虚拟机提供文件节点来访问“虚拟机管理驱动”。
第二,在每个虚拟机中提供发送指令的应用程序和虚拟机通讯服务,应用程序往虚拟机通讯服务发送指令,虚拟机通讯服务处理应用程序发送的指令,然后再往虚拟机管理驱动发送指令。虚拟机通讯服务同时也处理从虚拟机管理驱动接收到的指令。从而通过虚拟机管理驱动、虚拟机通讯服务和用于发送指令的应用程序实现了虚拟机的切换和事件处理。
例如,虚拟机通过“虚拟机管理驱动”发送和接收指令,实现虚拟机之间的消息通讯。在每个虚拟机中提供用户空间的操作系统和应用程序,用户空间的操作系统和/或应用程序在运行时通过“虚拟机管理驱动”发送指令和处理从“虚拟机管理驱动”接收到的命令,从而通过“虚拟机管理驱动”和用户空间的操作系统和/或应用程序实现了虚拟机的切换和事件处理。
又如,虚拟机通过发送切换命令把当前虚拟机切换到前台或者后台,同时通知所有虚拟化的硬件单元的驱动程序响应切换事件,也就是告诉虚拟化的各个硬件单元的驱动程序当前激活的虚拟机是哪个,并进行各个硬件单元的状态重置。“虚拟机管理驱动”记录当前在前台运行的虚拟机id,也就是处于激活(active)状态的虚拟机id。所述虚拟机id用来区分不同的虚拟机。每个虚拟机通过查询“虚拟机管理驱动”获知该虚拟机自身是否在前台。例如每个虚拟机通过/dev/vmdx节点来查询该虚拟机自身是否为激活状态。
以上三个步骤的顺序没有严格限定,或者任意在先,或者同时进行。
请参阅图2,下面以显示屏为例,说明步骤S10中如何实现显示屏的驱动程序虚拟化。
步骤S11:在显示屏的驱动程序中增加active_vmd变量用来记录当前处于前台运行的虚拟机id。
步骤S12:在显示屏的驱动程序中的刷屏(刷新屏幕)接口中增加判断,如果当前发送刷屏命令的虚拟机id和active_vmd变量中的值一样,那么配置寄存器刷新屏幕内容。如果当前发送刷屏命令的虚拟机id和active_vmd变量中的值不一样,那么该刷屏命令丢弃不执行。
步骤S13:采用vmd_switch_event函数用来处理VMD_BACKGROUND和VMD_FOREGROUND消息。VMD_BACKGROUND消息:用来切换发送消息的虚拟机为后台运行。VMD_FOREGROUND消息:用来切换发送消息的虚拟机为前台运行。
对VMD_BACKGROUND消息,把active_vmd变量设置为-1,并停止所有刷新屏幕任务,阻止所有虚拟机的刷屏请求,重置显示控制器状态,让显示控制器刷黑屏。
对VMD_FOREGROUND消息,把active_vmd变量设置为发送该消息的虚拟机id。
请参阅图3,下面对步骤S30中构建虚拟机管理驱动进行详细说明。
步骤S31:为主操作系统和每个用户空间的操作系统分别创建上下文(context),所有上下文都有事件列表(event list)用来记录当前上下文相关的消息;使用变量active_vmd来记录当前处于激活状态的虚拟机。
步骤S32:为每个虚拟机各自创建设备节点例如为/dev/hmd、/dev/vmd0、/dev/vmd1分别用来给HMD(Host Mobile Device,主机移动设备)、VMD(Virtual Mobile Device,虚拟移动设备)0、VMD1使用。
步骤S33:对vmd节点执行写操作:处理写入的VMD_BOOT、VMD_SWITCH、VMD_SET_VMD_ID消息;或者对vmd节点执行读操作:读取当前vmd状态消息,如VMD_ACTIVE消息、VMD_IDLE消息;或者对hmd节点执行读操作:读取hmd状态消息,如HMD_BOOTED_VMD消息、HMD_BOOTED_VMD_ALL消息。
例如,每个虚拟机的虚拟机id如下。HMD_ID = -1;VMD0_ID = 0;VMD1_ID = 1。
vmd的消息类型如下:VMD_SWITCH消息表示vmd发起切换。VMD_BOOT消息表示vmd启动完成。VMD_SET_VMD_ID消息表示设置当前的激活虚拟机的vmd id。VMD_ACTIVE消息表示vmd处于激活状态,也就是处于前台。VMD_IDLE消息表示vmd处于空闲(idle)状态,也就是处于后台。
hmd的消息类型如下:HMD_BOOTED_VMD消息表示vmd启动完成。HMD_BOOTED_VMD_ALL消息表示所有vmd启动完成。
处理vmd节点写入的VMD_SET_VMD_ID消息是调用所有驱动的vmd_switch_event函数发送VMD_FOREGROUND消息,设置active_vmd变量为当前的虚拟机id。
处理vmd节点写入的VMD_BOOT消息是判断是否为最后一个启动的虚拟机。如果是,往hmd的事件列表中插入HMD_BOOTED_VMD_ALL消息和发起请求的虚拟机id。如果否,调用所有驱动的vmd_switch_event函数发送VMD_BACKROUND消息,设置active_vmd变量为HMD_ID,往hmd的事件列表中插入HMD_BOOTED_VMD消息和发起请求的虚拟机id。
处理vmd节点写入的VMD_SWTICH消息是调用所有驱动的vmd_switch_event函数发送VMD_BACKROUND消息,设置active_vmd变量为HMD_ID。再调用所有驱动的vmd_switch_event函数发送VMD_FOREGROUND消息,设置active_vmd变量为目标的虚拟机id。往目标虚拟机的事件列表中插入VMD_ACTIVE消息和发起请求的虚拟机id。
VMD节点读取消息的处理方式是判断active_vmd变量是否等于当前发起读请求的虚拟机id。如果是,返回VMD_ACTIVE消息。如果否,返回VMD_IDLE消息。
HMD节点读取消息的处理方式是判断hmd的事件列表中是否有消息。如果是,返回消息,如HMD_BOOTED_VMD消息、HMD_BOOTED_VMD_ALL消息。如果否,不返回消息。
请参阅图4,这是本申请所实现的一种轻量级虚拟化系统的具体实施例。该实施例以手机为例,最底层的是硬件层;往上一层是内核层,这是指主操作系统的内核层,例如是Linux内核;再往上一层是虚拟设备层;最顶层是用户空间层。
该实施例在内核层中实现内核驱动虚拟化、存储虚拟化和虚拟机管理驱动。
该实施例在虚拟设备层中虚拟三个手机设备,分别是HMD、VMD0、VMD1。HMD中运行的操作系统是POS(privileged OS,特权操作系统),用来做权限控制和系统配置,也就是主操作系统。POS例如是Linux操作系统,没有图形显示界面,只能进行命令行输入。VMD0和VMD1中运行的操作系统是具有完整功能的手机操作系统,也就是用户空间的操作系统,图4中显示为OS0、OS1。
所述存储虚拟化把手机中的存储空间划分成POS、OS0和OS1使用的不同空间,三个操作系统拥有独立的系统镜像和数据存储区域,三者互不干扰。
针对不同虚拟手机设备会用到的共同硬件如显示处理器、GPU、视频处理器、背光控制、触摸屏等,进行硬件单元的驱动程序的多上下文修改,使硬件单元的驱动程序支持多进程的并发访问。同时在以上驱动的实现里,往虚拟机管理驱动中注册虚拟机状态改变的回调函数。在虚拟机状态发生改变时,虚拟机管理驱动也要响应虚拟机切换事件,设置相应的设备状态。
请参阅图5,这是本申请提供的虚拟机管理驱动的结构示意图。所述虚拟机管理驱动(VMD manager kernel driver)会在/dev节点下为每个虚拟手机设备生成一个文件节点。在本实施例中是/dev/hmd、/dev/vmd0、/dev/vmd1。对应每个操作系统有相应的服务进程来和虚拟机管理驱动进行通讯。每个虚拟手机设备只能操作自己对应的节点。POS操作/dev/hmd,OS0操作/dev/vmd0,OS1操作/dev/vmd1。每个虚拟设备可以相互之间发送同步或者异步命令。同步命令需要等对应的虚拟设备接收到命令并处理完成后,发送端才能返回。异步命令则由发送端直接返回。
请参阅图6,虚拟机之间的切换流程具体包括如下步骤,以从第一虚拟机vmd0切换到第二虚拟机vmd1为例。
步骤S41:在第一虚拟机vmd0的操作系统中选择切换应用程序,第一虚拟机vmd0发送切换命令给第一虚拟机的文件节点/dev/vmd0。
步骤S42:虚拟机管理驱动接收到切换命令后,把前台虚拟机从第一虚拟机vmd0标记为第二虚拟机vmd1,然后调用所有驱动注册的回调函数,进行驱动的状态切换。
步骤S43:当所有状态切换完成后,虚拟机管理驱动往第二虚拟机的文件节点/dev/vmd1中发送激活命令VMD_ACTIVE。
步骤S44:第二虚拟机vmd1中的虚拟机通讯服务接收到激活命令VMD_ACTIVE后唤醒第二虚拟机vmd1的操作系统,虚拟机切换完成。
本申请在每个操作系统中都创建一个虚拟机通讯服务用来和“虚拟机管理驱动”通信、响应“虚拟机管理驱动”发送过来的事件。虚拟机通讯服务是一类在后台运行的特殊进程,用于执行特定的系统任务,在系统启动的时候就自动启动并且一直运行直到系统关闭。比如虚拟管理驱动给vmd0发送过来一个switch to vmd0消息,那么vmd0的虚拟机通讯服务会收到这个消息并唤醒vmd0上的操作系统OS0。
请参阅图7,多虚拟机自动启动的流程具体包括如下步骤。
步骤S51:电子设备开机自动加载HMD的主操作系统POS,POS在启动过程中会运行一个虚拟机通讯服务进行虚拟机管理驱动的消息处理并在虚拟机通讯服务启动时启动vmd0的操作系统OS0。
步骤S52:OS0启动进入到桌面后,vmd0的操作系统OS0自动调用虚拟机通讯服务往虚拟机管理驱动中发送当前虚拟机启动完成命令VMD_BOOTED。
在用户空间的操作系统上的虚拟机通讯服务是一个服务程序,用来发送和接收虚拟机管理驱动的消息。比如vmd0要发起切换,vmd0上有个应用程序,点一下这个应用程序就会往vmd0上的虚拟机通讯服务发送一条switch消息,虚拟机通讯服务收到这条switch消息后又向/dev/vmd0(虚拟机管理驱动)发送VMD_SWTICH消息。vmd1上的虚拟机通讯服务会在/dev/vmd1节点收到VMD_ACTIVE消息,然后vmd1上的虚拟机通讯服务会把vmd1上的操作系统OS1唤醒。
步骤S53:虚拟机管理驱动接收到vmd0的操作系统启动完成命令OS0VMD_BOOTED后,查询当前需要启动的虚拟机个数。如果还有虚拟机需要启动,如vmd1,虚拟机管理驱动往相应的需要启动的虚拟机的文件节点/dev/hmd发送虚拟机启动命令VMD_BOOT,让HMD的操作系统POS继续启动下一个虚拟机。如果这个是最后一个需要启动的虚拟机,那么虚拟机管理驱动直接返回,界面就停留在最后一个启动的虚拟机上。
综上所述,本申请可以在手机等移动终端设备上实现一套基于内核驱动虚拟化构造的轻量级虚拟化系统;可同时运行多个虚拟机,每个虚拟机都拥有和物理机相同的功能,实现虚拟机之间自由切换,开机自动启动所有虚拟机的功能。
以上仅为本申请的优选实施例,并不用于限定本申请。对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。