嵌入式虚拟机管理器内存虚拟化方法研究

2020-05-11 12:18龙怡清
科技资讯 2020年6期

龙怡清

摘  要:随着计算机科学技术的快速发展,对于计算机硬件以及软件的应用更加多元化,嵌入式虚拟机管理技术就是其中一个比较典型的使用案例。客户操作系统顺畅运行离不开嵌入式虚拟机管理器,需应用嵌入式虚拟机管理器对硬件资源(3种硬件资源)虚拟化,而支持虚拟内存的客户操作系统则需要对CPU存储管理单元页表虚拟化。该文主要研究的是NXP公司的PowerPC架构处理器,以此为例来详细地说明CPU的存储管理单元以及管理方法,从而提出CPU的存储管理单元虚拟化的需求。从5个典型性虚拟机管理器软件的内存虚拟化研究方案中可得出虚拟化问题的有效解决方案,此方案包括软件影子页表、硬件支持特性,软硬件结合中的多种方案,能进一步解决CPU存储管理单元(MMU)页表虚拟化问题。

关键词:嵌入式虚拟机管理器  客户OS  MMU页表  内存虚拟化  影子页表

中图分类号:TP316    文献标识码:A 文章编号:1672-3791(2020)02(c)-0014-02

嵌入式虚拟机管理器是一款运行在操作系统之上的软件,在该管理器上面又同时可以运行多个操作系统,不同的操作系统运行在不同的区域,这样就方便管理。主要的功能实现就是将物理硬件映射给客户操作系统来使用,让客户操作系统有一种在真实的硬件上面运行的感觉,要想达到这个目的并非简单,总共需要对于三大类型的硬件设备进行虚拟化操作。第一类就是CPU核,在一个原始的物理CPU核上面进行操作,就可以同时映射出多个逻辑CPU核来供客户操作系统使用,其中的重要步骤在于对原始物理CPU核的时间分割,分割为多个时间片段来执行不同的任务,让不同的逻辑CPU核可以占用物理CPU和上周期内的不同时间片段,就可以感觉到多个操作系统同时运行。第二类就是内存,虚拟化内存技术可以实现物理内存的分划,不同的分区肯定不能使用同一个分区,这必然造成数据信息的混乱,出现安全事故,因此物理内存的分划确保数据安全性。第三类就是设备,IO设备是被多个分区共同分享的,所以也需要对于各种IO设备进行虚拟化。

1  MMU硬件管理方法概述

1.1 MMU硬件

嵌入式领域在目前来看使用的比较主流的处理器架构主要有ARM、X86、PowerPC等。MMU是在CPU內部集成的一个硬件逻辑单元,可以提供4种主要的功能:MMU可以实现将逻辑地址转换为物理地址,当MMU关闭时,逻辑地址是等同于物理地址的;MMU同时还提供了读写保护,不同的用户被分配到不同的权限,也可以相同,然后不同的权限对应着不同的区域,这样就实现了资源的权限控制。

PowerPC架构处理器可以同时支持3种类型的MMU转换模式:利用TLB将逻辑地址转换为物理地址的页地址转换模式;逻辑地址转换为物理地址的块地址转换模式(充分利用BAT寄存器进行的块地址转换模式);平板映射模式(禁止地址转换)。

由于并不是所有的处理器都支持MMU,并且就算硬件满足条件,也有可能操作系统不支持虚拟内存,在这种情况下就只能采取平板映射模式。但需要注意的是,块地址转换只用于部分处理器。

1.2 MMU管理方法

NXP公司的核心架构处理器经历了比较漫长的发展过程,其硬件结构随之不断地发生着改变,硬件的功能基本保持不变,稳定性能越来越好,主要就是实现逻辑地址到物理地址的转换和保护工作。MMU对于存储管理机制的实现支持主要有两种方式,分别是块地址转换形式和MMU页表形式。其中块地址转换形式的内存为128kB,是最小内存块。

TLB是存在于内存中的非常重要的一块区域,主要用于存放MMU页表。可以用来保护经常使用的页表项,MMU页表加载之后就会进入到缓存,频繁的改变就可以得到TLB表项,这个替换的过程是非常复杂的,一方面只有硬件的支持才能很好地完成,另一方面还需要优秀的算法来实现转换。大内存块常用BAT且地址不会因映射关系的改变而频繁改变地址转换。

1.3 MMU虚拟化需求

虚拟机管理器可以运行多个客户操作系统,如果客户操作系统是基于虚拟化的,那么客户操作系统处于用户态时,没有办法对于MMU的空间进行管理,所以,在客户操作系统上面抽象了一个适配层,如果该适配层可以很好地支持MMU的虚拟化功能,则是非常完美的实现。MMU虚拟化主要实现了3个功能:一是实现了客户操作系统物理内存地址到主机物理内存地址的完美转换;二是设置了内存的权限管理,最大程度地避免内存的泄露;三是将客户页表已访问的信息进行缓存,方便下次直接使用。

2  MMU虚拟化方法分析

2.1 XEN内存虚拟化方法

英国剑桥大学是XEN诞生地,人们通过不懈地钻研,发现X86架构处理器与内存虚拟化有重要关系,通过它发现了一种优秀的内存虚拟化方法。客户操作系统可以直接对硬件页表进行读操作,而更新操作则必须要有XEN的参与,如果频繁的陷入XEN,将会有较大的开销,因此可以使用队列的结构来分批地对这些操作进行确认,这样就可以在一定程度上降低开销。

X86影子模式、X86直接模式是XEN对MMU硬件虚拟化的主要方式。X86影子模式主要就是客户操作系统维护客户页表,因此会产生客户操作系统的影子页表,这个影子页表由XEN来帮忙维护。MMU硬件能进行该页表访问,在访问的同时也可以访问客户页表、影子页表,并且能进行信息的有效传递。

X86直接模式主要就是客户操作系统维护客户页表,MMU可以访问客户页表,客户操作系统需要在XEN上面对于客户页表进行注册,页表基地址的改变可通过Linux客户操作系统实现,但XEN需在提交页表之前确认,页表的更新也离不开XEN的陷入,并仿真写操作。

2.2 ViMo内存虚拟化方法

韩国电子通信研究院设计的ViMo被广泛应用于移动通信领域,能支持建立在ARM基础上的架构处理器的全虚拟化技术。其主要把地址空间分为物理地址、机器地址、虚拟地址。毫无疑问虚拟地址是由客户操作系统来使用的,物理地址则是主要作为客户操作系统的物理地址,机器地址主要由ViMo来进行维护,每个虚拟机都有自己的机器地址,这段地址比较特别,具有物理上的连续性,使用起来非常的方便,一旦虚拟机进入关机状态,这段地址可以会被分配给其他的虚拟机使用。

2.3 KVM/ARM内存虚拟化方法

KVM/ARM是第一个全系统的ARM虚拟化解决方案,工作原理为ARM架构处理器,简言之是在多核的ARM上面运行原生客户的操作系统。虚拟地址的访问权对于客户操作系统以及内核都至关重要,并且它们同时访问的时候不能相互产生影响,所以内存虚拟化势在必行。对于真实的物理内存而言,内核拥有着绝对的访问控制权限,而客户操作系统则需要通过内核才能访问。要想实现这样的需求就需要增加其他的内存虚拟化层,这样客户操作系统就可以访问内存的虚拟化层。KVM/ARM的内存虚拟化方法比较特别,为了实现客户虚拟地址和客户物理地址之間的映射,这个任务由客户操作系统来完成。内核的虚拟地址映射到真实的物理地址的原理是客户物理地址映射到内核虚拟地址。

2.4 NOVA内存虚拟化方法

NOVA是由德国的一所大学操作系统研究小组设计的,基于Intel VT-x的支持全虚拟化的微内核架构虚拟机管理器。以下4种类型为内存的基本类型。

(1)HVA:由NOVA分配,在打开MMU时候的地址。

(2)HPA:有物理平台提供,关闭MMU时候的地址。

(3)GPA:由NOVA分配给客户操作系统,客户操作系统在关闭MMU时候的地址。

(4)GVA:由客户操作系统分配,客户操作系统在打开MMU时候的地址。

一般GPA等同于HVA。由于处理器支持嵌套分页,便可以运用硬件提供的特性更好地完成内存的虚拟化。需注意的是,处理器不支持嵌套分页特性就需要使用vTLB算法,进而填充和刷新影子页表。

2.5 MobiVMM内存虚拟化方法

韩国大学和微软亚洲研究院联合开发的MobiVMM内存虚拟化方法,适用范围为消费电子领域,能有效解决资源受限、实时支持、功能高效管理。主要的设计方案就是MobiVMM和客户操作系统共享一个地址空间,在共享空间时会把4GB空间里最高的32MB留置于MobiVMM,因此切换MobiVMM时,不用刷新TLB、Cache,一定程度上节省了大量的人力、物力、财力。

3  MMU页表虚拟化方案

3.1 软件方案

在软件方案选择时需影子页表、其变体二选一,原因在于它们虚拟化能力较强,能实现MMU页表虚拟化。工作主要机制为对原始CPU分页,GVA到GPA的映射不可或缺,维护主要是由客户操作系统的客户页表完成,HVA到HPA的映射关系非常重要,维护主要是由虚拟机管理器的主机页表完成,影子页表主要用于维护GVA到HPA的映射关系。

3.2 硬件支持

硬件条件支持有了一定基础,便可利用这些基础的特性进行MMU页表虚拟化。其中的技术要点在于在硬件上引入另一个分页级别,客户操作系统来控制64位以及32位的页表事件,虚拟机管理器控制扩展页表,CPU则是使用扩展页表和客户页表。

3.3 软硬件结合

基于软硬件结合的MMU页表虚拟化解决方案,是根据虚拟机管理器所支持处理器的虚拟化特性生成的,需注意的是当处理器具有类似EPT特性时,可直接选择MMU页表虚拟化方案,如不支持则可采用类似影子页表、其变体二选一的软件MMU页表虚拟化方案。

4  结语

对嵌入式虚拟机管理器内存虚拟化方法的研究,有利于解决各种虚拟化问题,对于客户操作系统的虚拟化需结合MMU页表进行。解决方案包括软件解决方案、硬件支持方案、软硬件结合解决方案。

参考文献

[1] 尹学渊,陈兴蜀,陶术松,等.一种无代理虚拟机进程监控方法[J].南京大学学报:自然科学版,2019(2):98.

[2] 刘健,王马龙.基于负载特征的虚拟机动态迁移决策算法[J].网络安全技术与应用,2017(3):123.

[3] 陈佳昕.虚拟机隐藏进程检测系统设计与实现[J].现代计算机:专业版,2019(1):93-96.

[4] 徐海燕,郭京.基于共享内存的多核虚拟机系统中的虚拟机间通信[J].电子技术与软件工程,2014(3):78.

[5] 陈兴蜀,赵成,陶术松.基于KVM的Windows虚拟机用户进程防护[J].电子科技大学学报,2016(6):950-957.