ARM系列 -- 虚拟化(五)

news2024/11/19 15:31:34

在ARM体系结构中,处理器内部有通用计时器,通用计时器包含一组比较器,用来与系统计数器进行比较,一旦通用计时器的值小于等于系统计数器时便会产生时钟中断。

大家看到这里是不是想起了前面讲GIC时提到的PPI(private peripheral interrupt)。系统计数器往往会放在always-on的电源域内,要求输入时钟不可间断且频率不变。

看下图,如果一个hypervisor之上虚拟了两个vCPU,那么,物理世界中经历了4ms的时间(wall time),但每个vCPU实际运行了2ms时间(virtual time)。

如果你设置了vCPU0在2ms以后产生中断,在物理时间中就是3ms的时刻vCPU0才真正的运行完2ms的时间。换句话说,对于vCPU0的2ms时间中断,你是希望发生在物理时间中2ms时刻处还是3ms时刻处呢?

ARM体系结构同时支持上述两种设置,这取决于使用何种虚拟化方案。运行在vCPU上的软件可以访问下面两种时钟:

  • EL1物理计时器(physical timer)
  • EL1虚拟计时器(virtual timer)

EL1物理计时器会与系统计数器模块直接比较,使用的是物理世界的时间。

而与EL1虚拟计时器比较的是虚拟计数器。虚拟计数器是在物理计数器的基础上减去一个偏移。Hypervisor负责为当前调度运行的vCPU指定对应的偏移寄存器。这样,vCPU0没有运行的物理时间就会被减去。

看下面的时序图会更清晰,蓝色代表vCPU0,绿色代表vCPU1。在整个的6ms时间内,vCPU0和vCPU1各运行了3ms的时间。

Hypervisor可以通过偏移寄存器显示虚拟计数,该计数仅显示vCPU运行的时间。或者虚拟机监控程序可以将偏移量保持在0,这意味着虚拟时间与物理时间相同。

理论上,hypervisor可以运行在VM中,就是嵌套虚拟化。第一层的hypervisor称为Host Hypervisor,VM里面的hypervisor称为Guest Hypervisor。

在Armv8.3-A之前,VM的Guest Hypervisor可以运行在EL0。然而,这需要大量的软件仿真,而且实现起来很复杂,导致性能低下。

在Armv8.3-A,Guest Hypervisor可以运行在EL1。到了Armv8.4-A,增加了一些特性,这个过程的效率变高了一些,但是仍然需要Host Hypervisor参与做一些额外的工作。不再赘述了。

虚拟化是在Armv7-A中引入的,Hyp模式(相当于AArch32中的EL2)仅在非安全状态下可用。在Armv8.4-A中,作为可选功能添加了对处于安全状态的EL2的支持。

在安全虚拟化可用之前,EL3通常用于托管安全状态切换软件和平台固件的混合。这是因为我们希望尽量减少EL3中的软件数量,从而使EL3更容易安全。安全虚拟化允许将平台固件移动到EL1中。虚拟化为平台固件和可信内核提供了单独的安全分区。

ARM体系结构定义了两个物理地址空间:安全和非安全。在非安全状态下,虚拟机(VM)的stage 1转换的输出始终是非安全的。

因此,有一个中间物理地址(IPA)空间供satge 2处理。

在安全状态下,VM的stage 1转换可以输出安全和非安全地址。转换表描述符中的NS位控制是否输出安全或非安全地址空间。

如下图所示,这意味着stage 2有两个IPA空间,安全和非安全。

与stage 1表格不同,stage 2表格条目中没有NS位

对于特定IPA空间,所有转换都会产生安全物理地址或非安全物理地址。

此转换由寄存器位控制。通常,非安全IPA转换为非安全PAs,安全IPA转换为安全PAs。


老秦谈芯

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1475678.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

招聘系统架构的设计与实现

在当今竞争激烈的人才市场中,有效的招聘系统对企业吸引、筛选和管理人才至关重要。本文将探讨招聘系统的架构设计与实现,帮助企业构建一个高效、可靠的人才招聘平台。 ## 1. 系统架构设计 ### 1.1 微服务架构 招聘系统通常采用微服务架构,将…

移动Web系统中无监督KPI异常检测的监督式微调

简介 本文介绍由清华大学、南开大学、中国移动研究院与必示科技共同合作的论文:移动Web系统中无监督KPI异常检测的监督式微调。该论文已被The Web Conference 2024(International World Wide Web Conference)会议录用,论文标题为&…

【Hudi】核心概念

https://www.bilibili.com/video/BV1ue4y1i7na?p17&vd_sourcefa36a95b3c3fa4f32dd400f8cabddeaf 大数据新风口:Hudi数据湖(尚硅谷&Apache Hudi联合出品) 1 基础概念 1.1 时间轴(TimeLine) 1.2 文件布局(File Layout) 1.3 索引(In…

Leetcode—82. 删除排序链表中的重复元素 II【中等】

2024每日刷题(117) Leetcode—82. 删除排序链表中的重复元素 II 实现代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val…

npm login报错 ‘proxy‘ config is set properly. See: ‘npm help config‘

报错提示 解决办法 按照以下的顺序执行命令行 检查自己的代理 npm config get proxy npm config get npm config get https-proxy npm config get registry代理和缓存置空并且设置新镜像 npm config set proxy null npm config set https-proxy null npm config set regist…

面试笔记系列七之多线程+分布式系统基础知识点整理及常见面试题

介绍一下线程的生命周期及状态? 1.创建 当程序使用new关键字创建了一个线程之后,该线程就处于一个新建状态(初始状态),此时它和其他Java对象一样,仅仅由Java虚拟机为其分配了内存,并初始化了其成…

【Linux】jieba的安装和使用

目录 链接 jieba库简介 ​获得jieba库 怎么使用jieba库 链接 因为github下载东西的时间原因,下面这个网站会定期将jieba从github镜像回来 项目 探索 GitCodehttps://gitcode.net/explore输入cppjieba进行搜索,点击相应链接进入 jieba库简介 需要…

【前端知识点】

虚拟 dom: 虚拟 dom 就是 vue 通过 js 对象渲染虚拟 dom 的,虚拟 dom 的 js 对象包含节点的类型、属性、子节点等信息,这些虚拟 dom 节点会构成一棵树形结构,用来表示整个页面的结构。 当 vue 组件更新时,会通过 diff…

雾锁王国服务器怎么建?雾锁王国服务器搭建方法

雾锁王国Enshrouded服务器搭建怎么搭建?非常简单,阿里云计算巢雾锁王国程序,可以一键搭建雾锁王国多人联机服务器,腾讯云是基于雾锁王国镜像系统,阿里云服务网aliyunfuwuqi.com汇总雾锁王国服务器搭建,超简…

Python爬虫实战第二例【二】

零.前言: 本文章借鉴:Python爬虫实战(五):根据关键字爬取某度图片批量下载到本地(附上完整源码)_python爬虫下载图片-CSDN博客 大佬的文章里面有API的获取,在这里我就不赘述了。 一…

早产儿视网膜病变分期,自动化+半监督(无需大量医生标注数据)

早产儿视网膜病变 ROP 分期 提出背景解法框架解法步骤一致性正则化算法构建思路 实验 提出背景 论文:https://www.cell.com/action/showPdf?piiS2589-0042%2823%2902593-2 早产儿视网膜病变(ROP)目前是全球婴儿失明的主要原因之一。 这是…

链表基础知识详解(非常详细简单易懂)

概述: 链表作为 C 语言中一种基础的数据结构,在平时写程序的时候用的并不多,但在操作系统里面使用的非常多。不管是RTOS还是Linux等使用非常广泛,所以必须要搞懂链表,链表分为单向链表和双向链表,单向链表很…

求两个向量之间的夹角

求两个向量之间的夹角 介绍Unity的API求向量夹角Vector3.AngleVector3.SignedAngle 自定义获取方法0-360度的夹角 总结 介绍 求两个向量之间的夹角方法有很多,比如说Unity中的Vector3.Angle,Vector3.SignedAngle等方法,具体在什么情况下使用…

Groovy(第九节) Groovy 之单元测试

JUnit 利用 Java 对 Song 类进行单元测试 默认情况下 Groovy 编译的类属性是私有的,所以不能直接在 Java 中访问它们,必须像下面这样使用 setter: 编写这个测试用例余下的代码就是小菜一碟了。测试用例很好地演示了这样一点:用 Groovy 所做的一切都可以轻易地在 Java 程序…

使用 gregwar/captcha 生成固定字符的验证码

图片验证码生成失败 $captcha new CaptchaBuilder("58 ?"); $code $captcha->getPhrase();\Cache::put($key, [phone > $phone, code > $captcha->getPhrase()], $expiredAt);$captcha->build(); $result [captcha_key > $key,expired_at >…

Linux------进程地址空间

目录 一、进程地址空间 二、地址空间本质 三、什么是区域划分 四、为什么要有地址空间 1.让进程以统一的视角看到内存 2.进程访问内存的安全检查 3.将进程管理与内存管理进行解耦 一、进程地址空间 在我们学习C/C的时候,一定经常听到数据存放在堆区、栈区、…

雾锁王国服务器官方配置要求说明

雾锁王国/Enshrouded服务器CPU内存配置如何选择?阿里云服务器网aliyunfuwuqi.com建议选择8核32G配置,支持4人玩家畅玩,自带10M公网带宽,1个月90元,3个月271元,幻兽帕鲁服务器申请页面 https://t.aliyun.com…

TCP/IP-常用网络协议自定义结构体

1、TCP/IP模型: 2、TCP/IP- 各层级网络协议(从下往上): 1)数据链路层: ARP: 地址解析协议,用IP地址获取MAC地址的协议,通过ip的地址获取mac地 …

Vue项目 快速上手(如何新建Vue项目,启动Vue项目,Vue的生命周期,Vue的常用指令)

目录 一.什么Vue框架 二.如何新建一个Vue项目 1.使用命令行新建Vue项目 2.使用图形化界面新建Vue项目 三.Vue项目的启动 启动Vue项目 1.通过VScode提供的图形化界面启动Vue项目 2.通过命令行的方式启动Vue项目 四.Vue项目的基础使用 常用指令 v-bind 和 v-model v…

学生党福音!趁着拍拍开学季活动买平板啦!

谁还在买5年前的平板啊? 当然是我! 虽然手里有台ipad,但ios系统限制多,不方便,一直想再要一台安卓平板。 去年观望了好久小米平板5pro,想着如果8256G配置价格在1500以下就入手,结果一直不掉价…