一种实时虚拟化系统及其执行方法
技术领域
本发明涉及虚拟化技术领域,具体涉及一种实时虚拟化系统及其执行方法。
背景技术
目前,嵌入式系统的功能越来越多样化,使用到的软件模组的数量与日俱增,使系统构建的难度和复杂性快速上升,因此,人们引入了虚拟化技术来应对这一问题。
然而,在实时系统中使用虚拟化解决方案存在诸多问题,其中一个比较重要的问题是虚拟化的性能。
由于实时虚拟化方案的性能损失主要由虚拟机发起的超级调用造成,因此人们想到将多个超级调用一起进行。
但是,按照目前的现有技术如Xen的实现,简单地将多个超级调用一起执行会造成如下问题:
(1)由于要执行的超级调用的数量可能很大,虚拟机陷入虚拟机监视器执行过久,破坏系统的实时性,并有可能使整个系统失去响应。
(2)一旦其中一个超级调用失败,后面的依赖它的超级调用有可能也会失败,但这些后面的超级调用仍然会被试图执行,白白浪费处理器时间。
(3)某些超级调用由于耗时较短,适合批量执行,而另外一些由于耗时较长不适合批量执行,而目前的Xen实现允许任意超级调用的批量执行,有可能导致系统失去响应。
(4)超级调用只能在和虚拟CPU对应的物理CPU上处理,而不能由单独的物理CPU核处理,这在实时系统中会导致大量的处理器状态切换并大大降低了超级调用执行的效率。
基于现有技术存在的上述技术问题,本发明提出一种实时虚拟化系统及其执行方法。
发明内容
本发明提供一种实时虚拟化系统及其执行方法。
本发明采用以下技术方案:
一种实时虚拟化系统,包括:
一虚拟机监视器,用于对所述虚拟机提供虚拟化服务;
若干连接于所述虚拟机监视器的虚拟机模块,用于支持虚拟化应用程序;
处理器,所述虚拟机监视器运行在所述处理器上以使用实时超调用批量执行算法或跨核超调用异步执行算法。
进一步地,所述处理器为单核处理器或多核处理器,其中,所述虚拟机监视器运行在所述处理器上使用实时超调用批量执行算法;所述虚拟机监视器运行在所述处理器上使用跨核超调用异步执行算法。
进一步地,所述处理器上还设有使用共享内存创建并能够具备多个写者和一个读者的环形缓冲区,所述环形缓冲区用于存储虚拟机模块发起的批量超级调用的具体内容,所述虚拟机监视器连接于所述环形缓冲区,所述环形缓冲区连接于所述虚拟机模块。
进一步地,所述虚拟机模块包括机电控制模块和/或通讯模块。
本发明还提供一种实时超级调用批量执行的方法,包括如下步骤:
步骤1.1:虚拟机模块发起实时超级调用批量执行,将所述超级调用的各个调用号分别填入已准备好并处于内存中的表格,并针对每个所述调用号在所述表格中填入所述调用号所需的参数;
步骤1.2:所述虚拟机模块触发批量超级调用起始命令,并将步骤1.1中所述表格的指针、表格的长度和执行模式作为参数发送给所述起始命令;
步骤1.3:虚拟机监视器收到步骤1.2所述起始命令后,检查指向所述表格的指针是否合法,若不合法则报错;
步骤1.4:所述虚拟机监视器检查列于所述表格中的所述超级调用,如果发现所述表格中含有执行时间不确定或执行时间超出用户预先指定的时间限额的超级调用,那么报错;
步骤1.5:所述虚拟机监视器检查所述超级调用的执行模式;
步骤1.6:在步骤1.1所述表格中的所述超级调用执行完毕后,所述虚拟机监视器将其结果写回表格中预留的与该超级调用对应的结果回写区域。
进一步地,步骤1.5中,所述执行模式有两个选项能够设置,分别为是否分阶段执行和是否忽略错误;其中,若是否分阶段执行若设置为是,则所述虚拟机监视器在执行步骤1.1中所述的表格中的超级调用时,会周期性地打断执行并响应中断,然后再继续执行所述表格中的超级调用,所述分阶段执行若设置为否,则所述虚拟机监视器首先检查超级调用的数量是否过多,若过多则直接报错退出,若数量不超过用户事先指定的数量限额则在执行时会一次将超级调用全部执行完毕;若忽略错误若设置为是,则所述虚拟机监视器在执行所述表格中的超级调用时,如果遇到某个超级调用返回错误则继续执行下面的超级调用,所述忽略错误若设置为否,则所述虚拟机监视器在执行此列表中的超级调用时遇到错误立即退出。
本发明还提供一种实时超级调用跨核异步执行的方法,包括如下步骤:
步骤2.1:发起实时超级调用跨核异步执行的虚拟机模块将欲执行的超级调用放置于环形缓冲区内;
步骤2.2:虚拟机监视器中的运行在与虚拟机不同的CPU上的异步超级调用处理线程从所述环形缓冲区内接收一个超级调用请求,并确认所述超级调用被异步执行,比如不涉及线程切换、中断处理等必须在同一个CPU上完成的操作;
步骤2.3:所述虚拟机监视器的异步超级调用处理线程处理所述超级调用并返回该超级调用的返回值到所述环形缓冲区内部槽位的预留回写空间中;
步骤2.4:所述虚拟机模块从所述环形缓冲区中取出超级调用的结果。
与现有技术相比,本发明的优越效果在于:
1、本发明所述的超级调用执行是由虚拟机模块批量填充于表格中后批量进行的,将跨保护域的高昂代价平摊在了多个超级调用上,提高了超级调用的平均效率。
2、本发明允许分阶段执行超级调用,因此在批量执行超级调用时可以进行中间暂停以处理更紧急的事务,比如时钟中断、外部设备输入,极大程度提高了系统的实时性。
3、本发明允许批量执行超级调用时随时报错退出,以防止对后续超级调用的无意义执行。
4、本发明在多核处理器环境下允许使用另一颗处理器以异步方式专门执行超级调用,此时,超级调用的执行不需要进行任何的处理器状态切换,极大程度地提高了平均效率。
5、在多核处理器下,由于本发明使用共享内存组织的环形缓冲区,还允许超级调用被另一颗指令集完全不同的处理器执行,以便在功耗或价格受限制时最大限度地发挥处理系统的性能。
6、在多核处理器下,由于本发明中运行虚拟机的处理器不需要切换到特权态,不需要关闭中断或进行系统调用,因此可以以最小延时处理随时可能到来的中断,大大提高了系统的实时性。
具体实施方式
为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合具体实施方式对本发明进行进一步的详细描述,需要说明的是,在不冲突的情况下,本申请的实施例及实施例中的特征可以相互组合。
实施例1
一种实时虚拟化系统,包括:
一虚拟机监视器,用于对所述虚拟机提供虚拟化服务;
若干连接于所述虚拟机监视器的虚拟机模块,用于支持虚拟化应用程序;
处理器,所述虚拟机监视器运行在所述处理器上以使用实时超调用批量执行算法或跨核超调用异步执行算法。
在本实施例中,所述处理器为单核处理器或多核处理器,其中,所述虚拟机监视器运行在所述处理器上使用实时超调用批量执行算法;所述虚拟机监视器运行在所述处理器上使用跨核超调用异步执行算法。
在本实施例中,所述处理器上还设有使用共享内存创建并能够具备多个写者和一个读者的环形缓冲区,所述环形缓冲区用于存储虚拟机模块发起的批量超级调用的具体内容,所述虚拟机监视器连接于所述环形缓冲区,所述环形缓冲区连接于所述虚拟机模块。
所述实时虚拟化系统的实时超级调用批量执行的方法,包括如下步骤:
步骤1.1:虚拟机模块发起实时超级调用批量执行,将所述超级调用的各个调用号分别填入已准备好并处于内存中的表格,并针对每个所述调用号在所述表格中填入所述调用号所需的参数;
步骤1.2:所述虚拟机模块触发批量超级调用起始命令,并将步骤1.1中所述表格的指针、表格的长度和执行模式作为参数发送给所述起始命令;
步骤1.3:虚拟机监视器收到步骤1.2所述起始命令后,检查指向所述表格的指针是否合法,若不合法则报错;
步骤1.4:所述虚拟机监视器检查列于所述表格中的所述超级调用,如果发现所述表格中含有执行时间不确定或执行时间超出用户预先指定的时间限额的超级调用,那么报错;
步骤1.5:所述虚拟机监视器检查所述超级调用的执行模式;
步骤1.6:在步骤1.1所述表格中的所述超级调用执行完毕后,所述虚拟机监视器将其结果写回表格中预留的与该超级调用对应的结果回写区域。
在本实施例的步骤1.2中,所述起始命令将被传给虚拟机监视器以代表批量超级调用的开始。
步骤1.5中,所述执行模式有两个选项能够设置,分别为是否分阶段执行和是否忽略错误;其中,若是否分阶段执行若设置为是,则所述虚拟机监视器在执行步骤1.1中所述的表格中的超级调用时,会周期性地打断执行并响应中断,然后再继续执行所述表格中的超级调用,所述分阶段执行若设置为否,则所述虚拟机监视器首先检查超级调用的数量是否过多,若过多则直接报错退出,若数量不超过用户事先指定的数量限额则在执行时会一次将超级调用全部执行完毕;若忽略错误若设置为是,则所述虚拟机监视器在执行所述表格中的超级调用时,如果遇到某个超级调用返回错误则继续执行下面的超级调用,所述忽略错误若设置为否,则所述虚拟机监视器在执行此列表中的超级调用时遇到错误立即退出。
所述实时虚拟化系统的实时超级调用跨核异步执行的方法,包括如下步骤:
步骤2.1:发起实时超级调用跨核异步执行的虚拟机模块将欲执行的超级调用放置于环形缓冲区内;
步骤2.2:虚拟机监视器中的运行在与虚拟机不同的CPU上的异步超级调用处理线程从所述环形缓冲区内接收一个超级调用请求,并确认所述超级调用被异步执行,例如不涉及线程切换、中断处理等必须在同一个CPU上完成的操作;
步骤2.3:所述虚拟机监视器的异步超级调用处理线程处理所述超级调用并返回该超级调用的返回值到所述环形缓冲区内部槽位的预留回写空间中;
步骤2.4:所述虚拟机模块从所述环形缓冲区中取出超级调用的结果。
实施例2
在本实施例中,以PLC工控系统为应用场景,所述虚拟机模块(即为PLC工控系统)包括机电控制模块和通讯模块。其中,所述机电控制模块的优先级较所述通讯模块的优先级高,所述机电控制模块不会批量执行所述超级调用;所述通讯模块会批量执行所述超级调用以便于对数据包的大量收发。
系统上电后,所述虚拟机监视器从所述处理器上加载机电控制模块和通讯模块;
所述通讯模块向所述虚拟机监视器提出请求以批量执行所述超级调用来接收上位机发来的工程数据,进行内存中表格的填写并选择分阶段执行并不忽略错误;
机电传感器接收到环境中产生的中断,并向所述机电控制模块发出中断信息;
所述虚拟机监视器收集所述通讯模块和所述机电控制模块发送的数据,暂停批量执行所述超级调用并处理所述中断信息,并将所述中断信息发送至所述机电控制模块的处理线程;
所述处理线程完成对所述中断信息的处理后,返回所述虚拟监视器继续执行所述通讯模块发出的批量执行所述超级调用的请求。
在本实施例中,若,所述虚拟机监视器在执行所述通讯模块发出的批量执行所述超级调用请求是遇到了其中一个超级调用返回错误,则,所述虚拟机监视器停止对这一批所述超级调用的执行并返回结果给所述通讯模块,即所述虚拟机监视器在批量处理所述超级调用请求时遇到了中断信息,此时所述虚拟机监视器会暂停对批量所述超级调用的处理并先处理中断信息,保证了系统的实时性。
此外,所述虚拟机监视器在遇到所述超级调用执行错误时,应用程序的要求立即退出执行,没有浪费时间在后续的所述超级调用上,节约了所述处理器的资源。
实施例3
在本实施例中,以机床控制系统为应用场景,所述虚拟机模块(即机床控制系统)包括运动控制模块、通信控制模块和图形界面模块。在三个模块中,所述运动控制模块的优先级最高,计算量较小,所述通信控制模块和所述图形界面模块对效率的要求均不高,优先级均低于所述运动控制模块,所述通信控制模块需要大量解算数据,这些解算必须由只能在特权态访问的DSP指令集完成,因此,需要使用所述超级调用。
系统上电后,所述虚拟机监视器模块从所述处理器中加载所述运动控制模块、所述通信控制模块与所述图形界面模块;
所述通信控制模块从上位机接收数据,并且将其中的数据组织成一系列的所述超级调用填入环形缓冲区;
所述处理器从所述环形缓冲区读取数据,利用自身的高效专用处理能力完成处理,并将结果放回所述环形缓冲区中;
所述通信控制模块从所述环形缓冲区读回数据,并传输给所述运动控制模块和所述图形界面模块以完成整个系统的功能。
在本实施例中,所述通信控制模块需要的大量解算数据由专用于这一用途的所述处理器完成,为了高效地做到这一点,本实施例采取了跨核异步超级调用执行的方式,大大提高了系统的性能。
整个运行过程中,所述处理器都没有发生任何特权状态变更,因此不存在特权态转换的开销,此外,如果在所述处理器上有需要处理的中断信息,该中断信息也不受在所述处理器上密集解算大量耗时的DSP运算影响而可以实时处理,因此,本实施例也体现出了本发明对系统响应时间的改善。
本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书界定。