本发明涉及虚拟化技术,具体涉及虚拟机监控器的子页功能实现方法。
背景技术:
1、为了配合虚拟化,arm架构做了许多工作,首先是定义了四个异常等级(exceptionlevel,简称el)。每个异常级别都有编号,分别是el0-3,权限级别越高,对应的编号越高。用户程序运行在el0,操作系统运行在el1,虚拟机监控器(hypervisor)运行在el2,固件程序(firmware)运行在el3。
2、对于armv8, hypervisor(虚拟机监控器)运行在el2异常级别。va(virtualaddress)是虚拟地址,pa(physical address)是物理地址。在没有el2的hypervisor介入的情况下,操作系统(os)只需控制一组地址转换表,负责从虚拟地址空间映射到它认为是物理地址空间的,即va->pa的转换,便能访问到最终的物理空间。但是如果开启虚拟化功能以后,hypervisor负责控制第二步地址转换,才能得到真实的物理地址。即操作系统控制的转换称为阶段1(stage 1)转换,hypervisor控制的转换称为阶段2(stage 2)转换。操作系统认为是物理内存的地址空间称为中间物理地址(intermediate physical address,ipa)空间。所以,地址转换的过程是va->ipa->pa。如图1所示。
3、具体来说,其可以控制客户机是否可以访问特定的某一块物理内存,以及该内存块出现在客户机内存空间的位置。这种能力对于客户机的隔离和沙箱功能来说至关重要。这使得客户机只能看到分配给它自己的物理内存。为了支持stage 2 转换, 需要增加一个页表,我们称之为stage 2页表。操作系统控制的页表转换称之为stage 1转换,负责将客户机视角的虚拟地址转换为客户机视角的物理地址。而stage 2页表由hypervisor控制,负责将客户机视角的物理地址(ipa)转换为真实的物理地址。
4、这种内存虚拟化机制是以物理页为基本单位(4kb、2mb或1gb等)。但有时会遇到访问内存范围小于最小页4kb的情况。例如一些soc的can总线控制寄存器范围只有几百bytes,我们称这种内存为子页(subpage)。
5、目前子页访问的方法主要是通过客户机在进行子页访问时产生page fault的异常,从而使cpu陷入到hypervisor中。在hypervisor中计算出子页访问的具体地址,然后进行权限控制。当满足权限要求时,为该地址建立临时页表,这样就可以通过hypervisor的虚拟地址访问到实际的物理地址。这种方法虽然保证了子页访问的安全性,但是由于每次访问都需要陷入异常,权限检查,页表建立,结果返回等一系列操作,导致虚拟化损耗较大。尤其临时页表的建立最为耗时。在实际应用中,例如进行can总线的数据穿透,将会严重影响数据通信的实时性。
技术实现思路
1、为解决已有技术存在的不足,本发明提供了一种虚拟机监控器的子页功能实现方法,包括如下步骤:
2、步骤s1:在系统初始化阶段将每个子页空间均注册为一个模拟mmio设备,并为每个mmio设备申请一段虚拟地址空间;
3、步骤s2:在虚拟机监控器中为每个子页空间建立虚拟地址空间el2下的永久页表,以创建虚拟地址到mmio设备真实物理地址的永久页表映射;
4、步骤s3:当虚拟机监控器为各个客户机建立ipa时,去掉子页空间的地址范围,使得客户机访问子页设备时产生page fault从而进入虚拟机监控器;
5、步骤s4:在虚拟机监控器中根据产生的page fault对客户机进行io拦截和访问物理地址提取,根据物理地址计算出对应的mmio设备的编号,使用该mmio设备所对应的虚拟地址空间el2直接进行子页访问。
6、其中,所述步骤s1中,使用page_alloc调用bitmap虚拟地址管理器为每个mmio设备分配一段大小为4k的虚拟地址空间。
7、其中,所述步骤s2中,使用page_create创建虚拟地址到mmio设备真实物理地址的永久页表映射。
8、其中,所述步骤s3中,客户机访问子页设备时,虚拟机监控器陷入handler程序,在handler程序中对mmio设备进行访问的拦截和校验,以确定此次访问是否合法。
9、其中,所述步骤s4中,handler程序根据客户机执行当前指令并访问客户机内存时出现访问异常的物理页的地址,获得出现访问异常的物理页的子页的页内偏移地址,并根据所述页内偏移地址,找到出现访问异常的子页地址;针对非法mmio设备进行非法处理,针对符合系统配置要求的mmio设备进入子页访问阶段。
10、本发明的虚拟机监控器的子页功能实现方法,通过权限检查保证了客户机的安全隔离和沙箱功能。通过建立永久页表的方法实现了子页的高效访问。既保证了子页功能的安全性,又大大降低了虚拟化损耗率。以子页的can总线控制寄存器为例,测试can总线数据穿透的损耗率比传统方法降低了50%左右,提高了数据通信的实时性。
1.一种虚拟机监控器的子页功能实现方法,其特征在于,包括如下步骤:
2.如权利要求1所述的虚拟机监控器的子页功能实现方法,其特征在于,所述步骤s1中,使用page_alloc调用bitmap虚拟地址管理器为每个mmio设备分配一段大小为4k的虚拟地址空间。
3.如权利要求1所述的虚拟机监控器的子页功能实现方法,其特征在于,所述步骤s2中,使用page_create创建虚拟地址到mmio设备真实物理地址的永久页表映射。
4.如权利要求1所述的虚拟机监控器的子页功能实现方法,其特征在于,所述步骤s3中,客户机访问子页设备时,虚拟机监控器陷入handler程序,在handler程序中对mmio设备进行访问的拦截和校验,以确定此次访问是否合法。
5.如权利要求1所述的虚拟机监控器的子页功能实现方法,其特征在于,所述步骤s4中,handler程序根据客户机执行当前指令并访问客户机内存时出现访问异常的物理页的地址,获得出现访问异常的物理页的子页的页内偏移地址,并根据所述页内偏移地址,找到出现访问异常的子页地址;针对非法mmio设备进行非法处理,针对符合系统配置要求的mmio设备进入子页访问阶段。