ARMv7 Virtualization

DEN0024A_v8_architecture_PG.pdf 没有这一章
DEN0013D_cortex_a_series_PG.pdf 中有这一章,所以先翻译这一章

需求及响应

  • 需求的诞生
	同一物理处理器系统上同时工作的多个软件环境,且软件环境必须隔离
	 This is done by providing virtual cores for the software to execute on.
  • 增加了什么东西来满足需求
硬件:
	专用的硬件扩展(以加速虚拟机之间的切换)// 支持创建高性能虚拟机监控程序
软件:
	虚拟机监控程序软件hypervisor

为什么这么做:
	因为软件太多,所以在OS下增加一层.可以不用考虑软件移植,而不是移植整个OS

所以ARM虚拟化有几个部分 // 主要讲 1 2 两点
	1. 硬件上的 ARMv7-A Virtualization Extensions 和 Large Physical Address Extensions
	2. 软件上的 Hypervisor software
	3. 额外的 Relationship between virtualization and ARM Security Extensions
		在第三章ARM处理器模式和寄存器中,我们讨论了特权级别PL0、PL1和PL2的概念。
		在Normal world下,有PL0(用户模式)、PL1(异常模式)和PL2(虚拟机监控程序)
		在Secure world下,只有PL0和PL1,为PL1(安全监控模式)
		
		一般来说,虚拟机监控程序对安全世界没有影响。
		它无法访问内存的安全部分,或以其他方式干扰安全系统的操作。

hypervisor 概念

  • hypervisor(虚拟机)的历史
hypervisor这个术语实际上可以追溯到20世纪60年代,IBM首次使用它来描述在大型机上运行的软件。
今天的hypervisors监控程序在概念上非常相似,
  • hypervisor 的状态
hypervisor可能被认为是在比supervisor或操作系统更高的级别上运行。
它们通常允许一个或多个不同操作系统(称为来宾操作系统(Guest OS))的多个实例在系统上运行。
hypervisor为每个来宾操作系统提供一个虚拟系统,并监视它们的执行。
来宾操作系统通常不需要知道它正在管理程序下运行,或者其他操作系统可能正在使用该系统。
术语虚拟机监视器(VMM)有时用于描述虚拟机监控程序。
  • hypervisor 的分类
ARM上部署了两种类型的虚拟机监控程序。
Type1与包含来宾操作系统的每个虚拟机(VM)的描述相同。
type2中,虚拟机监控程序是主机操作系统的扩展,每个后续的来宾操作系统都包含在一个单独的VM中。

  • hypervisor 的应用
虚拟机管理程序的一种可能用途是在所谓的云计算解决方案中
在这种解决方案中,软件可以被划分为客户端或服务器设备,或者存在大量数据或内容。

这种情况可能会增加系统中所需的可寻址物理内存量。
因此,虚拟化扩展要求内核也实现第22-10页所述的大型物理地址扩展(LPAE)。
	这使多个软件环境中的每个环境以及其中的不同进程都能够访问物理地址的不同窗口。
	LPAE提供了一个额外级别的MMU转换表,因此每个32位虚拟内存地址都可以映射到40位物理内存范围内。
	在这种情况下,这允许软件为每个虚拟机分配足够的物理内存,即使对内存的总需求超过32位寻址的范围。
	单个操作系统内核也可以处理多达40位的物理地址空间,在任何给定时间都可以处理多达4GB的地址空间。理论上,这意味着每个进程最多可达3GB。

1. 硬件上的 ARMv7-A Virtualization Extensions 和 Large Physical Address Extensions

在大多数情况下,本书假设一个系统由一个单独的特权操作系统拥有和管理,该系统部署了许多非特权应用程序。
大多数主流操作系统也是基于这个假设构建的。
虚拟化是一个概念,在这个概念中,多个操作系统可以共存并在同一个系统上运行。

ARM虚拟化扩展使在同一系统上操作多个操作系统成为可能,同时通过引入新的体系结构特性,为每个这样的操作系统提供了一种系统唯一所有权的假象。
ARM虚拟化扩展旨在以来宾身份在虚拟化系统上运行传统操作系统,无需或几乎不需要修改。


这些是:
•除了现有的特权模式之外,还有一种虚拟机监控程序模式。
	这种PL2模式甚至比PL1模式更优越。
	Hyp模式预计将由管理多个客户操作系统的Hypervisor软件占用,这些客户操作系统占用PL1和PL0模式。
	Hyp模式仅存在于正常(非安全)世界中。
•引入了一个额外的内存转换,称为第2阶段。
	之前,虚拟地址(VA)由第9章中描述的PL1和PL0 MMU转换为物理地址(PA)。
	这种转换现在被称为阶段1,旧的物理地址现在被称为中间物理地址(IPA)。
	在第2阶段,IPA将接受另一级别的翻译,以获得与VA相对应的最终PA。
•可以将中断配置为接入(路由)虚拟机监控程序。
	然后,虚拟机监控程序将负责向适当的客户机传递中断。
•管理程序呼叫指令(HVC),
	供来宾请求管理程序服务。
  • hypervisor 的分类
根据设计,虚拟化解决方案可以大致分为裸机解决方案和托管解决方案。//对应type1和type2

无论分类如何,虚拟机监控程序的功能角色保持不变,
	平台资源的仲裁
	单个客户机的无缝操作只需最少的移植工作
	运行时牺牲。

在裸机虚拟化中,虚拟机监控程序是在内核上启动的最具特权的非安全软件。
它对PL2的各个方面进行了初始化,以实现内务管理,例如,它自己的PL2翻译机制的翻译表。
虚拟机监控程序将初始化它将启动的每个来宾操作系统的设置。
这将包括为每位客人设置第二阶段的翻译表、中断交付机制等,然后启动它们。

Hypervisor将在可用内核上调度来宾操作系统,代表来宾处理异常,并在运行时向适当的来宾提供中断。
  • 内存转换
在正常情况下,虚拟化系统中可能存在多种内存转换机制。
翻译制度是一个宽泛的术语,包括core的特权和执行模式,以及所使用的一组翻译表(由控制翻译的软件创建)。
这些翻译过程由MMU和翻译表(将输入地址翻译为输出地址)来执行。
根据翻译的不同阶段,输入和输出地址采用不同的名称。
在arm中,存在着多套
开了虚拟化时
	PL0/1 的 stage1
		在传统系统(不开虚拟化时)中,这种机制用于将虚拟地址转换为物理地址。
		在(开虚拟化时),该物理地址被视为中间物理地址(IPA),因为它要经历另一个转换阶段(第2阶段)。
		在即将到来的第二阶段中,这种翻译模式被称为第一阶段。
		IPA不能用于寻址系统内存。
		虽然被称为中间物理地址,但从客人的角度来看,这种翻译机制的输出是它所看到和使用的物理地址。
		// 即guest认为该IPA是其使用的物理地址,但是实际上不是
	PL0/1 的 stage2
		本质
			第二阶段的翻译实现的是客人对物理内存视图的虚拟化。
			What Stage 2 translation achieves is virtualization of the guest's view of physical memory. 
		新增
			寄存器
				虚拟化扩展添加了一组核心寄存器来控制第2阶段的转换表。
				每当管理程序在内核上调度不同的guest os时,它都会保存和恢复这些寄存器。
			翻译表
				这包括一组翻译表,Hypervisor为其管理的每个guest设置这些表
		过程
			该机制将转换阶段1输出的IPA,并将其转换为最终可用于寻址系统内存的物理地址。
			当虚拟化生效时,所有PL1和0阶段1的翻译都会隐式地受此阶段2的翻译的影响。
			还需要注意的是,即使客户关闭了第一阶段翻译,也会应用第二阶段翻译
			因此,在虚拟化生效时,始终会应用第二阶段翻译。
			由虚拟机监控程序管理的单个guest os无法控制,也不知道是否存在第2阶段翻译。
				该阶段对于guestos不可见
			因为它是由虚拟机监控程序管理的,所以在Hyp模式下处理第2阶段转换产生的异常,以便虚拟机监控程序能够响应它们。
				与之前一样,第1阶段的例外情况会被带到PL1中止模式,由相应的客户处理。
		other view
			通过适当地设置阶段2转换表,虚拟机监控程序可以管理并为guest os分配物理内存。
			这可以被认为是操作系统功能的自然扩展,管理并为其应用程序分配物理内存。
			在这方面,guest os可以被视为Hypervisor的应用程序。
			guest os 别看为是 App , Hypervisor 被看为是 os
			os(Hypervisor)App(guest os)分配物理内存
			
	PL2
		这包括一组转换表,Hypervisor为自己设置这些表来管理自己的虚拟内存。
		该机制将把Hyp模式中使用的虚拟地址转换为物理地址。此翻译没有附加阶段,因此不符合阶段要求。
		虚拟化扩展包括一组寄存器,供虚拟机监控程序管理自己的翻译表,就像操作系统内核管理自己的翻译表一样
不开虚拟化
	PL0/1
		类似于 "开了虚拟化时""PL2"
	无PL2
		此时不开虚拟化,PL2没有软件执行,也即PL2的翻译机制被关闭.

  • Large Physical Address Extensions
注意 : 是对 物理地址的扩展,而不是对 虚拟地址的扩展(虚拟地址还是最大寻址32bit/4GB空间)

通过将32位虚拟内存地址转换为40位物理内存地址,实现ARMv7(一种大型物理地址扩展(LPAE))的处理器将可访问物理地址的范围从4GB(2 32字节)扩展到1024GB(2 40字节)。

为此,他们使用长描述符(64bit)格式。
	现有的短描述符格式转换表仍然受支持,第21章中描述的安全扩展也是如此。
	虚拟化扩展在运行虚拟机时提供了地址转换的另一个阶段。
	此转换的第一阶段生成中间物理地址(IPA),然后第二阶段生成物理地址。
	此转换过程的第二阶段由虚拟机监控程序控制,TLB条目除了ASID外,还可以具有关联的虚拟机ID(VMID)。
	同样,可以禁用2级MMU,并从IPA到PA进行平面映射。

长描述符(64bit)怎么索引 40bit的物理内存地址
	经过三级索引之后,得到的最终的描述符有一个地址(该地址对应4KB)
		28bit(长描述符的bit[39:12]) + 4KB(12bit) = 40KB

2. 软件上的Hypervisor software

  • 内存管理
虚拟机监控程序负责自己和它管理来宾的内存管理。
整个物理内存由虚拟机监控程序直接处理。
Hyp模式下 , PL2 MMU 有两个作用
	1.转换(虚拟机监控程序用的)虚拟地址到物理地址 
	2.转换(guest os用的)IPA到物理地址
这就要求 Hyp MODE下,虚拟机监控程序需要
	1.设置管理自己的翻译表 				// 对应 HTTBR,描述符必须为长模式
	2.为每个guest os 管理第2 stage 翻译表 // 对应 VTTBR,描述符必须是长模式

内存管理相关异常
	在第2阶段中,由于试图翻译地址而导致的任何中止都将在Hyp模式下进行。
	系统管理程序负责接收中止,并对其进行适当处理。
	对于预期的和合法的故障,虚拟机监控程序可能会采取补救措施,例如模拟设备或为来宾操作系统分配更多内存。
	对于意外故障,虚拟机监控程序可以选择终止来宾操作系统,或者依次向来宾报告中止。

  • 设备仿真
平台设备是内存映射的,当虚拟化生效时,来宾设备的访问至少要第2阶段的转换。
当设备虚拟化生效时,虚拟机程序可以在软件中模拟,或者对guest os 隐藏设备。
  • 设备分配
设备仿真是必要的,但成本很高,因为来宾对设备的所有访问都必须在软件中进行捕获和仿真。
虚拟机监控程序可以选择将各个设备分配给各个来宾,以便来宾可以拥有和操作设备,而无需虚拟机监控程序仲裁。
挑战在于向来宾隐藏设备实际位于不同物理地址的事实,并生成不同于来宾预期的中断ID。
透明的阶段2映射和中断虚拟化可以规避这些挑战。
  • 异常处理
该异步异常(IRQ、FIQ和异步中监控)可以路由到虚拟机模式。
  • 中断处理

  • Scheduling
hypervisor 最重要的工作之一是 schedule guests on available cores.但是guest os 意识不到自己被调度
  • 上下文切换
当 Hypervisor 在核心上调停时,必须在当前及时执行紧急切换上下文保存到从内存中保存到当前上下文。
通过上下文切换,虚拟机为新客户打造环境,然后再恢复,就会给 guest os 一种幻觉:guestos 一直 占据 core。
必须保存和恢复来宾的以下元素:
	• GPR : 
		The general purpose registers of the core including the banked registers of all modes,
	• SYSTEM REGISTER:
		System register contents for such things as memory management and access control.
	• GIC STATUS : 
		The pending and active states of private interrupts on the core.
	• TIMER : 
		In case of guests using core private timers, the timer registers must be saved and restored so that they generate interrupts at the expected intervals.
分配给客户机的物理内存(视为RAM)保持不变,无需保存或恢复。

你可能感兴趣的:(ARMv8,ARM64,ARMv7,Virtualization)