虚拟机管理方法及相关系统、存储介质
本申请要求于2021年08月18日提交中国专利局、申请号为202110950385.8、申请名称为“虚拟机管理方法及相关系统、存储介质”的中国专利申请的优先权,其全部内容通过引用结合在本申请中。
技术领域
本申请涉及计算机技术领域,尤其涉及一种虚拟机管理方法及相关系统、存储介质。
背景技术
随着信息技术的发展与芯片制造工艺的不断提高,嵌入式系统得到的广泛的发展与应用。嵌入式操作系统作为应用程序的基础开发平台,可以简化软件的开发过程,降低后期软件维护的开销,因此已逐步发展成为嵌入式系统中的一个重要组成部分。对实时性、可靠性有严格要求的物联网、汽车电子、工业自动化、军事与航空航天领域,都能够看到嵌入式操作系统的身影。
同时随着汽车电子控制系统的功能、复杂度的不断增加,如今的一辆中档轿车中装备有大约80个电子控制单元(electronic control unit,ECU),这使得汽车电子软件的开发也变得越来越复杂。此外,ECU应用软件的开发对硬件平台的依赖也较高,这导致了应用程序可移植性差、软件不兼容等问题。在90年代,ECU受限于硬件能力,其主要架构为单机架构,各个ECU间独立工作,彼此不进行通信;应用程序直接通过驱动程序与硬件交互。
随着电子技术、计算机技术和信息技术等新技术的应用和发展,汽车电子控制应用而生。汽车工业界相继提出了汽车电子类开放系统和对应接口标准/汽车分布式执行标准(open systems and the corresponding interfaces for automotive electronics/vehicle distributed executive,OSEK/VDX)、汽车开放系统架构(automotive open system architecture,AUTOSAR)等规范,为车载嵌入式实时操作系统以及相关服务制定了统一的标准规范,以实现汽车电子的开放开发平台,提供高度模块化、移植性和复用性,简化开发流程,降低开发成本。
OSEK/VDX规范是汽车电子基础软件方面制定的最早的标准,由德国汽车工业界于1993年提出,旨在为ECU提供一个统一的软件架构标准,包括嵌入式操作系统、通信栈和网络管理协议等。然而随着ECU的性能提升与扩展考虑,OSEK/VDX规范的自身局限性已不能满足汽车电子向现代复杂集成架构发展的需求,即众多功能都集成在一个ECU中实现。
OSEK/VDX没有考虑汽车电子应用的安全性和可靠性,AUTOSAR在OSEK/VDX的基础上,提出了一系列与隔离保护相关的实施规范,以保证汽车电子应用的安全性和可靠性。目前,汽车电子控制主要由电子控制单元(electronic control unit,ECU)执行,随着ECU能力的提升,针对于具备内存保护单元(memory protection unit,MPU)的设备,AUTOSAR提出了一种软件分区隔离方法,将设备的存储区域分为操作系统(operating system,OS)分区与应用分区。操作系统的内核、存储软件、外设与输入/输出(input/output,I/O)等基础软件位于一个可信的处于特权模式(privilege mode)的操作系统分区中。应用软件在逻辑上被分为可信应用与普通应用,普通应用被划分至不可信的、非特权模式(Non-privilege mode)的应用分区;可信应用与操作系统内核一样,处于可信的、特权模式的操作系统分区中。其中,普通应用之间的数据段上数据不可读写、代码不可执行,只能通过系统调用进行特权切换访问系统服务。
现有微控制单元(Microcontroller Unit,MCU)下,大部分不支持硬件虚拟化,在使用指令 仿真时,每一条指令都会陷入到主机里面,以确认是否可以处理该指令。在通过系统调用进行特权切换访问系统服务时,需要先陷入到主机,主机确认可以处理后则由虚拟机内核进行系统调用处理,在虚拟机内核处理完之后也要陷入到主机以确认返回地址。由于每一条指令都需要进行陷入与仿真,因此系统性能损失较大。
发明内容
本申请公开了一种虚拟机管理方法及相关系统、存储介质,可以减少陷入主机的次数,提高了系统运行的效率,且提高了系统性能。
第一方面,本申请实施例提供一种虚拟机管理方法,所述方法包括:虚拟机管理器接收来自虚拟机应用的系统调用指令,所述系统调用指令携带调用号,其中,所述系统调用指令为特权指令;所述虚拟机管理器根据所述虚拟机的下文和空闲上下文保存区域CSA得到第一CSA,并根据所述调用号对第二CSA进行处理,得到处理后的第二CSA,其中,所述第二CSA是在所述第一CSA之前确定的,所述第一CSA与所述处理后的第二CSA相邻,所述第一CSA的返回地址为虚拟机内核的系统调用服务处理地址,所述处理后的第二CSA的返回地址为所述虚拟机内核的下一跳的地址,所述处理后的第二CSA用于指示在系统调用处理完后跳转至所述虚拟机内核的下一跳的地址;所述虚拟机管理器根据所述第一CSA的返回地址执行跳转至所述虚拟机内核的系统调用服务处理地址,以触发所述虚拟机内核进行系统调用处理。
通过本申请实施例,虚拟机管理器接收来自虚拟机应用的系统调用指令,并根据所述虚拟机的下文和空闲上下文保存区域CSA得到第一CSA,根据所述调用号对第二CSA进行处理,得到处理后的第二CSA,进而虚拟机管理器根据所述第一CSA的返回地址执行跳转至所述虚拟机内核的系统调用服务处理地址,以触发所述虚拟机内核进行系统调用处理。采用该手段,基于虚拟机的下文和空闲上下文保存区域CSA得到第一CSA,进而虚拟机管理器可以实现执行跳转至虚拟机内核的系统调用服务处理地址以进行系统调用;其中,处理后的第二CSA是在第一CSA之前确定的,第一CSA与所述处理后的第二CSA相邻,这样在虚拟机内核进行系统调用处理完后,基于处理后的第二CSA,可以实现由虚拟机内核跳转至所述虚拟机内核的下一跳的地址。相比现有技术中需要多次陷入主机,本方案减少了陷入次数,提高了系统运行的效率,且提高了系统性能。
作为一种可选的实现方式,所述虚拟机管理器根据所述虚拟机的下文和空闲上下文保存区域CSA得到第一CSA,包括:所述虚拟机管理器将所述虚拟机的下文存储至所述空闲CSA中,以得到所述虚拟机的下文的CSA;所述虚拟机管理器将所述下文的CSA的模式修改为内核模式,将所述下文的CSA的内存保护域修改为所述虚拟机的内存边界,将所述下文的CSA的栈地址修改为所述虚拟机的栈地址,将所述下文的CSA的返回地址修改为所述虚拟机内核的系统调用服务处理地址,并修改所述下文的CSA的上下文位,以得到第一CSA。
采用该手段,通过构建新的CSA,使得虚拟机管理器可以实现执行跳转至虚拟机内核的系统调用服务处理地址以进行系统调用。
作为一种可选的实现方式,所述虚拟机管理器将所述调用号复制到所述第二CSA中,并将所述第二CSA的返回地址更新为所述虚拟机内核的下一跳的地址,以得到所述处理后的第二CSA。
采用该手段,在虚拟机内核进行系统调用处理完后,基于处理后的第二CSA,可以实现由虚拟机内核跳转至所述虚拟机内核的下一跳的地址。相比现有技术中需要多次陷入主机, 本方案减少了陷入次数,提高了系统运行的效率,且提高了系统性能。
作为一种可选的实现方式,所述虚拟机内核的下一跳的地址为所述虚拟机应用的下一条指令地址。
作为另一种可选的实现方式,所述虚拟机内核的下一跳的地址为所述虚拟机管理器的结果检查地址。
作为一种可选的实现方式,所述方法还包括:所述虚拟机管理器获取所述虚拟机内核的处理结果,并对所述处理结果进行验证;当所述处理结果验证通过后,所述虚拟机管理器跳转至所述虚拟机应用。
采用该手段,对于处理结果进行检查,验证通过后才跳转到所述虚拟机应用,保障了处理结果的合法性,提高了系统调用的安全性。
作为一种可选的实现方式,所述系统调用指令还携带所述虚拟机应用的地址,所述虚拟机管理器根据所述第一CSA的返回地址执行跳转至所述虚拟机内核之前,所述方法还包括:所述虚拟机管理器将所述虚拟机应用的地址和预设合法地址进行比对,以确认所述虚拟机应用的地址是否合法。
采用该手段,本方案对于调用发起方的合法性进行校验,提高了系统调用的安全性。
第二方面,本申请实施例提供一种虚拟机管理方法,所述方法包括:虚拟机管理器接收来自虚拟机应用的系统调用指令,所述系统调用指令携带调用号,其中,所述系统调用指令为特权指令;所述虚拟机管理器根据所述调用号和第一上下文保存区域CSA得到处理后的第一CSA,所述处理后的第一CSA的返回地址为所述虚拟机应用的下一条指令地址;所述虚拟机管理器根据所述调用号进行系统调用处理,并在所述系统调用处理完后根据所述处理后的第一CSA的返回地址执行跳转至所述虚拟机应用的下一条指令地址。
通过本申请实施例,虚拟机管理器接收来自虚拟机应用的系统调用指令,并根据所述调用号和第一上下文保存区域CSA得到处理后的第一CSA,所述处理后的第一CSA的返回地址为所述虚拟机应用的下一条指令地址;进而根据所述调用号进行系统调用处理,并在所述系统调用处理完后根据所述处理后的第一CSA的返回地址执行跳转至所述虚拟机应用的下一条指令地址。采用该手段,本方案增加同层HVC调用处理,可以用于处理自定义HVC请求。也就是说,虚拟机管理器进行系统调用处理,并在系统调用处理完后,跳转至虚拟机应用的下一条指令地址。采用该手段,提高了系统运行的效率,且提高了系统性能。
作为一种可选的实现方式,所述虚拟机管理器根据所述调用号和第一上下文保存区域CSA得到处理后的第一CSA,包括:所述虚拟机管理器将所述调用号复制到所述第一上下文保存区域CSA中,并将所述第一CSA的返回地址更新为所述虚拟机应用的下一条指令地址,以得到所述处理后的第一CSA。
作为一种可选的实现方式,所述系统调用指令还携带所述虚拟机应用的地址,所述虚拟机管理器根据所述调用号进行系统调用处理,并在所述系统调用处理完后根据所述处理后的第一CSA的返回地址执行跳转至所述虚拟机应用的下一条指令地址之前,所述方法还包括:所述虚拟机管理器将所述虚拟机应用的地址和预设合法地址进行比对,以确认所述虚拟机应用的地址是否合法。
采用该手段,本方案对于调用发起方的合法性进行校验,提高了系统调用的安全性。
第三方面,本申请实施例提供一种虚拟机管理方法,所述方法包括:虚拟机管理器在接 收到来自虚拟机外部设备的中断指令时,获取所述中断指令对应的中断挂起位;所述虚拟机管理器根据所述中断挂起位确定目标虚拟机,其中,所述目标虚拟机的内核为所述中断挂起位所属的内核;所述虚拟机管理器根据所述目标虚拟机的下文和空闲上下文保存区域CSA得到第一CSA,并对第二CSA进行处理,得到处理后的第二CSA,其中,所述第二CSA是在所述第一CSA之前确定的,所述第一CSA与所述处理后的第二CSA相邻,所述第一CSA的返回地址为所述目标虚拟机的内核的中断处理地址,所述处理后的第二CSA的返回地址为所述目标虚拟机的应用的当前指令地址,所述处理后的第二CSA用于指示在中断处理完后跳转至所述目标虚拟机的应用的当前指令地址;所述虚拟机管理器根据所述第一CSA的返回地址执行跳转至所述目标虚拟机的内核的中断处理地址,以触发所述目标虚拟机的内核进行中断处理。
通过本申请实施例,虚拟机管理器接收到来自外部设备的中断指令后,若该中断挂起位属于目标虚拟机内核,根据所述目标虚拟机的下文和空闲上下文保存区域CSA得到第一CSA,并对第二CSA进行处理,得到处理后的第二CSA,进而虚拟机管理器基于第一CSA的返回地址执行跳转到目标虚拟机内核,以便所述目标虚拟机内核进行中断处理,且基于处理后的第二CSA,可以实现由虚拟机内核跳转至所述虚拟机内核的下一跳的地址。相比现有技术中需要多次陷入主机,本方案减少了陷入次数,提高了系统运行的效率,且提高了系统性能。
本方案通过实时构造新的上下文来分发系统调用处理内核,实现了虚拟机间的分区隔离,减小了可信基。采用本方案,可以实现中断虚拟化。
作为一种可选的实现方式,所述虚拟机管理器根据所述目标虚拟机的下文和空闲上下文保存区域CSA得到第一CSA,包括:所述虚拟机管理器将所述目标虚拟机的下文存储至所述空闲CSA中,以得到所述目标虚拟机的下文的CSA;所述虚拟机管理器将所述下文的CSA的模式修改为内核模式,将所述下文的CSA的内存保护域修改为所述目标虚拟机的内存边界,将所述下文的CSA的栈地址修改为所述目标虚拟机的栈地址,将所述下文的CSA的返回地址修改为所述目标虚拟机的内核的中断处理地址,并修改所述下文的CSA的上下文位,以得到第一CSA。
作为一种可选的实现方式,所述虚拟机管理器将所述第二CSA的返回地址更新为所述目标虚拟机的应用的当前指令地址,以得到所述处理后的第二CSA。
第四方面,本申请实施例提供一种虚拟机管理装置,所述装置包括:接收模块,用于接收来自虚拟机应用的系统调用指令,所述系统调用指令携带调用号,其中,所述系统调用指令为特权指令;确定模块,用于根据所述虚拟机的下文和空闲上下文保存区域CSA得到第一CSA,并根据所述调用号对第二CSA进行处理,得到处理后的第二CSA,其中,所述第二CSA是在所述第一CSA之前确定的,所述第一CSA与所述处理后的第二CSA相邻,所述第一CSA的返回地址为虚拟机内核的系统调用服务处理地址,所述处理后的第二CSA的返回地址为所述虚拟机内核的下一跳的地址,所述处理后的第二CSA用于指示在系统调用处理完后跳转至所述虚拟机内核的下一跳的地址;处理模块,用于根据所述第一CSA的返回地址执行跳转至所述虚拟机内核的系统调用服务处理地址,以触发所述虚拟机内核进行系统调用处理。
通过本申请实施例,虚拟机管理器接收来自虚拟机应用的系统调用指令,并根据所述虚拟机的下文和空闲上下文保存区域CSA得到第一CSA,根据所述调用号对第二CSA进行处 理,得到处理后的第二CSA,进而虚拟机管理器根据所述第一CSA的返回地址执行跳转至所述虚拟机内核的系统调用服务处理地址,以触发所述虚拟机内核进行系统调用处理。采用该手段,基于虚拟机的下文和空闲上下文保存区域CSA得到第一CSA,进而虚拟机管理器可以实现执行跳转至虚拟机内核的系统调用服务处理地址以进行系统调用;其中,处理后的第二CSA是在第一CSA之前确定的,第一CSA与所述处理后的第二CSA相邻,这样在虚拟机内核进行系统调用处理完后,基于处理后的第二CSA,可以实现由虚拟机内核跳转至所述虚拟机内核的下一跳的地址。相比现有技术中需要多次陷入主机,本方案减少了陷入次数,提高了系统运行的效率,且提高了系统性能。
作为一种可选的实现方式,所述确定模块,用于:将所述虚拟机的下文存储至所述空闲CSA中,以得到所述虚拟机的下文的CSA;将所述下文的CSA的模式修改为内核模式,将所述下文的CSA的内存保护域修改为所述虚拟机的内存边界,将所述下文的CSA的栈地址修改为所述虚拟机的栈地址,将所述下文的CSA的返回地址修改为所述虚拟机内核的系统调用服务处理地址,并修改所述下文的CSA的上下文位,以得到第一CSA。
作为一种可选的实现方式,所述确定模块,还用于:将所述调用号复制到所述第二CSA中,并将所述第二CSA的返回地址更新为所述虚拟机内核的下一跳的地址,以得到所述处理后的第二CSA。
作为一种可选的实现方式,所述虚拟机内核的下一跳的地址为所述虚拟机应用的下一条指令地址。
作为另一种可选的实现方式,所述虚拟机内核的下一跳的地址为所述装置的结果检查地址。
作为一种可选的实现方式,所述装置还包括第一验证模块,用于:获取所述虚拟机内核的处理结果,并对所述处理结果进行验证;当所述处理结果验证通过后,跳转至所述虚拟机应用。
作为一种可选的实现方式,所述系统调用指令还携带所述虚拟机应用的地址,所述装置还包括第二验证模块,用于:将所述虚拟机应用的地址和预设合法地址进行比对,以确认所述虚拟机应用的地址是否合法。
第五方面,本申请实施例提供一种虚拟机管理装置,所述装置包括:接收模块,用于接收来自虚拟机应用的系统调用指令,所述系统调用指令携带调用号,其中,所述系统调用指令为特权指令;确定模块,用于根据所述调用号和第一上下文保存区域CSA得到处理后的第一CSA,所述处理后的第一CSA的返回地址为所述虚拟机应用的下一条指令地址;处理模块,用于根据所述调用号进行系统调用处理,并在所述系统调用处理完后根据所述处理后的第一CSA的返回地址执行跳转至所述虚拟机应用的下一条指令地址。
通过本申请实施例,虚拟机管理器接收来自虚拟机应用的系统调用指令,并根据所述调用号和第一上下文保存区域CSA得到处理后的第一CSA,所述处理后的第一CSA的返回地址为所述虚拟机应用的下一条指令地址;进而根据所述调用号进行系统调用处理,并在所述系统调用处理完后根据所述处理后的第一CSA的返回地址执行跳转至所述虚拟机应用的下一条指令地址。采用该手段,本方案增加同层HVC调用处理,可以用于处理自定义HVC请求。也就是说,虚拟机管理器进行系统调用处理,并在系统调用处理完后,跳转至虚拟机应用的下一条指令地址。采用该手段,提高了系统运行的效率,且提高了系统性能。
作为一种可选的实现方式,所述确定模块,用于:将所述调用号复制到所述第一上下文 保存区域CSA中,并将所述第一CSA的返回地址更新为所述虚拟机应用的下一条指令地址,以得到所述处理后的第一CSA。
作为一种可选的实现方式,所述系统调用指令还携带所述虚拟机应用的地址,所述装置还包括验证模块,用于:将所述虚拟机应用的地址和预设合法地址进行比对,以确认所述虚拟机应用的地址是否合法。
第六方面,本申请实施例提供一种虚拟机管理装置,所述装置包括:获取模块,用于在接收到来自虚拟机外部设备的中断指令时,获取所述中断指令对应的中断挂起位;第一确定模块,用于根据所述中断挂起位确定目标虚拟机,其中,所述目标虚拟机的内核为所述中断挂起位所属的内核;第二确定模块,用于根据所述目标虚拟机的下文和空闲上下文保存区域CSA得到第一CSA,并对第二CSA进行处理,得到处理后的第二CSA,其中,所述第二CSA是在所述第一CSA之前确定的,所述第一CSA与所述处理后的第二CSA相邻,所述第一CSA的返回地址为所述目标虚拟机的内核的中断处理地址,所述处理后的第二CSA的返回地址为所述目标虚拟机的应用的当前指令地址,所述处理后的第二CSA用于指示在中断处理完后跳转至所述目标虚拟机的应用的当前指令地址;处理模块,用于根据所述第一CSA的返回地址执行跳转至所述目标虚拟机的内核的中断处理地址,以触发所述目标虚拟机的内核进行中断处理。
通过本申请实施例,虚拟机管理器接收到来自外部设备的中断指令后,若该中断挂起位属于目标虚拟机内核,根据所述目标虚拟机的下文和空闲上下文保存区域CSA得到第一CSA,并对第二CSA进行处理,得到处理后的第二CSA,进而虚拟机管理器基于第一CSA的返回地址执行跳转到目标虚拟机内核,以便所述目标虚拟机内核进行中断处理,且基于处理后的第二CSA,可以实现由虚拟机内核跳转至所述虚拟机内核的下一跳的地址。相比现有技术中需要多次陷入主机,本方案减少了陷入次数,提高了系统运行的效率,且提高了系统性能。
本方案通过实时构造新的上下文来分发系统调用处理内核,实现了虚拟机间的分区隔离,减小了可信基。采用本方案,可以实现中断虚拟化。
作为一种可选的实现方式,所述第二确定模块,用于:将所述目标虚拟机的下文存储至所述空闲CSA中,以得到所述目标虚拟机的下文的CSA;将所述下文的CSA的模式修改为内核模式,将所述下文的CSA的内存保护域修改为所述目标虚拟机的内存边界,将所述下文的CSA的栈地址修改为所述目标虚拟机的栈地址,将所述下文的CSA的返回地址修改为所述目标虚拟机的内核的中断处理地址,并修改所述下文的CSA的上下文位,以得到第一CSA。
作为一种可选的实现方式,所述第二确定模块,还用于:将所述第二CSA的返回地址更新为所述目标虚拟机的应用的当前指令地址,以得到所述处理后的第二CSA。
第七方面,本申请实施例提供一种虚拟机管理装置,包括处理器和存储器;其中,所述存储器用于存储程序代码,所述处理器用于调用所述程序代码,以执行如第一方面任一种可能的实施方式和/或第二方面任一种可能的实施方式提供的方法和/或第三方面任一种可能的实施方式提供的方法。
第八方面,本申请提供了一种计算机存储介质,包括计算机指令,当所述计算机指令在电子设备上运行时,使得所述电子设备执行如第一方面任一种可能的实施方式和/或第二方面任一种可能的实施方式提供的方法和/或第三方面任一种可能的实施方式提供的方法。
第九方面,本申请实施例提供一种计算机程序产品,当计算机程序产品在计算机上运行时,使得计算机执行如第一方面任一种可能的实施方式和/或第二方面任一种可能的实施方式提供的方法和/或第三方面任一种可能的实施方式提供的方法。
可以理解地,上述提供的第四方面所述的装置、第五方面所述的装置、第六方面所述的装置、第七方面所述的装置、第八方面所述的计算机存储介质或者第九方面所述的计算机程序产品均用于执行第一方面中任一所提供的方法、第二方面中任一所提供的方法以及第三方面中任一所提供的方法。因此,其所能达到的有益效果可参考对应方法中的有益效果,此处不再赘述。
附图说明
下面对本申请实施例用到的附图进行介绍。
图1a为本申请实施例适用的一种计算机系统的架构示意图;
图1b是现有AUTOSAR OS中软件架构示意图;
图1c是本申请实施例提供的一种车辆架构示意图;
图1d是本申请实施例提供的一种虚拟机管理系统架构的示意图;
图1e是本申请实施例提供的一种CSA的处理逻辑示意图;
图1f是本申请实施例提供的一种虚拟机架构的示意图;
图2a是本申请实施例提供的一种虚拟机管理方法的流程示意图;
图2b是本申请实施例提供的一种确定执行环境参数的方法的示意图;
图2c是本申请实施例提供的一种虚拟机管理方法的示意图;
图3a是本申请实施例提供的另一种虚拟机管理方法的流程示意图;
图3b是本申请实施例提供的另一种虚拟机管理方法的示意图;
图4a是本申请实施例提供的又一种虚拟机管理方法的示意图;
图4b是本申请实施例提供的又一种虚拟机管理方法的示意图;
图5a是本申请实施例提供的再一种虚拟机管理方法的流程示意图;
图5b是本申请实施例提供的再一种虚拟机管理方法的流程示意图;
图6a是本申请实施例提供的一种虚拟机管理装置的结构示意图;
图6b是本申请实施例提供的另一种虚拟机管理装置的结构示意图;
图6c是本申请实施例提供的又一种虚拟机管理装置的结构示意图;
图7是本申请实施例提供的一种虚拟机管理装置的结构示意图。
具体实施方式
下面结合本申请实施例中的附图对本申请实施例进行描述。本申请实施例的实施方式部分使用的术语仅用于对本申请的具体实施例进行解释,而非旨在限定本申请。
本申请实施例提供一种虚拟机管理方法,可以应用于采用汽车开放系统架构(automotive open system architecture,AUTOSAR)标准的计算机系统。该计算机系统可以部署在车辆上,也可以部署在远离车辆的地方并且与车辆进行无线通信,例如部署在与车辆通信连接的服务器上。部署在车辆上的计算机系统可以称为车载设备。车辆具体可以为轿车、卡车、摩托车、公共汽车、船、飞机、直升飞机、割草机、娱乐车、游乐场车辆、施工设备、电车、高尔夫球车、火车、和手推车等,本方案实施例不做特别的限定。
图1a为本申请实施例适用的一种计算机系统的架构示意图,如图1a所示,计算机系统100包括处理器101,处理器101和系统总线102耦合。处理器101可以是一个或者多个处理器,其中每个处理器都可以包括一个或多个处理器核。显示适配器(video adapter)103,显示适配器可以驱动显示器104,显示器104和系统总线102耦合。系统总线102通过总线桥105和输入输出(I/O)总线耦合。I/O接口106和I/O总线耦合。I/O接口106和多种I/O设备进行通信,比如输入设备107(如:键盘,鼠标,触摸屏等),媒体盘(media tray)108,(例如,CD-ROM,多媒体接口等)。收发器109(可以发送和/或接受无线电通信信号),摄像头110(可以捕捉静态和动态数字视频图像)和外部USB接口111。其中,可选地,和I/O接口106相连接的接口可以是USB接口。
其中,处理器101可以是任何传统处理器,包括精简指令集计算(reduced instruction set computing,RISC)处理器、复杂指令集计算(complex instruction set computing,CISC)处理器或上述的组合。可选地,处理器可以是诸如专用集成电路(application-specific integrated circuit,ASIC)的专用装置。可选地,处理器101可以是神经网络处理器或者是神经网络处理器和上述传统处理器的组合。
可选地,在本申请所述的各种实施例中,计算机系统100可位于远离自动驾驶车辆的地方,并且可与自动驾驶车辆无线通信。在其它方面,本申请所述的一些过程在设置在自动驾驶车辆内的处理器上执行,其它由远程处理器执行,包括采取执行单个操纵所需的动作。
计算机系统100可以通过网络接口112和软件部署服务器113通信。网络接口112是硬件网络接口,比如,网卡。网络114可以是外部网络,比如因特网,也可以是内部网络,比如以太网或者虚拟私人网络(VPN)。可选地,网络114还可以是无线网络,比如WiFi网络,蜂窝网络等。
硬盘驱动接口115和系统总线102耦合。硬盘驱动接口115和硬盘驱动器116相连接。系统内存117和系统总线102耦合。运行在系统内存117的数据可以包括计算机系统100的操作系统OS 118和应用程序122。
操作系统118包括壳(Shell)120和内核(kernel)121。Shell 120是介于使用者和操作系统之内核(kernel)间的一个接口。shell是操作系统最外面的一层。shell管理使用者与操作系统之间的交互:等待使用者的输入,向操作系统解释使用者的输入,并且处理各种各样的操作系统的输出结果。
内核121由操作系统中用于管理存储器、文件、外设和系统资源的那些部分组成。直接与硬件交互,操作系统内核通常运行进程,并提供进程间的通信,提供CPU时间片管理、中断、内存管理、IO管理等等。
应用程序122包括控制汽车自动驾驶相关程序123,比如,管理自动驾驶的汽车和路上障碍物交互的程序,控制自动驾驶汽车路线或者速度的程序,控制自动驾驶汽车和路上其他自动驾驶汽车交互的程序。应用程序122也存在于软件部署服务器(deploying server)113的系统上。在一个实施例中,在需要执行应用程序122时,计算机系统100可以从软件部署服务器113下载应用程序122。
应用程序122还可以包括其他程序,本方案对此不做具体限定。
传感器124和计算机系统100关联。传感器124用于探测计算机系统100周围的环境。举例来说,传感器124可以探测动物,汽车,障碍物和人行横道等,进一步传感器还可以探测上述动物,汽车,障碍物和人行横道等物体周围的环境,比如:动物周围的环境,例如,动物周围出现的其他动物,天气条件,周围环境的光亮度等。可选地,如果计算机系统100 位于自动驾驶的汽车上,传感器可以是摄像头,红外线感应器,化学检测器,麦克风等。
MPU是嵌入式系统中常用的用于内存保护的硬件资源,嵌入式系统使用多任务的操作和控制,该系统必须提供一种机制来保证正在运行的任务不破坏其他任务的操作,即要防止系统资源和其他一些任务不被非法访问。
MPU使用域(region)或者保护域(protected region)对内存的地址空间进行管理,域是与内存的地址空间相关联的属性。MPU中域的个数通常为8个,编号从0-7。域的大小和起始地址可以保存在协处理器CP15的寄存器c6中,域的大小可以是4KB~4GB的任何2的乘幂,域的起始地址必须是其大小的倍数。
操作系统可以为MPU的域配置访问权限,操作系统可以基于处理器当前的工作模式设定域的访问权限为读、只读或者不可访问等。
当处理器访问内存的一个域时,MPU比较该域的访问权限属性和处理器当前的工作模式,如果处理器的访问请求符合域的访问权限,则MPU允许内核读写内存;如果处理器的访问请求不符合域的访问权限,则产生一个异常信号。
在嵌入式系统中,内存管理单元(memory management unit,MMU)能够提供比MPU更强大的内存保护机制,MPU通常只提供内存保护,而MMU在提供内存保护的基础上,还可以提供虚拟地址到物理地址的映射等功能。
大多数使用MMU的机器都采用分页机制,操作系统可以在页表中设置每个页表访问权限,有些页表不可以访问,有些页表只能在特权模式下访问,有些页表在用户模式和特权模式下都可以访问,同时,访问权限又分为可读、可写和可执行三种。这样设定之后,当处理器要访问一个虚拟地址时(virtual address,VA)时,MMU会检查处理器当前处于用户模式还是特权模式,访问内存的目的是读数据、写数据还是取指令执行:如果与操作系统设定的权限相符,则允许访问,把VA转换成物理地址(phyasical address,PA);否则不允许执行,产生异常(exception)。
异常与中断的处理机制类似,不同的是中断由外部设备(如硬件错误、输入错误)产生,而异常由处理器内部产生,中断产生与处理器当前执行的指令无关,而异常是由于当前执行的指令出现问题导致的。
在正常情况下处理器在用户模式下执行用户程序,在中断或异常情况下处理器切换到特权模式执行内核程序,处理完中断或异常之后再返回用户模式继续执行用户程序。通常操作系统会将虚拟地址空间划分为用户空间和内核空间。例如x86平台的linux系统的虚拟地址空间范围是0x0000 0000~0xffff ffff,前3G的空间为用户空间,后1G的空间为内核空间。用户程序加载到用户空间,内核程序加载到内核空间,用户程序不能访问内核中的数据,也不能跳转到内核空间执行。这样可以保护内核,如果一个进程访问了非法地址,该进程可能会崩溃,但是不会影响到内核和系统的稳定性。在系统发生中断或异常时,不仅会跳转到中断服务函数或异常服务函数中执行,而且还会从用户模式切换到特权模式,从中断服务程序或异常服务程序跳转到内核代码中执行。
图1b所示架构中,普通应用运行在非特权层,当普通应用处理任务调度、系统服务请求以及I/O访问等操作时需要进行特权切换,从非特权模式切换到特权模式,而特权切换占用的时间较长。示例性的,当普通应用向内核请求需要更高权限运行的服务时,如特权I/O(priviledge I/O)的访问,进程间通信等,普通应用无法直接访问系统服务,而需要通过系统调用进行特权切换。
处理器的指令分为普通指令和特权指令,特权指令只有内核能执行,用户模式下只能运行普通指令。计算机系统的I/O访问包括特权I/O访问和普通I/O(normal I/O)访问,其中,特权I/O是指只有内核能够访问的I/O,普通I/O只有应用可以访问,当某个应用中的任务需要访问特权I/O时,需要通过系统调用才能访问特权I/O。
具体的,普通应用中的用户任务发起系统服务请求到系统调用处理函数(syscall handler),会发生以下行为:处理器会产生同步异常(Trap),并且刷新流水线(pipeline),保存用户任务的CPU寄存器,读取异常向量表,切换MPU保护域。
任务是操作系统运行的基本单位,如何管理任务对象是每个操作系统设计的重中之重。任务上下文指的是任务运行时使用到的处理器通用寄存器与一些特殊功能寄存器,这些寄存器代表了处理器的运行状态,不同的任务轮流占用处理器时需要根据任务存储值修改对应的寄存器,即为任务上下文切换。操作系统在运行过程中会频繁进行任务上下文切换操作,每次操作系统进入调度点时都可能进行一次任务上下文切换,由更重要的任务占用处理器资源,所以任务切换的速度将对操作系统实时响应能力有巨大影响。
每一个系统调用都需要经历从用户任务到内核的上下文切换,接下来syscall handler会调用系统服务的应用程序接口(application programming interface,API),在完成用户任务后,还需要经历一次从内核到用户任务的上下文切换,其中,上述从用户任务到内核的上下文切换或者从内核到用户任务的上下文切换即为一次特权切换。
在一次系统调用过程中,需要进行两次上下文切换(或者两次特权切换),每一次上下文切换的时钟开销大概在300个指令周期(cycles)以上。尽管内存分配、I/O访问,互斥资源都是任务中较为常见的操作,但是由于资源或I/O都属于特权层,因此需通过系统调用才能访问,而内存分配、I/O访问等在系统中频繁发生,从而导致普通应用的特权切换开销过大,特权切换开销过大会导致应用的响应不及时,进而可能导致错误传导或者任务调度异常。
在车载设备中,自动制动系统(autonomous emergency braking,AEB)是一种主动安全技术,通过雷达、摄像头等设备侦测前方道路,在小于安全距离时,采取紧急制动,所以AEB对实时性和系统响应要求极高。
另外,图1a所示分区架构中,可信应用与内核组成了可信基,当可信应用的个数过多时,可信基也会因过大而存在安全隐患。因为一旦可信任务或内核漏洞被利用,用户数据和内核数据会被完全暴露,存在安全隐患。
其中,可信计算基:也称为可信基,是为实现计算机系统安全保护的所有安全保护机制的集合,该安全保护机制可以以硬件、固件和软件的形式出现,一旦可信计算机基的某个构件出现程序错误或者安全隐患,会对整个系统的安全造成危害。与之相反,如果除可信计算基之外的其他部分出现问题,也只是泄漏了系统安全策略赋予它们的相关权限而已,这些权限一般都是比较低的,所以减小可信计算基对系统整体安全至关重要。
汽车电子系统面临的安全威胁包括:远程入侵与物理接触攻击。对于存在安全漏洞的车娱系统,漏洞的利用仅会引起用户隐私的泄露,不会造成人身安全损失;而对于转向辅助系统,若存在安全漏洞,则在遭破解远程控制后会导致人身安全风险。可见,在车载设备中,实时性与安全性至关重要。
如图1c所示,为本申请实施例提供的一种车辆架构示意图。其中,本方案可以实现将传统ECU上的车灯管理系统与电窗管理系统能够无修改进行迁移运行至VDC使用的ECU上。
例如,VDC使用ECU为TC397芯片,支持Tricore架构,是一个6核的单片机;传统 ECU使用TC297芯片,支持Tricore架构,但是一个3核的单片机。
车灯系统与电窗系统都是基于AutoSAR标准,车灯系统OS使用的Erika系统,电窗系统OS使用的是Microsar系统,两个系统支持Tricore系统架构实现。在特权层部署分区管理装置,在用户层部署这两个系统。
该示意图仅为一种示例,其还可以是其他形式,本方案对此不做具体限定。
基于此,本申请实施例提供一种新的系统架构,图1d为本申请适用的新的系统架构示意图,如图1d所示,该新的系统架构中将虚拟机划分到用户层,虚拟机管理器处于特权层。
具体地,该系统包括Tricore、虚拟机管理器和虚拟机。其中,虚拟机绑定1个核或者多个核。且主机端CPU的核资源不少于虚拟机的需求。如图1f所示,虚拟机(客户端操作系统OS)包括虚拟机应用(用户程序)和虚拟机内核(操作系统内核)。本方案的虚拟机管理系统中虚拟机整体置于用户态,内核态仅运行虚拟机管理器。
由于客户端的操作系统内核由原先的内核态部署到了用户态,会导致访问特权指令与I/O时发生异常,陷入内核态的虚拟机管理器进行处理;同样客户端的用户态用户程序访问系统调用也会先陷入内核态的虚拟机管理器进行处理;同样外部中断也会先经过虚拟机管理器,再进行分发到相应虚拟机的操作系统内核中进行处理。为此,本申请提供一种虚拟机管理方法,以进行系统调用处理、中断处理。
本申请实施例对系统调用和中断处理通过CSA辅助进行虚拟化,目的是为单核下的系统可以平滑迁移至多核硬件下,同时满足当一个单核系统被攻破,不会影响到在该多核硬件上的其他单核系统,做到数据隔离,并且能够隔离系统调用与中断,进行前置与后置的控制流检查,保证系统安全;与硬件虚拟化相比,本方案不需要硬件支持,与纯虚拟化仿真相比,避免完全使用指令仿真;本方案通过优化系统调用与中断处理,提升了系统性能。
首先对本申请实施例中的相关名词进行介绍:
1、Tricore:一种MCU架构,32位的单核单片机架构,具有自己的指令集,多用于实时场景下。
2、CSA:Context Save Areas,上下文保存区域,每一个CSA会保存一个上文或者下文。Tricore体系结构使用固定大小的上下文保存区域(CSA)的链表。CSA由16个字(word)的内存组成,在16字边界上对齐。每个CSA可以正好保存一个上文或一个下文。
CSA是通过链接字(Link Word)链接在一起。链接字包括两个字段,将给定的CSA链接到链中的下一个CSA。这些字段是4位段和16位偏移。段号和偏移量用于生成链接CSA的有效地址(EA)。
将指针偏移值增加1始终会将EA增加到比前一个地址高出16个字位置的地址。CSA的每个地址段中的总可用范围为4MB,从而为216个CSA提供存储空间。
该体系结构比传统微处理器更快地保存和恢复上下文。具有宽数据路径的独特内存子系统设计允许体系结构执行处理器寄存器和片内存储器之间的快速数据传输。当事件或指令导致程序执行中断时,就会发生上下文切换。然后,CPU需要在继续程序之前处理此事件。导致程序执行中断的事件和指令包括:
·中断或服务请求
·陷阱
·函数调用
其中,Tricore架构通过一种内存结构(上下文保存区域CSA)来保存通用寄存器和系统寄存器的上下文,类似ARM的寄存器bank,但又可以配置这些CSA空间,且可以显式的执行下载load、保存save、恢复restore、存储store这些CSA原语。
上文(Upper Context)和下文(Lower Context)分别保存了数据寄存器与地址寄存器,上文会额外保存系统寄存器如堆栈寄存器(stack pointer,SP)、标志寄存器(Program Status Word,PSW),下文则会保存一些通用寄存器。前者会在函数调用、异常、中断由硬件自动保存;后者则需要显式调用,用于传递参数。
例如,如图1e所示,空闲上下文列表(Free Context List,FCX)包含三个CSA(3、4和5),过去上下文列表(Previous Context List,PCX)包含两个CSA(2和1)。FCX指向CSA3,这是第一个可用的CSA。CSA3的链接字指向CSA4;CSA4的链接字指向CSA5。PCX指向上一个上下文列表中最近保存的CSA。CSA2的链接字指向CSA1。CSA1包含CSA2之前保存的上下文。当执行上下文保存操作时,空闲上下文列表(CSA3)中的第一个CSA将被拉出,并放置在上一个上下文列表的前面。
在上文或者下文保存到第一个可用的CSA之前,它的链接字Link Word会读取,为FCX提供新值,即要链接到下一个可用的CSA。对于内存子系统来说,上下文保存是一个读/修改/写操作。FCX的新值指向下一个可用的CSA,可立即用于后续的上下文保存。
LCX寄存器指向可用列表中的最后一个CSA之一,用于识别即将到来的可用CSA列表耗尽事件。如果在尝试执行上下文保存的操作时,FCX的值与LCX的值相等,则在下一条指令会触发获取空闲CSA列表耗尽异常(FCD)。
执行上下文保存操作后,返回地址A[11](RA)将更新:
·对于调用,A[11](RA)将使用函数返回地址更新。
·对于同步异常,A[11](RA)将使用引发异常的指令的PC更新。
·对于SYSCALL和异步异常或中断,A[11](RA)将使用要执行的下一条指令的PC更新。
当系统调用、外部中断、异常或函数调用发生时,上文会自动保存,而下文则是显式的需要调用保存。如下表一所示:
表一
事件/指示 |
上下文操作 |
完成指示 |
上下文操作 |
中断 |
保存上文 |
Rfe-从异常返回 |
恢复上文 |
陷阱 |
保存上文 |
Rfe-从异常返回 |
恢复上文 |
调用 |
保存上文 |
Ret-从调用返回 |
恢复上文 |
BISR |
保存下文 |
Rslcx-恢复下文 |
恢复下文 |
Svlcx-保存下文 |
保存下文 |
Rslcx-恢复下文 |
恢复下文 |
Stlcx-存储下文 |
存储下文 |
Ldlcx-下载下文 |
下载下文 |
Stucx-存储上文 |
存储上文 |
Lducx-下载上文 |
下载上文 |
上文和下文的主要区别在于存放不同的寄存器。下文寄存器通常类似于通用寄存器,可以保存在中断、异常或函数调用之前的全局寄存器值;在中断等事件返回后全局寄存器还是会保持现有状态,并不会自动在RET指令或者RFE指令后恢复下文。在异常情况发生时,异常处理函数需要保存原始值,并在返回时恢复原始值。
上下文切换(context-switching)是存储和恢复CPU状态的过程,它使得线程执行能够从 中断点恢复执行。
CPU通过时间片分配算法来循环执行任务,当前任务执行一个时间片后会切换到下一个任务。但是,在切换前会保存上一个任务的状态,以便下次切换回这个任务时,可以再次加载这个任务的状态,从任务保存到再加载的过程就是一次上下文切换。
与ARM架构类似,用户态通过syscall指令进入异常处理函数,此时自动备份用户上文,在进入系统调用分发函数后,创建内核上文,在完成处理后,通过异常返回指令(RFE)回收内核上下文,恢复用户上文,返回客户端应用的下一条指令。
3、虚拟化技术是一种资源管理(优化)技术,将计算机的各种物理资源(如CPU、内存以及磁盘空间、网络适配器等I/O设备)予以抽象、转换,然后呈现出来的一个可供分割并任意组合为一个或多个(虚拟的)逻辑计算机的配置环境。
其中,在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统(Guest OS),并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。
GuestOS:VM(虚拟机)里的系统(OS);HostOS:物理机里的系统(OS);
虚拟地址(VA):Guest OS提供给其应用程序使用的线性地址空间。
物理地址(PA):经虚拟机监控器抽象的、虚拟机看到的伪物理地址。
机器地址(MA):真实的机器地址,即地址总线上出现的地址信号。
异常级别(Exception Level,EL):
不同类型的软件通常对处理器和内存等资源具备不同等级的访问权限,例如操作系统内核对系统资源拥有更高访问权限,而用户程序通常只有有限的系统配置权力。
Tricore通过不同级别的特权对系统资源访问权限进行划分,只有在处理器遇到异常或从异常返回时才会发生特权级别的更改。因此,特权级别也称为异常级别。分为User-0 mode,User-1 mode and Supervisor mode:User-0模式不允许访问外设,也不能使能或禁止中断;User-1模式允许应用程序任务直接访问非关键系统外设。特权模式允许访问所有的外设,并读取和写入系统寄存器和特权外设。
4、特权指令:是指有特权权限的指令,只能被操作系统内核使用的指令。由于这类指令的权限最大,如果使用不当,将导致整个系统崩溃。比如:清内存、置时钟、分配系统资源、修改虚存的段表和页表,修改用户的访问权限等。
为了保证系统安全,这类指令只能用于操作系统或其他系统软件,不直接提供给用户使用。因此,特权执行必须在核心态执行。实际上,cpu在核心态下可以执行指令系统的全集。
非特权指令:能够被所有程序使用的指令。
为了防止用户程序中使用特权指令,用户态下只能使用非特权指令,内核态下可以使用全部指令。当在用户态下使用特权指令时,将产生中断以阻止用户使用特权指令。所以把用户程序放在用户态下运行,而操作系统中必须使用特权指令的那部分程序在内核态下运行,保证了计算机系统的安全可靠。从用户态转换为内核态的唯一途径是中断或异常。
5、系统调用
系统调用(system call):操作系统的主要功能是管理硬件资源和为应用程序开发人员提供良好的环境来使应用程序具有更好的兼容性,为了达到这个目的,内核提供一系列具备预 定功能的多内核函数,通过一组称为系统调用的接口呈现给用户。系统调用把应用程序的请求传给内核,调用相应的内核函数完成所需的处理,将处理结果返回给应用程序。
系统调用和普通库函数调用非常相似,只是系统调用由操作系统核心提供,运行于内核态,而普通的函数调用由函数库或用户自己提供,运行于用户态。一般的,进程是不能访问内核的。它不能访问内核所占内存空间也不能调用内核函数。通过系统调用,切换用户上下文至内核上下文,来访问内核提供的服务。
在Tricore架构下,系统调用也是提供了用户态至内核态的服务访问,用户通过syscall指令切换至内核的异常处理函数,此时自动备份用户上文,在进入系统调用分发函数后,创建内核上文,在完成处理后,通过异常返回指令(RFE)回收内核上下文,恢复用户上文,返回下一条指令。
在Tricore中上下文的保存、恢复均是通过CSA来辅助进行的。
6、中断是指程序执行过程中,遇到急需处理的事件时,暂时中止CPU上现行程序的运行,转去执行相应的事件处理程序,待处理完成后再返回原程序被中断处或调度其他程序执行的过程。
7、模式切换又称处理器状态切换,包括:
用户模式到内核模式中断/异常/系统调用:中断用户进程执行而触发;
内核模式到用户模式OS执行中断返回指令:将控制权交还用户进程而触发。
其中,进程切换指从正在运行的进程中收回处理器,让待运行进程来占有处理器运行。进程切换实质上就是被中断运行进程与待运行进程的上下文切换,处理过程是:
保存被中断进程的上下文;
转向进程调度;
恢复待运行进程的上下文。
其中,进程切换必须在操作系统内核模式下完成。
下面对本申请实施例提供的虚拟机管理方法进行详细说明。
参照图2a所示,为本申请实施例提供的一种虚拟机管理方法的流程示意图。该方法包括步骤201-205,具体如下:
201、虚拟机应用向虚拟机管理器发送系统调用指令,所述系统调用指令携带调用号;
其中,该系统调用指令为特权指令。该虚拟机应用可以理解为用户程序。
本申请的虚拟机管理器可以理解为,即为虚拟机对应的主机。
202、所述虚拟机管理器接收来自所述虚拟机应用的系统调用指令,并根据所述虚拟机的下文和空闲上下文保存区域CSA得到第一CSA,并根据所述调用号对第二CSA进行处理,得到处理后的第二CSA,其中,所述第二CSA是在所述第一CSA之前确定的,所述第一CSA与所述处理后的第二CSA相邻,所述第一CSA的返回地址为虚拟机内核的系统调用服务处理地址,所述处理后的第二CSA的返回地址为虚拟机应用的下一条指令地址,所述处理后的第二CSA用于指示在系统调用处理完后跳转至所述虚拟机应用的下一条指令地址;
虚拟机内核可以理解为用户态的内核,即操作系统内核。
作为一种可选的实现方式,所述虚拟机管理器根据所述虚拟机的下文和空闲上下文保存区域CSA得到第一CSA,包括:
所述虚拟机管理器将所述虚拟机的下文存储至所述空闲CSA中,以得到所述虚拟机的下文的CSA;
所述虚拟机管理器将所述下文的CSA的模式修改为内核模式,将所述下文的CSA的内存保护域修改为所述虚拟机的内存边界,将所述下文的CSA的栈地址修改为所述虚拟机的栈地址,将所述下文的CSA的返回地址修改为所述虚拟机内核的系统调用服务处理地址,并修改所述下文的CSA的上下文位,以得到第一CSA。
具体地,从虚拟机的空闲上下文列表中获取可用的空闲CSA,可以是在原有CSA链表基础上,再显式的使用svlcx指令申请一个可用的上下文保存区域CSA。
虚拟机管理器对所述下文的CSA进行处理,以得到第一CSA,可以如图2b所示:
虚拟机管理器将下文(Lb)的CSA的模式修改为内核模式,具体可以是通过将下文的CSA的编程状态字(Program Status Word,PSW)修改为内核模式;将所述下文的CSA的内存保护域修改为虚拟机(客户端操作系统OS)的内存边界,将所述下文的CSA的栈地址修改为虚拟机(客户端操作系统)的栈地址,将所述下文的CSA的返回地址修改为虚拟机内核(操作系统内核)的系统调用服务处理地址,并修改下文的CSA的上下文位,具体将下文的CSA的PCXI.UL标志位修改为上文标识,以得到上文的CSA(Ub)。
由于在从异常返回时,只能从上文得到返回地址信息,因此需要进行上下文位的变换。
所述虚拟机管理器将所述调用号复制到所述第二CSA中,并将所述第二CSA的返回地址更新为所述虚拟机应用的下一条指令地址,以得到所述处理后的第二CSA。
其中,虚拟机管理器根据寄存器中的过去上下文列表确定第二CSA,即最近保存的CSA,可以是通过过去上下文列表PCX中的链接字,找到上一个CSA的地址(Ua);虚拟机管理器将所述系统调用指令中的调用号(参数寄存器)复制到该CSA中,并修改该CSA的返回地址为虚拟机应用(用户程序)下一条指令地址,进而得到上述处理后的第二CSA。
上述第二CSA是在所述第一CSA之前确定的,所述第一CSA与所述处理后的第二CSA相邻,可以理解为,第二CSA在时间顺序上先于第一CSA确定,且,第二CSA与第一CSA相邻。
例如可以参考图1e,CSA2相当于本方案的第一CSA,CSA1相当于本方案的第二CSA。
需要说明的是,上述仅为一种示例,其还可以是其他形式的处理,例如上述修改的先后顺序可以适应性做调整,本方案对此不做具体限定。
其中,当调用发生后,会进入到异常处理函数中,为了避免使用纯虚拟仿真来模拟系统调用减少开销,首先会维护客户端操作系统的异常处理函数地址入口vector table,这个地址的获取是通过捕获设置vector table的特权指令来得知的。当调用发生时,与普通纯虚拟化不同的是,本方案不需要仿真复杂的上下文切换仿真,而是通过使用CSA来构建客户端跳转与返回的环境,充分结合Tricore架构的优势,实现了系统调用的快速调用与返回。
203、所述虚拟机管理器根据所述第一CSA的返回地址执行跳转至所述虚拟机内核的系统调用服务处理地址;
具体地,步骤203中,上述得到第一CSA和处理后的第二CSA后,虚拟机管理器通过调用从异常返回指令(Return from exception,RFE)进而从异常返回,此时上文的CSA(Ub)释放,硬件tricore架构将存放的上文恢复到相应上文寄存器,此时返回虚拟机内核的系统调用处理入口,且此时的上下文也已经切换为内核的上下文,包括内存边界、栈信息等。此时根据虚拟机应用请求的系统调用号,进行系统调用处理,如步骤204。
作为一种可选的实现方式,所述系统调用指令携带所述虚拟机应用的地址,在步骤203 之前,所述方法还包括:
所述虚拟机管理器将所述虚拟机应用的地址和预设合法地址进行比对,以确认所述虚拟机应用的地址是否合法。
其中,预设合法地址可以包括多个合法的地址,通过将该虚拟机应用的地址与上述合法的地址进行比对,进而确认该虚拟机应用的地址的合法性。
当该虚拟机应用的地址合法,则执行步骤203。
采用该手段,本方案对于调用发起方的合法性进行校验,提高了系统调用的安全性。
其中,该虚拟机内核与上述虚拟机应用是对应的,也就是说,当有多个虚拟机内核时,虚拟机管理器基于上述虚拟机应用可跳转至对应的虚拟机内核中。
204、所述虚拟机内核进行系统调用处理,以得到处理结果;
其中,虚拟机内核可根据调用号进行系统调用处理,进而得到处理结果。
每个系统调用都是有编号的,在内核里构成一个系统调用表,也就是函数指针数组,调用号就是对应功能的数组索引。虚拟机应用把调用号传给内核,就可以使用系统功能了。
当系统调用处理完后,虚拟机内核调用RFE,此时Ua被释放,Ua释放后,则由虚拟机内核返回虚拟机应用,如步骤205。
205、所述虚拟机内核跳转至所述虚拟机应用。
具体地,虚拟机内核调用从异常返回指令RFE,内核上文Ua释放,进而跳转至所述虚拟机应用的下一条指令。
通过本申请实施例,虚拟机管理器接收来自虚拟机应用的系统调用指令,并根据所述虚拟机的下文和空闲上下文保存区域CSA得到第一CSA,根据所述调用号对第二CSA进行处理,得到处理后的第二CSA,进而虚拟机管理器根据所述第一CSA的返回地址执行跳转至所述虚拟机内核的系统调用服务处理地址,以触发所述虚拟机内核进行系统调用处理。
采用该手段,基于虚拟机的下文和空闲上下文保存区域CSA得到第一CSA,进而虚拟机管理器可以实现执行跳转至虚拟机内核的系统调用服务处理地址以进行系统调用;其中,处理后的第二CSA是在第一CSA之前确定的,第一CSA与所述处理后的第二CSA相邻,这样在虚拟机内核进行系统调用处理完后,基于处理后的第二CSA,可以实现由虚拟机内核跳转至虚拟机应用。由于CSA是基于硬件进行上下文保存与加载的,相比现有技术中需要多次陷入主机,本方案减少了陷入次数,提高了系统运行的效率,且提高了系统性能。
另一方面,本方案还对于调用发起方的合法性进行校验,进一步提高了系统调用的安全性。
且,本方案通过实时构造新的上下文来分发系统调用处理内核,实现了虚拟机间的分区隔离,减小了可信基。
参照图2c所示,为本申请实施例提供的一种虚拟机管理方法的示意图。该方法包括步骤S1-S6,具体如下:
S1、虚拟机应用发出指令后,CPU获取所述虚拟机应用的地址,并且CPU对该指令进行解码。
S2、CPU确认该指令是否是特权指令,若不是特权指令,则CPU直接执行该指令。若该指令是特权指令,且不是系统调用指令,则采用其他特权指令仿真,例如纯软件仿真。
S3、若该指令是特权指令,同时是系统调用指令,则进入虚拟机管理器系统调用入口。
其中,S4、虚拟机管理器得到运行环境参数,以构建CSA仿真环境。该运行环境参数可 以理解为上述第一CSA和处理后的第二CSA。
S5、虚拟机管理器根据所述第一CSA的返回地址执行跳转至所述虚拟机内核的系统调用服务处理地址,以触发所述虚拟机内核进行系统调用处理。
S6、虚拟机内核在系统调用处理完后跳转至虚拟机应用的下一条指令。
采用该手段,基于虚拟机的下文和空闲上下文保存区域CSA得到第一CSA,进而虚拟机管理器可以实现执行跳转至虚拟机内核的系统调用服务处理地址以进行系统调用;其中,处理后的第二CSA是在第一CSA之前确定的,第一CSA与所述处理后的第二CSA相邻,这样在虚拟机内核进行系统调用处理完后,基于处理后的第二CSA,可以实现由虚拟机内核跳转至虚拟机应用。由于CSA是基于硬件进行上下文保存与加载的,相比现有技术中需要多次陷入主机,本方案减少了陷入次数,提高了系统运行的效率,且提高了系统性能。
参照图3a所示,为本申请实施例提供的另一种虚拟机管理方法的流程示意图。该方法包括步骤301-307,具体如下:
301、虚拟机应用向虚拟机管理器发送系统调用指令,所述系统调用指令携带调用号;
该系统调用指令为特权指令。
302、所述虚拟机管理器接收来自虚拟机应用的系统调用指令,并根据所述虚拟机的下文和空闲上下文保存区域CSA得到第一CSA,并根据所述调用号对第二CSA进行处理,得到处理后的第二CSA,其中,所述第二CSA是在所述第一CSA之前确定的,所述第一CSA与所述处理后的第二CSA相邻,所述第一CSA的返回地址为虚拟机内核的系统调用服务处理地址,所述处理后的第二CSA的返回地址为虚拟机管理器的结果检查地址,所述处理后的第二CSA用于指示在系统调用处理完后跳转至所述虚拟机管理器的结果检查地址;
作为一种可选的实现方式,所述虚拟机管理器根据所述虚拟机的下文和空闲上下文保存区域CSA得到第一CSA,包括:
所述虚拟机管理器将所述虚拟机的下文存储至所述空闲CSA中,以得到所述虚拟机的下文的CSA;
所述虚拟机管理器将所述下文的CSA的模式修改为内核模式,将所述下文的CSA的内存保护域修改为所述虚拟机的内存边界,将所述下文的CSA的栈地址修改为所述虚拟机的栈地址,将所述下文的CSA的返回地址修改为所述虚拟机内核的系统调用服务处理地址,并修改所述下文的CSA的上下文位,以得到第一CSA。
具体地,从虚拟机的空闲上下文列表中获取可用的空闲CSA,可以是在原有CSA链表基础上,再显式的使用svlcx指令申请一个可用的上下文保存区域CSA。
其中,上述从虚拟机的空闲上下文列表中获取可用的CSA,可以是在原有CSA链表基础上,再显式的使用svlcx申请一个可用的上下文保存区域CSA。
虚拟机管理器将下文(Lb)的CSA的模式修改为内核模式,具体可以是通过将下文的CSA的编程状态字PSW修改为内核模式;将所述下文的CSA的内存保护域修改为虚拟机(客户端操作系统OS)的内存边界,将所述下文的CSA的栈地址修改为虚拟机(客户端操作系统)的栈地址,将所述下文的CSA的返回地址修改为虚拟机内核(操作系统内核)的系统调用服务处理地址,并修改下文的CSA的上下文位,具体将下文的CSA的PCXI.UL标志位修改为上文标识,以得到上文的CSA(Ub)。
由于在从异常返回时,只能从上文得到返回地址信息,因此需要进行上下文位的变换。
其中,上述仅为一种示例,其还可以是其他形式的处理,例如上述修改的先后顺序可以 适应性做调整,本方案对此不做具体限定。
上述虚拟机管理器根据寄存器中的过去上下文列表确定最近保存的CSA,可以是通过过去上下文列表PCX中的链接字,找到上一个CSA的地址(Ua);虚拟机管理器将所述系统调用指令中的调用号(参数寄存器)复制到该CSA中,并修改该CSA的返回地址为虚拟机管理器的结果检查地址。
303、所述虚拟机管理器根据所述第一CSA的返回地址执行跳转至所述虚拟机内核的系统调用服务处理地址;
具体地,上述得到第一CSA和处理后的第二CSA后,虚拟机管理器通过调用从异常返回指令(Return from exception,RFE)进而从异常返回,此时上文的CSA(Ub)释放,硬件tricore架构将存放的上文恢复到相应上文寄存器,此时返回虚拟机内核的系统调用处理入口,且此时的上下文也已经切换为内核的上下文,包括内存边界、栈信息等。此时根据虚拟机应用请求的系统调用号,进行系统调用处理,如步骤304。
作为一种可选的实现方式,所述系统调用指令携带所述虚拟机应用的地址,在步骤303之前,所述方法还包括:
所述虚拟机管理器将所述虚拟机应用的地址和预设合法地址进行比对,以确认所述虚拟机应用的地址是否合法。
该预设合法地址包括有多个合法的地址,通过将该虚拟机应用的地址与上述合法的地址进行比对,进而确认该虚拟机应用的地址的合法性。
当该虚拟机应用的地址合法,则执行步骤303。
采用该手段,本方案对于调用发起方的合法性进行校验,提高了系统调用的安全性。
其中,该虚拟机内核与上述虚拟机应用是对应的,也就是说,当有多个虚拟机内核时,虚拟机管理器基于上述虚拟机应用可跳转至对应的虚拟机内核中。
304、所述虚拟机内核进行系统调用处理,以得到处理结果;
其中,虚拟机内核根据调用号进行系统调用处理,进而得到处理结果。
每个系统调用都是有编号的,在内核里构成一个系统调用表,也就是函数指针数组,调用号就是对应功能的数组索引。虚拟机应用把调用号传给内核,就可以使用系统功能了。
当系统调用处理完后,虚拟机内核调用RFE,此时Ua被释放,Ua释放后,则由虚拟机内核返回虚拟机管理器,如步骤305。
305、所述虚拟机内核跳转至虚拟机管理器;
具体地,返回到虚拟机管理器的结果检查地址。
其中,虚拟机内核执行完系统调用处理后,内核调用RFE,此时Ua被释放,Ua的上文寄存器恢复。此时返回到虚拟机管理器的结果检查函数,校验正确,则返回虚拟机应用,如步骤306、步骤307。
306、所述虚拟机管理器获取所述虚拟机内核的处理结果,并对所述处理结果进行验证;
作为一种可选的实现方式,虚拟机管理器从寄存器中获取处理结果,并对该处理结果的数值的范围与预设范围进行比对,以确认其准确性。
作为另一种可选的实现方式,所述虚拟机管理器对该处理结果的数值的大小等进行验证,以确认该结果是否准确。
上述仅为两种示例,其还可以是其他信息的验证,本方案对此不做具体限定。
307、当验证通过后,所述虚拟机管理器跳转到所述虚拟机应用。
具体地,虚拟机管理器跳转到所述虚拟机应用的下一条指令。
采用该手段,本方案对于处理结果进行检查,验证通过后才跳转到所述虚拟机应用,保障了处理结果的合法性,提高了系统调用的安全性。
通过本申请实施例,虚拟机管理器接收来自虚拟机应用的系统调用指令,并根据所述虚拟机的下文和空闲上下文保存区域CSA得到第一CSA,根据所述调用号对第二CSA进行处理,得到处理后的第二CSA,进而虚拟机管理器根据所述第一CSA的返回地址执行跳转至所述虚拟机内核的系统调用服务处理地址,以触发所述虚拟机内核进行系统调用处理。采用该手段,基于虚拟机的下文和空闲上下文保存区域CSA得到第一CSA,进而虚拟机管理器可以实现执行跳转至虚拟机内核的系统调用服务处理地址以进行系统调用;其中,处理后的第二CSA是在第一CSA之前确定的,第一CSA与所述处理后的第二CSA相邻,这样在虚拟机内核进行系统调用处理完后,基于处理后的第二CSA,可以实现由虚拟机内核跳转至虚拟机管理器进行结果检查。由于CSA是基于硬件进行上下文保存与加载的,相比现有技术中需要多次陷入主机,本方案减少了陷入次数,提高了系统运行的效率,且提高了系统性能。且,本方案对于处理结果进行合法性检查,验证通过才跳转至虚拟机应用,提高了系统调用的安全性。
另一方面,本方案还对于调用发起方的合法性进行校验,进一步提高了系统调用的安全性。
且,本方案通过实时构造新的上下文来分发系统调用处理内核,实现了虚拟机间的分区隔离,减小了可信基。
参照图3b所示,为本申请实施例提供的一种虚拟机管理方法的示意图。该方法包括步骤S1-S8,具体如下:
S1、虚拟机应用发出指令后,CPU获取所述虚拟机应用的地址,并且CPU对该指令进行解码。
S2、CPU确认该指令是否是特权指令,若不是特权指令,则CPU直接执行该指令。若该指令是特权指令,不是系统调用指令,则采用其他特权指令仿真。
S3、若该指令是特权指令,同时是系统调用指令,则进入虚拟机管理器系统调用入口。
其中,S4、虚拟机管理器得到运行环境参数,以构建CSA仿真环境。该运行环境参数可以理解为上述第一CSA和处理后的第二CSA。
然后,执行步骤S5、虚拟机管理器进行前校验,校验调用发起方的合法性。
校验通过,则执行步骤S6,虚拟机管理器根据所述第一CSA的返回地址执行跳转至所述虚拟机内核的系统调用服务处理地址,以触发所述虚拟机内核进行系统调用处理。
处理完之后,再由虚拟机内核跳转至虚拟机管理器进行后校验,即S7,对处理结果进行校验。
校验通过后,则执行S8、由虚拟机管理器跳转至虚拟机应用。
采用该手段,基于虚拟机的下文和空闲上下文保存区域CSA得到第一CSA,进而虚拟机管理器可以实现执行跳转至虚拟机内核的系统调用服务处理地址以进行系统调用;其中,处理后的第二CSA是在第一CSA之前确定的,第一CSA与所述处理后的第二CSA相邻,这样在虚拟机内核进行系统调用处理完后,基于处理后的第二CSA,可以实现由虚拟机内核跳转至虚拟机管理器进行结果检查。由于CSA是基于硬件进行上下文保存与加载的,相比现有技术中需要多次陷入主机,本方案减少了陷入次数,提高了系统运行的效率,且提高了系统性能。且,本方案对于处理结果进行合法性检查,验证通过才跳转至虚拟机应用,提高了系 统调用的安全性。
参照图4a所示,为本申请实施例提供的又一种虚拟机管理方法的流程示意图。该方法包括步骤401-404,具体如下:
401、虚拟机应用向虚拟机管理器发送系统调用指令,所述系统调用指令携带调用号;
其中,该系统调用指令为特权指令。
402、虚拟机管理器接收来自虚拟机应用的系统调用指令,并根据所述调用号和第一上下文保存区域CSA得到处理后的第一CSA,所述处理后的第一CSA的返回地址为所述虚拟机应用的下一条指令地址;
所述运行环境参数用于所述虚拟机管理器管理自定义调用(Hypercall,HVC)。
该虚拟机管理器管理自定义调用,也就是说,虚拟机管理器具备进行自定义调用处理的权限。
作为一种可选的实现方式,所述虚拟机管理器根据所述调用号和第一上下文保存区域CSA得到处理后的第一CSA,包括:
所述虚拟机管理器将所述调用号复制到所述第一上下文保存区域CSA中,并将所述第一CSA的返回地址更新为所述虚拟机应用的下一条指令地址,以得到所述处理后的第一CSA。
即,所述虚拟机管理器根据寄存器中的过去上下文列表确定最近保存的CSA(即第一CSA);
所述虚拟机管理器将所述调用号复制到所述最近保存的CSA中,并将所述最近保存的CSA的返回地址更新为所述虚拟机应用的下一条指令地址。
上述虚拟机管理器根据寄存器中的过去上下文列表确定过去上下文列表中最近保存的CSA,可以是通过过去上下文列表PCX中的链接字,找到上一个CSA的地址(Ua)。
虚拟机管理器通过将所述系统调用指令中的调用号(参数寄存器)复制到该CSA中,并修改该CSA的返回地址为虚拟机应用的下一条指令地址。
其中,上述仅为一种示例,其还可以是其他形式的处理,例如上述处理的先后顺序可以适应性做调整,本方案对此不做具体限定。
403、所述虚拟机管理器进行系统调用处理,以得到处理结果;
具体地,所述虚拟机管理器基于调用号进而进行系统调用处理。
作为一种可选的实现方式,所述系统调用指令携带所述虚拟机应用的地址,在步骤403之前,所述方法还包括:
所述虚拟机管理器将所述虚拟机应用的地址和预设合法地址进行比对,以确认所述虚拟机应用的地址是否合法。
该预设合法地址保存有多个合法的地址,通过将该虚拟机应用的地址与上述合法的地址进行比对,进而确认该虚拟机应用的地址的合法性。
当该虚拟机应用的地址合法,则执行步骤403。
采用该手段,本方案对于调用发起方的合法性进行校验,提高了系统调用的安全性。
404、所述虚拟机管理器在系统调用处理完后根据所述处理后的第一CSA的返回地址跳转至所述虚拟机应用。
具体地,跳转至所述虚拟机应用的下一条指令。
通过本申请实施例,虚拟机管理器接收来自虚拟机应用的系统调用指令,并根据所述调用号和第一上下文保存区域CSA得到处理后的第一CSA,所述处理后的第一CSA的返回地 址为所述虚拟机应用的下一条指令地址;进而根据所述调用号进行系统调用处理,并在所述系统调用处理完后根据所述处理后的第一CSA的返回地址执行跳转至所述虚拟机应用的下一条指令地址。采用该手段,本方案增加同层HVC调用处理,可以用于处理自定义HVC请求。也就是说,虚拟机管理器进行系统调用处理,并在系统调用处理完后,跳转至虚拟机应用的下一条指令地址。采用该手段,提高了系统运行的效率,且提高了系统性能。
参照图4b所示,为本申请实施例提供的一种虚拟机管理方法的示意图。该方法包括步骤S1-S6,具体如下:
S1、虚拟机应用发出指令后,CPU获取所述虚拟机应用的地址,并且CPU对该指令进行解码。
S2、CPU确认该指令是否是特权指令,若不是特权指令,则CPU直接执行该指令。若该指令是特权指令,不是系统调用指令,则采用其他特权指令仿真。
S3、若该指令是特权指令,同时是系统调用指令,则进入虚拟机管理器系统调用入口。
其中,S4、虚拟机管理器构建自定义HVC调用的CSA仿真环境。即上述处理后的第一CSA。
S5、虚拟机管理器调用HVC调用处理函数入口,进入HVC调用服务处理函数,以进行系统调用处理。
S6、虚拟机管理器跳转至所述虚拟机应用的下一条指令。
采用该手段,本方案增加同层HVC调用处理,可以用于处理自定义HVC请求。也就是说,虚拟机管理器进行系统调用处理,并在系统调用处理完后,跳转至虚拟机应用的下一条指令地址。采用该手段,提高了系统运行的效率,且提高了系统性能
参照图5a所示,为本申请实施例提供的又一种虚拟机管理方法的流程示意图。该方法包括步骤501-505,具体如下:
501、虚拟机管理器接收来自虚拟机外部设备的中断指令;
需要说明的是,中断是由外部设备(如硬件错误、输入错误)产生。
该外部设备,是相对于虚拟机来说的,例如可以是键盘、鼠标、传感器等。
举例说明,当有具体事件时,键盘会触发中断指令等。
502、所述虚拟机管理器获取所述中断指令对应的中断挂起pending位;
503、所述虚拟机管理器根据所述中断挂起位确定目标虚拟机,其中,所述目标虚拟机的内核为所述中断挂起位所属的内核;
其中,虚拟机管理器可通过依次获取每个虚拟机的CPU的核ID以及所述中断挂起pending位,确定所述中断挂起pending位是否属于该虚拟机的CPU的核ID对应的内核,若属于,则该虚拟机即为目标虚拟机。
504、所述虚拟机管理器根据所述目标虚拟机的下文和空闲上下文保存区域CSA得到第一CSA,并对第二CSA进行处理,得到处理后的第二CSA,其中,所述第二CSA是在所述第一CSA之前确定的,所述第一CSA与所述处理后的第二CSA相邻,所述第一CSA的返回地址为所述目标虚拟机的内核的中断处理地址,所述处理后的第二CSA的返回地址为所述目标虚拟机的应用的当前指令地址,所述处理后的第二CSA用于指示在中断处理完后跳转至所述目标虚拟机的应用的当前指令地址;
其中,所述虚拟机管理器从所述目标虚拟机的空闲上下文列表中获取可用的上下文保存 区域CSA;
所述虚拟机管理器将所述目标虚拟机的下文存储至所述可用的CSA中,以得到所述目标虚拟机的下文的CSA;
所述虚拟机管理器将所述下文的CSA的模式修改为内核模式,将所述下文的CSA的内存保护域修改为所述目标虚拟机的内存边界,将所述下文的CSA的栈地址修改为所述目标虚拟机的栈地址,将所述下文的CSA的返回地址修改为所述目标虚拟机的内核的中断处理地址,并修改所述下文的CSA的上下文位,得到第一CSA。
所述虚拟机管理器根据寄存器中的过去上下文列表确定最近保存的第二CSA;
所述虚拟机管理器将所述最近保存的CSA的返回地址更新为所述目标虚拟机的应用的当前指令地址。
其中,若所述中断挂起pending位不属于所述目标虚拟机内核,所述虚拟机管理器跳转到虚拟机应用的当前运行指令。
505、所述虚拟机管理器根据所述第一CSA的返回地址执行跳转至所述目标虚拟机的内核,以便所述目标虚拟机的内核进行中断处理。
当中断处理完后,所述目标虚拟机的内核跳转至所述目标虚拟机的应用的当前指令地址。
通过本申请实施例,虚拟机管理器接收到来自外部设备的中断指令后,若该中断挂起位属于目标虚拟机内核,根据所述目标虚拟机的下文和空闲上下文保存区域CSA得到第一CSA,并对第二CSA进行处理,得到处理后的第二CSA,进而虚拟机管理器基于第一CSA的返回地址执行跳转到目标虚拟机内核,以便所述目标虚拟机内核进行中断处理,且基于处理后的第二CSA,可以实现由虚拟机内核跳转至所述虚拟机内核的下一跳的地址。相比现有技术中需要多次陷入主机,本方案减少了陷入次数,提高了系统运行的效率,且提高了系统性能。
本方案通过实时构造新的上下文来分发系统调用处理内核,实现了虚拟机间的分区隔离,减小了可信基。采用本方案,可以实现中断虚拟化。
如图5b所示,为本申请实施例提供一种虚拟机管理方法的流程示意图。该方法包括步骤S1-S6,具体如下:
S1、外部设备触发中断指令,虚拟机管理器获取虚拟机的CPU的核ID。
S2、虚拟机管理器检查当前中断位,并判断该当前中断位是否属于该虚拟机的CPU的内核。若不属于,则虚拟机管理器跳转至虚拟机内核的当前指令地址。
其中,若当前中断位属于该虚拟机的CPU的内核,执行步骤S3、虚拟机管理器清除中断位。
S4、虚拟机管理器改变内存保护域。
S5、虚拟机管理器改变上下文的返回地址为内核地址,以构造CSA仿真环境。
S6、虚拟机管理器根据该CSA仿真环境跳转至虚拟机内核,进行中断处理。
相比现有技术中需要多次陷入主机,本方案减少了陷入次数,提高了系统运行的效率,且提高了系统性能。
本方案通过实时构造新的上下文来分发系统调用处理内核,实现了虚拟机间的分区隔离,减小了可信基。采用本方案,可以实现中断虚拟化。
参照图6a所示,为本申请实施例提供一种虚拟机管理装置。该装置包括:接收模块601、 确定模块602和处理模块603,具体如下:
接收模块601,用于接收来自虚拟机应用的系统调用指令,所述系统调用指令携带调用号,其中,所述系统调用指令为特权指令;
确定模块602,用于根据所述虚拟机的下文和空闲上下文保存区域CSA得到第一CSA,并根据所述调用号对第二CSA进行处理,得到处理后的第二CSA,其中,所述第二CSA是在所述第一CSA之前确定的,所述第一CSA与所述处理后的第二CSA相邻,所述第一CSA的返回地址为虚拟机内核的系统调用服务处理地址,所述处理后的第二CSA的返回地址为所述虚拟机内核的下一跳的地址,所述处理后的第二CSA用于指示在系统调用处理完后跳转至所述虚拟机内核的下一跳的地址;
处理模块603,用于根据所述第一CSA的返回地址执行跳转至所述虚拟机内核的系统调用服务处理地址,以触发所述虚拟机内核进行系统调用处理。
作为一种可选的实现方式,所述确定模块602,用于:将所述虚拟机的下文存储至所述空闲CSA中,以得到所述虚拟机的下文的CSA;将所述下文的CSA的模式修改为内核模式,将所述下文的CSA的内存保护域修改为所述虚拟机的内存边界,将所述下文的CSA的栈地址修改为所述虚拟机的栈地址,将所述下文的CSA的返回地址修改为所述虚拟机内核的系统调用服务处理地址,并修改所述下文的CSA的上下文位,以得到第一CSA。
作为一种可选的实现方式,所述确定模块602,还用于:将所述调用号复制到所述第二CSA中,并将所述第二CSA的返回地址更新为所述虚拟机内核的下一跳的地址,以得到所述处理后的第二CSA。
作为一种可选的实现方式,所述虚拟机内核的下一跳的地址为所述虚拟机应用的下一条指令地址。
作为另一种可选的实现方式,所述虚拟机内核的下一跳的地址为所述装置的结果检查地址。
作为一种可选的实现方式,所述装置还包括第一验证模块,用于:获取所述虚拟机内核的处理结果,并对所述处理结果进行验证;当所述处理结果验证通过后,跳转至所述虚拟机应用。
作为一种可选的实现方式,所述系统调用指令还携带所述虚拟机应用的地址,所述装置还包括第二验证模块,用于:将所述虚拟机应用的地址和预设合法地址进行比对,以确认所述虚拟机应用的地址是否合法。
通过本申请实施例,虚拟机管理器接收来自虚拟机应用的系统调用指令,并根据所述虚拟机的下文和空闲上下文保存区域CSA得到第一CSA,根据所述调用号对第二CSA进行处理,得到处理后的第二CSA,进而虚拟机管理器根据所述第一CSA的返回地址执行跳转至所述虚拟机内核的系统调用服务处理地址,以触发所述虚拟机内核进行系统调用处理。采用该手段,基于虚拟机的下文和空闲上下文保存区域CSA得到第一CSA,进而虚拟机管理器可以实现执行跳转至虚拟机内核的系统调用服务处理地址以进行系统调用;其中,处理后的第二CSA是在第一CSA之前确定的,第一CSA与所述处理后的第二CSA相邻,这样在虚拟机内核进行系统调用处理完后,基于处理后的第二CSA,可以实现由虚拟机内核跳转至所述虚拟机内核的下一跳的地址。相比现有技术中需要多次陷入主机,本方案减少了陷入次数,提高了系统运行的效率,且提高了系统性能。
其中,该装置中的各模块用于具体执行步骤可参阅前述图2a、图2b、图2c所示实施例,或图3a、图3b所示实施例,在此不再赘述。
参照图6b所示,为本申请实施例提供的另一种虚拟机管理装置。该装置包括:接收模块604、确定模块605和处理模块606,具体如下:
接收模块604,用于接收来自虚拟机应用的系统调用指令,所述系统调用指令携带调用号,其中,所述系统调用指令为特权指令;
确定模块605,用于根据所述调用号和第一上下文保存区域CSA得到处理后的第一CSA,所述处理后的第一CSA的返回地址为所述虚拟机应用的下一条指令地址;
处理模块606,用于根据所述调用号进行系统调用处理,并在所述系统调用处理完后根据所述处理后的第一CSA的返回地址执行跳转至所述虚拟机应用的下一条指令地址。
作为一种可选的实现方式,所述确定模块605,用于:将所述调用号复制到所述第一上下文保存区域CSA中,并将所述第一CSA的返回地址更新为所述虚拟机应用的下一条指令地址,以得到所述处理后的第一CSA。
作为一种可选的实现方式,所述系统调用指令还携带所述虚拟机应用的地址,所述装置还包括第二验证模块,用于:将所述虚拟机应用的地址和预设合法地址进行比对,以确认所述虚拟机应用的地址是否合法。
通过本申请实施例,虚拟机管理器接收来自虚拟机应用的系统调用指令,并根据所述调用号和第一上下文保存区域CSA得到处理后的第一CSA,所述处理后的第一CSA的返回地址为所述虚拟机应用的下一条指令地址;进而根据所述调用号进行系统调用处理,并在所述系统调用处理完后根据所述处理后的第一CSA的返回地址执行跳转至所述虚拟机应用的下一条指令地址。采用该手段,本方案增加同层HVC调用处理,可以用于处理自定义HVC请求。也就是说,虚拟机管理器进行系统调用处理,并在系统调用处理完后,跳转至虚拟机应用的下一条指令地址。采用该手段,提高了系统运行的效率,且提高了系统性能。
其中,该装置中的各模块用于具体执行步骤可参阅前述图4a、图4b所示实施例,在此不再赘述。
参照图6c所示,为本申请实施例提供的又一种虚拟机管理装置。该装置包括:获取模块607、第一确定模块608、第二确定模块609和处理模块610,具体如下:
获取模块607,用于在接收到来自虚拟机外部设备的中断指令时,获取所述中断指令对应的中断挂起位;
第一确定模块608,用于根据所述中断挂起位确定目标虚拟机,其中,所述目标虚拟机的内核为所述中断挂起位所属的内核;
第二确定模块609,用于根据所述目标虚拟机的下文和空闲上下文保存区域CSA得到第一CSA,并对第二CSA进行处理,得到处理后的第二CSA,其中,所述第二CSA是在所述第一CSA之前确定的,所述第一CSA与所述处理后的第二CSA相邻,所述第一CSA的返回地址为所述目标虚拟机的内核的中断处理地址,所述处理后的第二CSA的返回地址为所述目标虚拟机的应用的当前指令地址,所述处理后的第二CSA用于指示在中断处理完后跳转至所述目标虚拟机的应用的当前指令地址;
处理模块610,用于根据所述第一CSA的返回地址执行跳转至所述目标虚拟机的内核的中断处理地址,以触发所述目标虚拟机的内核进行中断处理。
作为一种可选的实现方式,所述第二确定模块609,用于:将所述目标虚拟机的下文存储至所述空闲CSA中,以得到所述目标虚拟机的下文的CSA;将所述下文的CSA的模式修 改为内核模式,将所述下文的CSA的内存保护域修改为所述目标虚拟机的内存边界,将所述下文的CSA的栈地址修改为所述目标虚拟机的栈地址,将所述下文的CSA的返回地址修改为所述目标虚拟机的内核的中断处理地址,并修改所述下文的CSA的上下文位,以得到第一CSA。
作为一种可选的实现方式,所述第二确定模块609,还用于:将所述第二CSA的返回地址更新为所述目标虚拟机的应用的当前指令地址,以得到所述处理后的第二CSA。
通过本申请实施例,虚拟机管理器接收到来自外部设备的中断指令后,若该中断挂起位属于目标虚拟机内核,根据所述目标虚拟机的下文和空闲上下文保存区域CSA得到第一CSA,并对第二CSA进行处理,得到处理后的第二CSA,进而虚拟机管理器基于第一CSA的返回地址执行跳转到目标虚拟机内核,以便所述目标虚拟机内核进行中断处理,且基于处理后的第二CSA,可以实现由虚拟机内核跳转至所述虚拟机内核的下一跳的地址。相比现有技术中需要多次陷入主机,本方案减少了陷入次数,提高了系统运行的效率,且提高了系统性能。
本方案通过实时构造新的上下文来分发系统调用处理内核,实现了虚拟机间的分区隔离,减小了可信基。采用本方案,可以实现中断虚拟化。
其中,该装置中的各模块用于具体执行步骤可参阅前述图5a、图5b所示实施例,在此不再赘述。
在本实施例中,上述各个虚拟机管理装置是以模块的形式来呈现。这里的“模块”可以指特定应用集成电路(application-specific integrated circuit,ASIC),执行一个或多个软件或固件程序的处理器和存储器,集成逻辑电路,和/或其他可以提供上述功能的器件。
此外,以上各个虚拟机管理装置中的模块可通过图7所示的虚拟机管理装置的处理器702来实现。
图7是本申请实施例提供的虚拟机管理装置的硬件结构示意图。图7所示的虚拟机管理装置700(该装置700具体可以是一种计算机设备)包括存储器701、处理器702、通信接口703以及总线704。其中,存储器701、处理器702、通信接口703通过总线704实现彼此之间的通信连接。
存储器701可以是只读存储器(Read Only Memory,ROM),静态存储设备,动态存储设备或者随机存取存储器(Random Access Memory,RAM)。
存储器701可以存储程序,当存储器701中存储的程序被处理器702执行时,处理器702和通信接口703用于执行本申请实施例的虚拟机管理方法的各个步骤。
处理器702可以采用通用的中央处理器(Central Processing Unit,CPU),微处理器,应用专用集成电路(Application Specific Integrated Circuit,ASIC),图形处理器(graphics processing unit,GPU)或者一个或多个集成电路,用于执行相关程序,以实现本申请实施例的虚拟机管理装置中的单元所需执行的功能,或者执行本申请方法实施例的虚拟机管理方法。
处理器702还可以是一种集成电路芯片,具有信号的处理能力。在实现过程中,本申请的虚拟机管理方法的各个步骤可以通过处理器702中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器702还可以是通用处理器、数字信号处理器(Digital Signal Processing,DSP)、专用集成电路(ASIC)、现成可编程门阵列(Field Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理 器也可以是任何常规的处理器等。
其中,结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器701,处理器702读取存储器701中的信息,结合其硬件完成本申请实施例的虚拟机管理装置中包括的单元所需执行的功能,或者执行本申请方法实施例的虚拟机管理方法。
通信接口703使用例如但不限于收发器一类的收发装置,来实现装置700与其他设备或通信网络之间的通信。例如,可以通过通信接口703获取数据。
总线704可包括在装置700各个部件(例如,存储器701、处理器702、通信接口703)之间传送信息的通路。
应注意,尽管图7所示的装置700仅仅示出了存储器、处理器、通信接口,但是在具体实现过程中,本领域的技术人员应当理解,装置700还包括实现正常运行所必须的其他器件。同时,根据具体需要,本领域的技术人员应当理解,装置700还可包括实现其他附加功能的硬件器件。此外,本领域的技术人员应当理解,装置700也可仅仅包括实现本申请实施例所必须的器件,而不必包括图7中所示的全部器件。
本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当其在计算机或处理器上运行时,使得计算机或处理器执行上述任一个方法中的一个或多个步骤。
本申请实施例还提供了一种包含指令的计算机程序产品。当该计算机程序产品在计算机或处理器上运行时,使得计算机或处理器执行上述任一个方法中的一个或多个步骤。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应步骤过程的具体描述,在此不再赘述。
应理解,在本申请的描述中,除非另有说明,“/”表示前后关联的对象是一种“或”的关系,例如,A/B可以表示A或B;其中A,B可以是单数或者复数。并且,在本申请的描述中,除非另有说明,“多个”是指两个或多于两个。“以下至少一项(个)”或其类似表达,是指的这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b,或c中的至少一项(个),可以表示:a,b,c,a-b,a-c,b-c,或a-b-c,其中a,b,c可以是单个,也可以是多个。另外,为了便于清楚描述本申请实施例的技术方案,在本申请的实施例中,采用了“第一”、“第二”等字样对功能和作用基本相同的相同项或相似项进行区分。本领域技术人员可以理解“第一”、“第二”等字样并不对数量和执行次序进行限定,并且“第一”、“第二”等字样也并不限定一定不同。同时,在本申请实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本申请实施例中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念,便于理解。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,该单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。所显示或讨论的相互之间的耦合、或直接耦合、或通信连接可以是通过一 些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。该计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行该计算机程序指令时,全部或部分地产生按照本申请实施例的流程或功能。该计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。该计算机指令可以存储在计算机可读存储介质中,或者通过该计算机可读存储介质进行传输。该计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(digital subscriber line,DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。该计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。该可用介质可以是只读存储器(read-only memory,ROM),或随机存取存储器(random access memory,RAM),或磁性介质,例如,软盘、硬盘、磁带、磁碟、或光介质,例如,数字通用光盘(digital versatile disc,DVD)、或者半导体介质,例如,固态硬盘(solid state disk,SSD)等。
以上所述,仅为本申请实施例的具体实施方式,但本申请实施例的保护范围并不局限于此,任何在本申请实施例揭露的技术范围内的变化或替换,都应涵盖在本申请实施例的保护范围之内。因此,本申请实施例的保护范围应以所述权利要求的保护范围为准。