汽車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應該是有借鑒意義。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/20128.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/20128.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/20128.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MySQL 視圖(2)

上一篇:MySQL視圖(1) 基于其他視圖 案例對 WITH [CASCADED | LOCAL] CHECK OPTION 進行釋義 創建視圖時,可以基于表 / 多個表,也可以使用 其他視圖表 / 其他視圖 其他視圖 的方式進行組合。 總結 更新視圖&#x…

【HTML】tabindex

當給 div 標簽以 button 角色&#xff1a; <div role"button">這時要指定其 tabindex&#xff0c;因此正確的寫法是&#xff1a; <div role"button" tabindex"0">索引值不應當大于0&#xff0c;見a11y-positive-tabindex

Open3D(C++) Ransac擬合多項式曲線

目錄 一、算法原理一、代碼實現三、結果展示本文由CSDN點云俠原創,Open3D(C++) Ransac擬合多項式曲線,爬蟲自重。如果你不是在點云俠的博客中看到該文章,那么此處便是不要臉的爬蟲與GPT生成的文章。 一、算法原理 RANSAC(Random Sample Consensus)是一種用于擬合模型的迭…

設計模式深度解析:分布式與中心化

設計模式在軟件開發中扮演著至關重要的角色,它們提供了一套經過驗證的解決方案,用于解決常見的設計問題。在分布式和中心化這兩種不同的系統架構中,設計模式的應用也有所不同。以下是對這兩種架構下設計模式的深度解析: 分布式系統設計模式 在分布式系統中,由于系統被拆…

004 仿muduo實現高性能服務器組件_Buffer模塊與Socket模塊的實現

?&#x1f308;個人主頁&#xff1a;Fan_558 &#x1f525; 系列專欄&#xff1a;仿muduo &#x1f339;關注我&#x1f4aa;&#x1f3fb;帶你學更多知識 文章目錄 前言Buffer模塊Socket模塊 小結 前言 這章將會向你介紹仿muduo高性能服務器組件的buffer模塊與socket模塊的實…

【Leetcode 706 】設計哈希映射——數組嵌套鏈表(限制哈希Key)

題目 不使用任何內建的哈希表庫設計一個哈希映射&#xff08;HashMap&#xff09;。 實現 MyHashMap 類&#xff1a; MyHashMap() 用空映射初始化對象void put(int key, int value) 向 HashMap 插入一個鍵值對 (key, value) 。如果 key 已經存在于映射中&#xff0c;則更新其…

MATLAB的plot3使用技巧|更改視角|例程分享鏈接

plot3命令 MATLAB的plot3函數是用來繪制3D圖形的函數。它可以將三維數據可視化為線段、點、曲線等形式。plot3函數可以用于繪制三維空間中的曲線、曲面、散點圖等。 plot3函數的基本用法是&#xff1a; plot3(X,Y,Z)&#xff1a;繪制三維線段&#xff0c;其中X、Y、Z分別是包…

兩個雙指針 的 “他“和“ 她“會相遇么? —— “雙指針“算法 (Java版)

本篇會加入個人的所謂魚式瘋言 ??????魚式瘋言:??????此瘋言非彼瘋言 而是理解過并總結出來通俗易懂的大白話, 小編會盡可能的在每個概念后插入魚式瘋言,幫助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能說的不是那么嚴謹.但小編初心是能讓更多人能接…

MySQL入門學習-查詢進階.UNION

UNION操作符用于合并兩個或多個SELECT語句的結果集。它可以將多個查詢結果合并為一個結果集&#xff0c;這在需要從多個表中獲取數據并將它們組合在一起時非常有用。下面是一個使用UNION的示例代碼&#xff1a; SELECT column1, column2,...FROM table1UNIONSELECT column1, c…

springboot kafka 提高拉取數量

文章目錄 背景問題復現解決問題原理分析fetch.min.bytesfetch.max.wait.ms源碼分析ReplicaManager#fetchMessages 背景 開發過程中&#xff0c;使用kafka批量消費&#xff0c;發現拉取數量一直為1&#xff0c;如何提高批量拉取數量&#xff0c;記錄下踩坑記錄。 問題復現 ka…

攻防對抗少丟分,愛加密幫您筑起第二防線

應用程序通常處理和存儲大量的敏感數據&#xff0c;如用戶個人信息、財務信息、商業數據、國家數據等&#xff0c;用戶量越大的應用程序&#xff0c;其需要存儲和保護的用戶數據越多。因此應用層長期是攻擊方的核心目標&#xff0c;傳統應用安全依靠防火墻(FireWall)、入侵檢測…

1.7 協議層次和服務模型

協議層次 網絡是一個復雜的系統! ? 網絡功能繁雜&#xff1a;數字信號的物理信 號承載、點到點、路由、rdt、進程區分、應用等 ?現實來看&#xff0c;網絡的許多構成元素和設備: ? 主機 ? 路由器 ? 各種媒體的鏈路 ? 應用 ? 協議 ? 硬件, 軟件 Q:如何組織和實現這個…

Linux上實現ssh免密通訊

Linux上實現ssh免密通訊 1.SSH互信原理2.SSH所需的RPM包3.兩臺機器實現互信4.常見問題及處理 1.SSH互信原理 SSH&#xff08;Secure Shell&#xff09;是一種安全的傳輸協議&#xff0c;它能讓Linux系統中的服務器和客戶端之間進行安全可靠的通訊。 SSH使用加密的傳輸方式&…

iOS組件化 方案 實現

iOS組件化 組件化的原因現在流行的組件化方案方案一、url-block &#xff08;基于 URL Router&#xff09;方案二、protocol調用方式解讀 方案三、target-action調用方式解讀 gitHub代碼鏈接參考 組件化的原因 模塊間解耦模塊重用提高團隊協作開發效率單元測試 當項目App處于…

網絡原理-四

一、續 當窗口大小為0,意味著緩沖區滿了,此時發送方,就因該暫停發送,發送方會周期性的除法 " 窗口探測包 " ,并不攜帶載荷,這樣的包對于業務不產生影響,只是為了觸發ACK,一旦查詢出來的結果是非0,緩沖區右有空間了,發送方就可以繼續發送. 二、擁塞控制 要限制發送方…

一步一步寫線程之十三隊列間的消息通知

一、線程和分布式的通信 隨著技術的不斷發展&#xff0c;多線程和分布式通信愈發的普及。那么在這種場景下的如何進行數據的通信&#xff0c;便成為了一個非常典型的問題。無論是多線程還是分布式&#xff0c;其實其抽象出來的通信機制都是類似的。或者說換句話&#xff0c;多…

java檢測字符串是否包含數字和字母

在Java中&#xff0c;要檢測一個字符串是否同時包含數字和字母&#xff0c;我們可以使用正則表達式&#xff08;regex&#xff09;或者通過遍歷字符串并檢查每個字符來實現。以下是兩種方法的詳細代碼示例&#xff1a; 1.方法一&#xff1a;使用正則表達式 import java.util.…

【AI+知識庫問答】沉浸式體驗了解 AI知識庫問答fastGPT

之前寫過一篇文章 【AI本地知識庫】個人整理的幾種常見本地知識庫技術方案 &#xff0c; 由于當時主要是針對AI本地知識庫&#xff0c; 所以沒列fastGPT。 最近經常刷到fastGPT&#xff0c;這里單獨水一篇。 FastGPT 是一個基于 LLM 大語言模型的知識庫問答系統&#xff0c;…

Github 2024-06-01 開源項目日報Top10

根據Github Trendings的統計,今日(2024-06-01統計)共有10個項目上榜。根據開發語言中項目的數量,匯總情況如下: 開發語言項目數量Python項目5Jupyter Notebook項目2TypeScript項目1Go項目1Shell項目1Lua項目1Kong:云原生API網關與AI能力 創建周期:3482 天開發語言:Lua協議…

如何確保績效目標執行到位?

很多企業在實施績效過程中&#xff0c;盡管制定好了績效目標&#xff0c;但是沒有執行下去&#xff0c;管理者將原因歸咎于“員工低效”、“體制機制”等問題&#xff0c;那么在人力資源管理方面&#xff0c;企業應該如何確保制定的績效目標執行到位&#xff1f;如何提高低效能…