当前位置: 首页 > news >正文

汽车MCU虚拟化--对中断虚拟化的思考(2)

目录

1.引入

2.TC4xx如何实现中断虚拟化

3.小结


1.引入

其实不管内核怎么变,针对中断虚拟化无非就是上面两种,要么透传给VM,要么由Hypervisor统一分发。汽车MCU虚拟化--对中断虚拟化的思考(1)-CSDN博客

那么,作为车规MCU龙头的英飞凌在TC4xx是如何考虑中断虚拟化的呢?

2.TC4xx如何实现中断虚拟化

TC4xx的内核为TC1.8,支持虚拟化功能,

每个核有三套独立硬件资源HRHV、HRA、HRB,可支持最大8个VM,其中VM0运行hypervisor,VM1运行实时虚拟机,VM2-7运行其他VM,如下图所示:

图 15

  • HRVH – Hypervisor hardware resource(VM0)
  • HRA – Real time virtual machine hardware resource (VM1)
  • HRB – Other virtual machine hardware resource (VM2-7)

上面提到,既然每个核支持最大8个VM,那么针对中断的处理也有对应8套资源,这里我们回到开头那几个问题:

  • 假设被分配到的VM此时还没有运行怎么办?
  • 假设被分配到的VM此时正在处理中断怎么办?

首先来看图说话,如下:

正常时间片为2000us,VM1占用500us,VM2占用1000us,VM3占用500us;

当VM2正在运行时,此时来了一个VM1的中断,该中断可以抢占VM2的时间,所以此时Hyperviosr需要将VM2的上下文保存,并切换到VM1,让其完成ISR处理,然后恢复现场VM2继续运行;

当VM3正在运行时,此时来了一个VM2的中断,但它不可抢占VM3的时间,所以需要VM3运行完毕后切换到VM2的ISR进行处理,当然这里也挤压了VM1的时间。

TC4xx是如何实现上述功能的呢?

在他们的设计中,每个中断SRN都可以被拓展分配给1个VM;每个VM都有自己独立的中断状态控制寄存器,包括当前VM中断系统是否使能(简称VMIE)、当前VM的优先级(简称VMCP)、Pending中断优先级(简称VMPIP);

为了实现运行VM在收到其他VM中断时可被抢占,新增了抢占阈值寄存器,简称THR,好玩的就来了。

假设当前正在运行VM1,此时来了一个VM0的中断,如果此时进来的Pending中断优先级高于VM0配置的抢占阈值,同时高于VM0的当前优先级,那么Hypervisor就需要进行上下文切换,返回到VM0处理中断,伪代码如下:

if (INT.VM_coming == current VM)
{if ((VMPIP > VM_coming.VMCP) && (VM_coming.IE ){isr_routine();}else{Keep INT Pending}
}
else (INT.vm_coming == VM0 )
{if ((VMPIP > VM0.VMCP) && (VMPIP > VM0.THR){Switch to HRHV    isr_routine();}else{Keep INT Pending}
}

同理,如果当前VM0、VM1、VM2同时运行,也需要执行上述步骤,只是在VM2如果要抢占VM1时,需要在Hypervisor模式下首先保存VM1的上下文到HRA,然后切换到HRB,让VM2进行中断处理。

本质上,这样的机制和透传很像,只是我们可以通过Hypervisor配置每个VM的中断状态控制器寄存器、抢占阈值寄存器来实现中断实时性的控制, 例如:

当我们把阈值配置为最大时,此时谁也无法进行抢占(Trap除外),只能得到时间片走完;如果阈值配置为最小,那就是直接透传,这时候性能最优。

3.小结

上面几节内容,记录了我对于中断虚拟化的思考过程。

其实在车载领域,特别是座舱域,仪表和中控是肯定要跑虚拟化的,目前用的最多是QNX Hypervisor,它关于CPU虚拟化、内存虚拟化、中断虚拟化、虚拟机通信等的视线对于目前MCU上Hypervisor应该是有借鉴意义。

相关文章:

  • 【蒙特卡洛仿真的corner】
  • 【Git】修改设置 git 的 username、email
  • 几种在ARM MCU上控制流水灯的方法
  • 【JAVA技术】mybatis 数据库敏感字段加解密方案
  • 多目标应用:MOHHO多目标哈里斯鹰优化算法求解无人机三维路径规划(MATLAB代码)
  • c++ new 和 malloc 分配内存
  • rk3588 linux配置YT8531H以太网灯的状态
  • 计算机是如何工作的
  • LabVIEW电路板性能与稳定性测试系统
  • thinkadmin发邮件功能如何设置?怎么使用?
  • Vue 组件之间的通信
  • 嵌入式学习——网络编程(TCP)——day31
  • 短视频矩阵系统----可视化剪辑独立开发(采用php)
  • [STM32]定位器与PWM的LED控制
  • SQL数据库性能优化
  • 网络传输文件的问题
  • “大数据应用场景”之隔壁老王(连载四)
  • 2017-08-04 前端日报
  • android图片蒙层
  • codis proxy处理流程
  • css系列之关于字体的事
  • FastReport在线报表设计器工作原理
  • iOS帅气加载动画、通知视图、红包助手、引导页、导航栏、朋友圈、小游戏等效果源码...
  • JavaScript 一些 DOM 的知识点
  • Java反射-动态类加载和重新加载
  • React组件设计模式(一)
  • supervisor 永不挂掉的进程 安装以及使用
  • 从零开始的无人驾驶 1
  • 对超线程几个不同角度的解释
  • 蓝海存储开关机注意事项总结
  • 盘点那些不知名却常用的 Git 操作
  • 前端技术周刊 2019-02-11 Serverless
  • 译自由幺半群
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • #、%和$符号在OGNL表达式中经常出现
  • #Datawhale AI夏令营第4期#AIGC方向 文生图 Task2
  • (2.2w字)前端单元测试之Jest详解篇
  • (3)llvm ir转换过程
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (Git) gitignore基础使用
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (计算机网络)物理层
  • (六)激光线扫描-三维重建
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (四十一)大数据实战——spark的yarn模式生产环境部署
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • *算法训练(leetcode)第四十七天 | 并查集理论基础、107. 寻找存在的路径
  • .mp4格式的视频为何不能通过video标签在chrome浏览器中播放?
  • .NET : 在VS2008中计算代码度量值