ARM系列 -- 虚拟化(二)

本文涉及的产品
公网NAT网关,每月750个小时 15CU
简介: ARM系列 -- 虚拟化(二)

上一篇介绍了虚拟化和hypervisor的基本概念。为了配合虚拟化,ARM做了许多工作,首先是定义了四个异常等级(Exception Level,简称EL)。

前面介绍异常和特权的文章中有介绍,此处再啰嗦几句。每个异常级别都有编号,分别是EL0-3,权限级别越高,对应的编号越高。用户程序运行在EL0,操作系统运行在EL1,虚拟机监控程序(hypervisor)运行在EL2,固件程序(firmware)运行在EL3。

这里插一句,在intel的体系中,类似的概念是ring0-3。

在ARM的架构下,系统寄存器在不同的异常等级下是独立的寄存器,在指令集中有自己的编码,并在硬件中单独实现。这些系统寄存器可以根据后缀区分出可以访问的等级。例如,TTBR0_EL1是保存转换表基址的寄存器。如果EL0访问此寄存器,将会触发一个异常。

在高异常等级下可以访问低异常等级的寄存器,虽然大多数情况下不会这么做。但在某些场景下,还是需要的。比如在上下文切换或电源管理操作期间,更多特权级别有时会访问与较低异常级别关联的寄存器,以实现虚拟化功能或读写寄存器集,作为保存和还原操作的一部分。

除了异常等级,还有两个概念:执行状态(execution state)和安全状态(security state)

ARMv8-A有两种可用的执行状态:

  • AArch32:32位执行状态。此状态下的操作与Armv7-A兼容。有两个可用的指令集:T32和A32。标准寄存器宽度为32位。
  • AArch64:64位执行状态。有一个可用的指令集:A64。标准寄存器宽度为64位。

ARMv8-A架构实现两种安全状态,允许对软件进行进一步的分区,以隔离和划分受信任的软件:

  • 安全状态:在此状态下,处理单元(Processing Element)可以访问安全的和非安全的物理地址空间。在这种状态下,PE可以访问安全和非安全系统寄存器。在这种状态下运行的软件只能响应安全中断。
  • 非安全状态:在此状态下,PE只能访问非安全物理地址空间。PE也只能访问允许非安全访问的系统寄存器。在此状态下运行的软件只能响应非安全中断。

有了以上的概念,我们来看一下AArch64的虚拟化,如下图。图中安全状态的EL2用灰色显示,是因为安全状态的EL2并不总是可用。

说起虚拟化,其实可以分为几大块:

  • CPU虚拟化,
  • 内存虚拟化,
  • IO虚拟化,
  • 中断虚拟化。

CPU虚拟化这里没太多好讲的**,区分虚拟机(VM)和虚拟CPU(vCPU)就好**,方便阅读文档。一个虚拟机里面可能包含一个或多个虚拟CPU。

VM不等同于vCPU,比如,一个内存页面可以被分配一个VM,因此所有属于该VM的所有vCPU都可以访问它。而一个虚拟中断只是针对某个vCPU,因此只有该vCPU可以收到。

在ARM的文档里,关于处理器更为严谨的定义是处理单元(Processing Element,PE),因为CPU可能包含多个内核或线程,而PE用来指代单一的执行单元。

接下来先来看看内存虚拟化。百度百科的定义是这样的,“虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换”。

讲内存虚拟化之前要了解一下虚拟地址(Virtual Address, VA)。在最早期的计算机中,程序是直接访问物理地址(Physical Address)的。如果每次只运行一个程序,这种直接访问物理地址的方式没有问题,但是如果要运行多个程序,就会带来很多问题。

比如,如何防止恶意程序访问为其它程序分配的物理内存,或者如何避免内存碎片等等。**为了解决直接访问物理地址带来的种种问题,人们想出了一个办法,在直接访问物理地址前加上一个间接地址。**这样,程序中访问的内存地址不再是实际的物理内存地址,而是一个虚拟地址,然后由操作系统将这个虚拟地址映射到适当的物理内存地址上。

这样,只要操作系统管理好虚拟地址到物理内存地址的映射,就可以保证不同的程序最终访问的内存地址位于不同的区域,而且可以加上地址保护策略,隔绝程序间互相访问。

为了支持虚拟化,ARMv8-A支持两步地址转换,也就是文档常提到的Stage 2 translation。Stage 2 转换允许hypervisor控制虚拟机(VM)的内存视图。

具体来说,它允许hypervisor控制虚拟机可以访问哪些系统资源,以及这些资源在虚拟机地址空间中的位置。Stage 2转换使得虚拟机只能看到分配给它自己的资源,而看不到分配给其它虚拟机或hypervisor的资源。

操作系统(OS)控制一组地址转换表,负责从虚拟地址空间映射到它认为是物理地址空间的。由hypervisor负责控制第二步地址转换,得到真实的物理地址。

操作系统控制的转换称为阶段1(stage 1)转换管理程序控制的转换称为阶段2(stage 2)转换。操作系统认为是物理内存的地址空间称为中间物理地址(Intermediate Physical Address,IPA)空间。所以,地址转换的过程是VA->IPA->PA。

每个VM会被分配一个虚拟机标识符(virtual machine identifier,VMID)。VMID用于标记TLB条目,以标识每个条目所属的哪个VM。此标记允许TLB中同时存在多个不同VM的翻译。TLB条目也可以用地址空间标识符(address space identifier,ASID)进行标记。

操作系统为应用程序分配一个ASID,该应用程序中的所有TLB条目都标记有该ASID。这意味着不同应用程序的TLB条目能够在TLB中共存,而不存在一个应用程序使用属于不同应用程序的TLB条目的可能性。每个VM都有自己的ASID命名空间。例如,两个虚拟机可能都使用ASID 5,但它们用于不同的用途。

Stage 1和Stage 2映射都包含属性,如类型和访问权限。内存管理单元(MMU)将两个阶段的属性组合在一起,以给出最终的有效值。MMU通过选择限制性更强的阶段来实现这一点。

下图的例子中,device类型比normal类型更具限制性。因此,最后的类型是device。如果反过来,stage 1= normal,stage 2= device,最后的结果是一样。

这种组合属性的方法适用于大多数用例,但有时hypervisor可能希望覆盖这种行为。例如,在VM的早期启动期间。

VM的IPA地址空间同样被划分成内存与外围设备的区域。VM可以访问实际物理外围设备(通常称为直接分配的外设)和虚拟外设。Hypervisor在软件中完全模拟虚拟外设。



目录
相关文章
|
8月前
|
存储 监控 安全
ARM系列 -- 虚拟化(三)
ARM系列 -- 虚拟化(三)
106 0
|
8月前
|
安全 Linux KVM
ARM系列 -- 虚拟化(一)
ARM系列 -- 虚拟化(一)
165 0
|
传感器 缓存 虚拟化
「Arm Arch」 虚拟化微架构
「Arm Arch」 虚拟化微架构
143 0
|
7天前
|
人工智能 芯片 Windows
ARM架构PC退货率与CEO策略透视
ARM架构PC退货率与CEO策略透视
|
2月前
|
机器学习/深度学习 弹性计算 人工智能
阿里云服务器架构有啥区别?X86计算、Arm、GPU异构、裸金属和高性能计算对比
阿里云ECS涵盖x86、ARM、GPU/FPGA/ASIC、弹性裸金属及高性能计算等多种架构。x86架构采用Intel/AMD处理器,适用于广泛企业级应用;ARM架构低功耗,适合容器与微服务;GPU/FPGA/ASIC专为AI、图形处理设计;弹性裸金属提供物理机性能;高性能计算则针对大规模并行计算优化。
|
3月前
|
编解码 弹性计算 应用服务中间件
阿里云服务器Arm计算架构解析:Arm计算架构云服务器租用收费标准价格参考
阿里云服务器架构分为X86计算、Arm计算、高性能计算等多种架构,其中Arm计算架构以其低功耗、高效率的特点受到广泛关注。本文将深入解析阿里云Arm计算架构云服务器的技术特点、适用场景以及包年包月与按量付费的收费标准与最新活动价格情况,以供选择参考。
|
3月前
|
机器学习/深度学习 弹性计算 编解码
阿里云服务器计算架构X86/ARM/GPU/FPGA/ASIC/裸金属/超级计算集群有啥区别?
阿里云服务器ECS提供了多种计算架构,包括X86、ARM、GPU/FPGA/ASIC、弹性裸金属服务器及超级计算集群。X86架构常见且通用,适合大多数应用场景;ARM架构具备低功耗优势,适用于长期运行环境;GPU/FPGA/ASIC则针对深度学习、科学计算、视频处理等高性能需求;弹性裸金属服务器与超级计算集群则分别提供物理机级别的性能和高速RDMA互联,满足高性能计算和大规模训练需求。
106 6
|
3月前
|
存储 Docker 容器
ARM架构鲲鹏主机BClinux离线安装docker步骤
下载并安装适用于ARM架构的Docker CE二进制文件,解压后移动至/usr/bin目录。创建docker组,配置systemd服务脚本(docker.service、docker.socket、containerd.service),重载systemd配置,启动并启用docker服务。编辑daemon.json配置存储驱动、镜像加速地址等,最后拉取所需镜像。
74 0
|
3月前
|
NoSQL MongoDB Docker
求助,有没有大神可以找到arm64架构下mongodb的3.6.8版本的docker镜像?
在Docker Hub受限的情况下,寻求适用于ARM架构的docker镜像资源或拉取链接,以便在x86架构上获取;内网中的机器为ARM架构,因此优先请求适合ARM的Docker镜像或Dockerfile,非常感激您的帮助。
|
5月前
|
机器学习/深度学习 算法 数据库
阿里云服务器架构区别解析:从X86计算、Arm计算到高性能计算架构的区别参考
在我们选择阿里云服务器的架构时,选择合适的云服务器架构对于提升业务效率、保障业务稳定至关重要。阿里云提供了多样化的云服务器架构选择,包括X86计算、ARM计算、GPU/FPGA/ASIC、弹性裸金属服务器以及高性能计算等。本文将深入解析这些架构的特点、优势及适用场景,以供参考和选择。
阿里云服务器架构区别解析:从X86计算、Arm计算到高性能计算架构的区别参考

热门文章

最新文章

相关课程

更多