汽车ECU的虚拟化技术初探(三)--U2A虚拟化辅助功能分析1

news2024/11/18 15:27:35

目录

1.基本概述

1.1 U2A虚拟化辅助功能

1.2 U2A虚拟化使能和资源分配

2. U2A架构概述 

3. CPU运行模式

3.1 虚拟化模式

3.2 限制运行模式

 3.3 权限运行模式

3.4 CPU运行模式小结

4.小结


1.基本概述

1.1 U2A虚拟化辅助功能

       在汽车ECU的虚拟化技术初探(二)-CSDN博客中我们聊到,U2A硬件本身的虚拟化辅助功能只能称为半虚拟化,该芯片主要是提供了一种叫做分区功能(partiton function)用于实现虚拟化辅助,该功能对运行在该CPU的软件做了硬件限制,从而将CPU的资源隔离开来;那么运行在虚拟机上的ECU就感觉不到虚拟机的存在,还是像以前一样部署OS即可使用。

1.2 U2A虚拟化使能和资源分配

        U2A虚拟化辅助功能是由CPU提供,通过指令LDSR设置系统寄存器HVCFG.HVE,如下:

        打开虚拟化功能之后,此时CPU就又出现了两种运行模式,Host Mode和Guest Mode。

         Host Mode可以使用CPU的所有资源,但是Guest Mode就不能使用CPU虚拟化相关的资源,同时也受Host Mode的限制。

        具体的资源分配主要由虚拟化软件来指定,但是软件分配好后,这种资源隔离机制由CPU提供,值得注意是CPU对通用寄存器没有隔离机制,因此需要在VM上下文切换时做好保存。CPU可以访问的主要资源如下:

隔离机制简介如下:

MPU:用于限制访问的地址空间

Guard Mechanism:产品指定的特殊访问限制机制,后面再聊

Partial Multiplexing:系统寄存器在Host/Guest Mode下多路复用

INTC:中断控制器特定的中断通道隔离机制

*5:Host指定是否使用Guest Mode

        可以看到,这里面光memory就有三种:Flash、Local、Cluster;同时CPU也分为了Outside和Inside,隔离机制由MPU和Guard Mechanism构成;这是以前MCU都没有的概念,因此今天着重分析上述内容。

2. U2A架构概述 

         首先我们来看U2A-EVA 516的CPU子系统架构框图:

        可以看到,瑞萨将4个核均分给了Cluster#0和#1,Cluster2和3仅包含了Cluster RAM;C#0和C#1里均有两个4MB的CodeFlash和一个64KB的LRAM。与之前RH850-P1x/F1KM系列,缺少了Global RAM,转为了Cluster RAM,这很有意思,为什么要改这个名字呢?后面看到再说。

        回过头来,我们根据这个图,就可以判断在上面资源分配所谓的Outside CPU其实就是指的当前这个资源是CPU子系统里的还是外面的,以Flash为例,CPU0访问FLI0必须通过Local FLASH Bus,因此它是CPU外部资源,采用MPU+Guard机制进行资源隔离。

        在第二篇文章中,我们知道虚拟化开启后,CPU新增了一种特权模式,叫做hypervisor privilege;不同的权限也对应不同的功能,所以我们来看看当虚拟化开启后,整个系统功能有哪些不一样。如下:

CPU功能区别描述
CPU运行模式Host/Guest Mode
访问权限在虚拟化开启后新增HV特权
系统寄存器访问权限有所变化,因为新增了HV
指令执行权限有所变化,因为新增了HV
异常处理地址

Host模式,限制使用表引用异常

Guest模式,限制使用异常基地址使用

异常根因如RESET\FENMI..等等可以隔离机制来清晰分辨vCPU
异常接收条件基于异常根因设置接收条件
内部memory保护Host Mode下设置MPU,在Guest Mode无法修改
虚拟化相关系统寄存器仅在虚拟化模式下可以使用虚拟化相关寄存器
Host上下文寄存器Host和Guest切换时复用上下文系统寄存器以节省资源、提升效率
Guest上下文寄存器
MPU系统寄存器实现隔离机制
虚拟化辅助指令仅在虚拟化模式支持指令

        所以,可以初步得出一个结论,U2A提供的虚拟化辅助功能主要还是从CPU角度出发,分别对CPU运行模式、虚拟化模式的异常处理、内存隔离、存储隔离、指令增加以及特权变化做了硬件机制上的新增。

3. CPU运行模式

        在第二篇虚拟化描述中,我们简单把CPU模式的框图描述了下,今天再详细说明模式的跳转、功能限制等。

        U2A基于RISC自行设计的G4MH2内核,它支持3种独立的模式:虚拟化模式、有限制运行模式和权限模式。

3.1 虚拟化模式

        该模式主要用于表征CPU虚拟化辅助功能的使用状态,使用系统寄存器HVCFG.HVE进行切换,如下:

        传统模式就是ECU直接运行在裸机上面,因此不能使用虚拟化相关功能或者指令,否则会触发RIE(reserved instruction exception)。

3.2 限制运行模式

         如上图所示CPU切换到虚拟化模式后,首先会进入到虚拟化模式中的限制运行子模式Host Mode,如下图所示:

        Host Mode:该模式下不能使用隔离机制(partition function);

        Guest Mode:可以使用隔离机制。

        因此,我们这里做一些总结,在CPU最初情况下,有两种运行模式可以选择:conventional和virtualized,当选择virtualized模式之后,会进入该模式下的子状态:Host Mode。Host可以通过寄存器PSWH进入到Guest Mode,如下:

        当虚拟化使能后(HVCFG.HV = 1),PSW寄存器编程了扩展性寄存器,如下:

        这里有一个很关键的点,GM这一bit是只读的,因此如何使得CPU从Host跳转至Guest模式呢?根据描述需要使用return指令,例如EIRET,

         所以我们看到上图,有一个xxPSWH,可以实际举例为EIPSWH,如下:

 3.3 权限运行模式

        权限运行模式主要针对软件的操作权限,分为Supervisor Mode(SV)和User Mode,这些权限通俗讲就是用于操作某些寄存器(寄存器受不同权限保护)。很明显,不管是在3.1、3.2哪种模式,软件权限划分都要分SV和UM。例如在传统运行模式中,通知App是运行在UM里,OS才有SV权限去完全调度CPU资源,因此我们可以把这些权限全部贴进上述模式中,如下:

        而在Host Mode下,有一种独有权限,叫做HV(Hypervisor privilege) ,用于操作受HV保护的寄存器。

3.4 CPU运行模式小结

        有了上述基本概念,我们再回过头来看瑞萨提供的这张图就清晰了,如下:

  1. CPU运行后,首先在Conventional Mode运行,如果不使用虚拟化,那么软件就可以在SV/UM权限去操作不同的寄存器或者资源;
  2. 使能虚拟化后,CPU进入到Virtualized Mode,并且此时软件处在HV特权下;同时Hypervisor的软件也可以在HV\UM跳转;
  3. 当真正运行虚拟机之后,进入到Guest Mode,并且与传统模式一样拥有SV和UM权限

        那么具体模式之间跳转后的PC、上下文以及对应寄存器有哪些呢?先来一个Host Mode 寄存器模型大图:

         这里暂时不提,不然大伙儿就没兴趣看了。

4.小结

        今天讲清楚了CPU的运行模式,以及各种模式的切换方式。接下来,我们要继续深度研究每个模式下的寄存器、内存管理机制、中断虚拟化等内容。

 

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

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

相关文章

MyBatis #{} 和 ${} 的区别

前言: #{} 和 ${} 的区别是 MyBatis 中一个常见的面试题,#{} 和 ${} 是MyBatis 中获取参数的两种方式,但我们在项目中大多数使用的都是 #{} 来获取参数,那么它们两个有什么区别呢? 区别 一. #{} 采用预编译 SQL&…

鸿蒙4.0开发笔记之DevEco Studio如何使用Previewer窗口预览器(一)

一、预览器作用 DevEco Studio预览器概况在HarmonyOS应用开发过程中,通过使用预览器,可以查看应用的UI效果,方便开发者实时查看应用的运行效果,随时调整代码。 二、打开Previewer预览器 1、正常启动 打开预览器的位置在DevEco…

Docker Swarm: 容器编排的力量和优势深度解析

文章目录 Docker Swarm的核心概念1. 节点(Node)2. 服务(Service)3. 栈(Stack) 使用Docker Swarm1. 初始化Swarm2. 加入节点3. 创建服务4. 扩展和缩减服务5. 管理栈6. 管理服务更新 Docker Swarm的优势深度解…

03.webpack中hash,chunkhash和contenthash 的区别

hash、contenthash 和 chunkhash 是通过散列函数处理之后,生成的一串字符,可用于区分文件。 作用:善用文件的哈希值,解决浏览器缓存导致的资源未及时更新的问题 1.文件名不带哈希值 const path require(path) const HtmlWebpac…

DMA原理和应用

目录 1.什么是DMA 2.DMA的意义 3.DMA搬运的数据和方式 4.DMA 控制器和通道 5.DMA通道的优先级 6.DMA传输方式 7.DMA应用 实验一: 内存到内存搬运 CubeMX配置: ​编辑用到的库函数: 代码实现思路: 实验二: 内存到外设搬运 CubeMX…

html-网站菜单-点击显示导航栏

一、效果图 1.点击显示菜单栏&#xff0c;点击x号关闭&#xff1b; 2.点击一级菜单&#xff0c;展开显示二级&#xff0c;并且加号变为减号&#xff1b; 3.点击其他一级导航&#xff0c;自动收起展开的导航。 二、代码实现 <!DOCTYPE html> <html><head>&…

Apache Doris (五十四): Doris Join类型 - Bucket Shuffle Join

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录

场景交互与场景漫游-osgGA库(5)

osgGA库 osgGA库是OSG的一个附加的工具库&#xff0c;它为用户提供各种事件处理及操作处理。通过osgGA库读者可以像控制Windows窗口一样来处理各种事件 osgGA的事件处理器主要由两大部分组成&#xff0c;即事件适配器和动作适配器。osgGA:GUIEventHandler类主要提供了窗口系统的…

swin unetr的3D语义分割

基于monai库。其实我不是很喜欢这种&#xff0c;可扩展性太差了&#xff0c;除非说你想快速在自己的数据集上出结果。但是它的transform可以对3d医学图像增强操作&#xff0c;比torch的transform强一点&#xff0c;因为它的数据增强输入是&#xff08;x,y,z&#xff09;h,w,d格…

竞赛 题目:基于机器视觉opencv的手势检测 手势识别 算法 - 深度学习 卷积神经网络 opencv python

文章目录 1 简介2 传统机器视觉的手势检测2.1 轮廓检测法2.2 算法结果2.3 整体代码实现2.3.1 算法流程 3 深度学习方法做手势识别3.1 经典的卷积神经网络3.2 YOLO系列3.3 SSD3.4 实现步骤3.4.1 数据集3.4.2 图像预处理3.4.3 构建卷积神经网络结构3.4.4 实验训练过程及结果 3.5 …

FPGA基础以太网

以太网数据通信 物理层&#xff1a;网线网卡&#xff08;PHY芯片&#xff09; 数据链路层&#xff1a;Mac层(数据有效传输&#xff09; 如图所示&#xff1a;FPGA中的Mac层中的MII接口负责控制PHY芯片&#xff0c;PHY芯片通过网线与PC端进行以太网数据传输。 FPGA中&#xff…

linux高级篇基础理论四(rsync,inotify,squid,KVM虚拟机)

♥️作者&#xff1a;小刘在C站 ♥️个人主页&#xff1a; 小刘主页 ♥️不能因为人生的道路坎坷,就使自己的身躯变得弯曲;不能因为生活的历程漫长,就使求索的 脚步迟缓。 ♥️学习两年总结出的运维经验&#xff0c;以及思科模拟器全套网络实验教程。专栏&#xff1a;云计算技…

利用NVIDIA DALI读取视频帧

1. NVIDIA DALI简介 NVIDIA DALI全称是NVIDIA Data Loading Library&#xff0c;是一个用GPU加速的数据加载和预处理库&#xff0c;可用于图像、视频和语音数据的加载和处理&#xff0c;从而为深度学习的训练和推理加速。 NVIDIA DALI库的出发点是&#xff0c;深度学习应用中…

springboot引入redisson分布式锁及原理

1.引入依赖 <dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.13.6</version> </dependency>2.配置类创建bean /*** author qujingye* Classname RedissonConfig* Description TOD…

相关系数和协方差的关系与区别

相关系数和协方差都是用来衡量两个变量之间关系的统计量&#xff0c;它们在描述变量之间的线性关系上提供了一些信息。下面是它们的关系与区别&#xff1a; 关系&#xff1a; 相关系数的计算涉及到协方差。相关系数等于协方差除以两个变量的标准差的乘积。具体而言&#xff0c…

深度优化数据库性能:Linux 内核参数调整解析

点击上方蓝字关注我 数据库服务器性能的优化是每个IT团队关注的焦点之一。除了数据库引擎的优化之外&#xff0c;合理调整操作系统的内核参数也是提高数据库性能的关键。本文将解析一些常见的 Linux 内核参数&#xff0c;以及它们在数据库服务器优化中的作用和建议的值。 1. 参…

Django学习日志07

多表查询&#xff08;跨表查询&#xff09; 子查询&#xff1a;分步查询 链表查询&#xff1a;把多个有关系的表拼接成一个大表(虚拟表) inner join left join 展示左表所有数据数据&#xff0c;右表展示符合查询条件的数据&#xff0c;查询不到的用null填充 …

工程建设智慧施工云平台源码 智慧工地平台源码

智慧工地平台源码 工程建设智慧施工云平台源码 技术框架&#xff1a;微服务架构JavaSpring Cloud UniApp MySql 智慧工地平台是一种智慧型、系统性的工地信息化解决方案&#xff0c;它把现代信息技术融入到建设工程管理中&#xff0c;协调各方资源&#xff0c;优化施工过程&…

LeetCode题 338比特位计数,20有效的括号,415字符串相加

目录 338比特位计数 题目要求&#xff1a; 解题思路&#xff1a; 1、暴力穷举 代码&#xff1a; 2、N&&#xff08;N - 1&#xff09;公式求解 代码&#xff1a; 3、奇偶数性质解法&#xff1a; 代码&#xff1a; 20有效的括号 题目要求&#xff1a; 解题思路 …

react-router-dom 版本6.18.0中NavLink的api和属性介绍

React Router 是一个基于 React 的路由库&#xff0c;它可以帮助我们在 React 应用中实现页面的切换和路由的管理。而 NavLink 则是 React Router 中的一个组件&#xff0c;它可以帮助我们实现导航栏的样式设置和路由跳转。 在 React Router 版本6.18.0 中&#xff0c;NavLink…