ARMv7 Virtualization

2024-05-27 15:08
文章标签 virtualization armv7

本文主要是介绍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 Extensions2. 软件上的 Hypervisor software3. 额外的 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 被看为是 osos(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)保持不变,无需保存或恢复。

这篇关于ARMv7 Virtualization的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1007822

相关文章

rsyslog交叉编译(armv7、armv8、aarch64、arm32平台通用)

文章目录 1、依赖库列表2、编译建议3、编译3.1、编译libestr3.2、编译libfastjson3.3、编译zlib3.4、编译libuuid3.5、编译libgpg-error3.6、编译libgcrypt3.7、编译openssl3.8、编译curl3.9、编译rsyslog 该文档描述了如何交叉编译rsyslog到arm64嵌入式平台。 1、依赖库列表 lib

VMware错误:CPU does not support long mode Intel Virtualization Technology

win7 系统vmware平台下安装64位centos提示如下错误 解决办法: 1.开机时按下Del键进入Bios 2.进入Security选项,按Tab键切换到Virtualization Technology,回车 3.将2个选项默认为Disabled 切换成Enabled 4.按F10 保存重启

NDK r21编译FFmpeg 4.2.2(x86、x86_64、armv7、armv8)

文章目录 1.编译FFmpeg2.使用FFmpeg的so库 1.编译FFmpeg 准备Ununtu、ndk r21(linux)、FFmpeg。 准备编译脚本,这里有两个,其中一个是专门针对armv7的。 armv7 #!/bin/bashAPI=21#armv7-aARCH=armv7 PREFIX=./SO/$ARCHTOOLCHAIN=/home/qwe/andr

duplicate symbols for architecture armv7

XCODE编译的时候报错:duplicate symbols for architecture armv7 1、首先排查是否有名字重复的文件; 2、检查是否在#import头文件的时候,不小心把.h写成了.m。

Linux内核源码分析--内核启动之(5)Image内核启动(rest_init函数)(Linux-3.0 ARMv7)

前面粗略分析start_kernel函数,此函数中基本上是对内存管理和各子系统的数据结构初始化。在内核初始化函数start_kernel执行到最后,就是调用 rest_init函数,这个函数的主要使命就是创建并启动内核线程init。这个函数虽然意思为剩下的初始化,但是这个“剩下”的可是内容颇多,下面详细分析如下: /* * 我们必须确定在一个非__init函数或 * 其他根线程(

OVF(Open Virtualization Format)或OVA(Open Virtual Appliance)格式有什么区别

OVF(Open Virtualization Format)和OVA(Open Virtual Appliance)是两种不同的文件格式,它们都是用于虚拟机的打包和交换的开放标准。以下是它们之间的主要区别: 1. **OVF(Open Virtualization Format)**:    - **定义**:OVF是一个开放的、标准化的文件格式,用于描述和打包虚拟机的配置信息、虚拟硬件、安装

【ARMv7-A】——CP15 协处理器

文章目录 CP15 协处理器指令格式MCR 示例MRC 示例寄存器C0 identification registersC1 system control registersC2 memory protection and control registersC3 memory protection and control registersC4 Not usedC5 Memory syste

【ARMv7-A】—— Genetic Timer 原理及使用

文章目录 Generic Timer工作原理CNTP_CTLCNTPCT 寄存器CNTP_CVAL 使用模型代码实现timer 初始化timer 中断服务函数 运行结果参考genetic timer API Generic Timer Generic Timer 是 ARMv7-A 内核中的通用定时器,包括: A Non-secure physical timer, A Sec

【ARMv7-A】——ATPCS(ARM-Thumb 过程调用标准)

文章目录 ATPCS(ARM-Thumb Procedure Call Standard) ARM-Thumb 过程调用标准寄存器分类和用途通用寄存器(R0-R12)特殊寄存器 寄存器使用规则被调用者保存和调用者保存调用者代码被调用者代码 数据栈使用规则参数传递规则函数返回规则实践四个参数五个参数

【ARMv7-A】——WFI(wait for interrupt)

文章目录 WFI基本原理使用场景多任务模型注意事项代码实例linux 内核中的 WFI 指令不使用 WFI 指令使用 WFI 指令 WFI WFI 即 Wait for interrupt,常用于低功耗。 WFI (Wait for interrupt) 和 WFE (Wait for event) 是两个让 ARM 核进入 low-power standby 模式的指令,