[A-22]ARMv8/v9-SMMU多級頁表架構

ver0.1

[看前序文章有驚喜,關注W\X\G=Z+H=“浩瀚架構師”,可以解鎖全部文章]

前言

前文我們對SMMU的系統架構和基本功能做了簡要的介紹,現在大家大致對SMMU在基于ARM體系的系統架構下的總線位置和產品形態有了基本的了解。這里我們還是簡單做個前情回顧,從總線架構角度看過去:
(1) CPU內部就有MMU他要統擴整個VMSA空間,管理好VA到IPA再到PA的各個空間,重要性就沒法形容了。
(2) 越來越多的總線IP也在內部集成SMMU,典型如GPU。這樣在驅動程序的配合下,GPU自身就可以管理離散內存,實現整個系統性能提升和功能擴展。要說缺點就是貴,畢竟是獨占的,哈哈。
(3) 還有就是常見的一種形態存在,各個IP-Core共享的模態存在。這種架構模態下,可以讓總線上的各個功能單元共享,可以有效降低成本,就是會增加軟件維護的工作量。
無論以哪種模態出現,SMMU和MMU的核心功能都是地址翻譯,它們的很多Feature都是圍繞著“地址翻譯”展開,那么本文也會圍繞著SMMU的地址翻譯做一些準備工作,介紹下SMMU的頁表架構:一座假設在設備和物理內存之間的橋梁。

正文

1.1 MMU頁表的架構

讀到這里的小伙伴對頁表沒有任何經驗的話,那你就是沒感覺,和談對象一樣,沒感覺是不行的,先看看前序文章吧。
(1) [A-10]ARMv8/ARMv9-Memory-頁表的概念和使用場景
(2) [A-11]ARMv8/ARMv9-Memory-多級頁表架構
(3) [A-12]ARMv8/ARMv9-Memory-頁表描述符(Translation table descriptor)
這里我們只會簡單的回顧一下。

ARM的VMSA體系下,規定了處理器無論是處于何種安全等級(Secure\Normal\Root\Non-Secure)、任何權限等級(EL3\EL2\EL1\EL0)的程序都必須使用虛擬地址VA和CPU打交道。CPU拿到虛擬地址后,根據虛擬地址的類型(Device/Normal)通過MMU變成物理地址,然后發起總線操作完成對物理地址空間的訪問。物理地址空間的資源是有限的,表現為:A進程用了,B進行就不能用;kernel 用了,Userspace就不能用;VM1用了,VM2就不能用;Secure用了,Non-Secure就不能用。雖然高權限等級的軟件模塊,會對低權限的等級內存產生干預,但也是有底線有原則的。那么VMSA就把地址空間劃片(Page、Block),一片虛擬地址空間的內存對應著一片物理地址空間的內存。這個對應關系是需要記錄下來的,就是系統在運行時要維護一本帳,通過這個賬本連接起內存的虛擬地址空間和物理地址空間,如圖1-1所示。
1-1

圖1-1 VMSA頁表模型

這個對應關系,VMSA設計了一套數據結構:TranslationTable(頁表)、Page(頁描述符)、Block(塊描述)。這些數據結構的每一項的格式,都是ARM規定好,OS的內存管理模塊在內存中創建頁表的時候,就要按照這個格式填充數據,方便MMU進行遍歷和訪問。這里我們舉一個頁描述符的格式供大家參考,如圖1-2所示。

1-2

圖1-2 VMSA頁描述符

有了這些描述符之后,OS軟件就可以通過級聯的方式將它們關聯到一起。這里面就有一個問題了,怎么關聯,是串聯還是并聯還是串并聯。ARM采用的是多級頁表級聯的方式組織頁表架構,如圖1-3所示。
1-2

圖1-3 VMSA Stage-1多級頁表架構

采用這種多級頁表架構的重要原因是現代處理器的地址空間實在是太大了。如果采用單級頁表,在64bit空間下,光是存儲頁表的要消耗的內存空間就非常恐怖,這個我們前面算了一筆細賬,大家可以自行閱讀了解相關的背景。采多級頁表架構后,這種情況就得到了很大的改善,輔之以OS軟件管理模塊的幫助,可以大大的節約管理數據所消耗的內存。當CPU拿到虛擬地址后,在MMU的幫助下可以快速的遍歷多級頁表從而找到物理地址,進而發起訪問物理地址空間的操作。當然,現代處理器的肯定要越快越好,那么Cache機制和TLBs的機制的運用會大大提高地址翻譯的效率。
對MMU的頁表相關回顧就到這里,相信大家已經有了一定的感覺了,下面我們進入SMMU頁表的世界。

1.2 SMMU的使用場景

前面的章節,我們

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

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

相關文章

【UE5 “RuntimeLoadFbx”插件】運行時加載FBX模型

前言 為了解決在Runtime時能夠直接根據FBX模型路徑直接加載FBX的問題,推薦一款名為“RuntimeLoadFBX”的插件。 用法 插件用法如下,只需要指定fbx的地址就可以在場景中生成Actor模型 通過指定輸入參數“Cal Collision”來設置FBX模型的碰撞 還可以通過…

(11)(3.1) ESC接地和接線注意事項

文章目錄 前言 1 歸納 2 電容式 3 電阻 前言 ESC 接地問題由 3 種形式的 ESC 信號/耦合問題組成,即電阻、電容和電感。在制造飛機時,應考慮這三個因素。 1 歸納 這是電流突然變化導致系統中出現大電壓尖峰的趨勢。電源系統中的電感主要是由 ESC 和…

精品基于Python實現的微信小程序校園導航系統-微信小程序

[含文檔PPT源碼等] [包運行成功永久免費答疑輔導] 《django微信小程序校園導航系統》該項目采用技術Python的django框架、mysql數據庫 ,項目含有源碼、文檔、PPT、配套開發軟件、軟件安裝教程、項目發布教程、核心代碼介紹視頻等 軟件開發環境及開發工具&#xf…

Rstudio-server的安裝、配置、維護

一、安裝Rstudio-server (1)安裝R語言: sudo apt install r-base # 如果沒有管理員權限無法操作 # 這樣裝上R默認在/usr/bin/R其實基本上的流程都可以參考posit的官網(也就是Rstudio的官網): https://posit.co/download/rstudio…

Python序列的應用(八):元組、字典

前言:在Python編程語言中,序列是一種非常重要的數據結構,它允許我們存儲和操作有序的數據集合。在前幾期的內容中,我們已經探討了列表(List)和集合(Set)這兩種序列的應用&#xff0c…

OpenCV 功能函數介紹

一, 二值化函數 功能: 用于對圖像進行二值化處理 參數: cv2.threshold(輸入你的圖像所對應的灰度圖, 閾值:是浮點還是整數取決予圖像的數據類型 最大值;高于閾值的像素值, 閾值類型:cv2.THR…

【Python】使用Selenium的find_element模塊獲取網頁上的大段文字和表格的方法(建議收藏!)

發現了一個使用Selenium的find_element模塊,快速獲取文字和表格的方法,很實在,以后爬網的時候,就不用beautifulSoup 和 pandas的read_html 混起來用了! 文字部分:實現網絡節點下,某個節點下的其…

APP滲透測試記錄(一、Android應用基本構造)

Android應用基本構造 雷電模擬機進入 adb shell# 如果不是root權限 su一下 su 1.了解APK文件 安卓應用的擴展名為.apk(Android Application Package),它是一個包含多個文件和文件夾的數據存檔文件。 1.1 apk文件解壓后的目錄結構 AndroidManifest.xml:包含應用的大部分…

【AI知識】有監督學習之回歸任務(附線性回歸代碼及可視化)

1. 回歸的基本概念 在機器學習的有監督學習中,回歸(Regression)是一種常見的任務,它的目標是通過觀察數據來建立一個模型,用一個或多個自變量來預測因變量的值。 回歸分析通常用于: a.預測,基于…

fastadmin批量壓縮下載遠程視頻文件

后端代碼 // 批量下載并壓縮 public function downloadAll(){$ids input(ids);$row $this->model->where(id, in, $ids)->field(id,title,video_url)->select();if (!$row) {$this->error(記錄不存在);}$arr [];$tempFiles []; // 用來存儲臨時下載的視頻文…

邊緣計算+人工智能:讓設備更聰明的秘密

引言:日常生活中的“智能”設備 你是否發現,身邊的設備正變得越來越“聰明”? 早上醒來時,智能音箱已經根據你的日程播放舒緩音樂;走進廚房,智能冰箱提醒你今天的食材庫存;而在城市道路上&…

JVM 雙親委派模型以及垃圾回收機制

目錄 1. JVM 內存區域劃分 2. JVM 中類加載的過程 1) 類加載的基本流程 2) 雙親委派模型 3. JVM 中垃圾回收機制 1) 找到垃圾 a) 引用計數 b) 可達性分析 2) 釋放垃圾 1. JVM 內存區域劃分 一個運行起來的 Java 進程,其實就是一個 JVM 虛擬機。 而進程是…

ansible自動化運維(四)jinjia2模板

Jinjia2模板 前面說到playbook組成的時候,有介紹到template模塊,而template模塊對模板文件進行渲染時,使用的就是jinja2模板引擎,jinja2本身就是基于python的模板引擎,所以下面先來了解一下jinjia2模板的一些用法 基…

通過k-means對相似度較高的語句進行分類

本文介紹了如何使用K-Means算法對相似度較高的語句進行分類,并附上java案例代碼 import java.util.ArrayList; import java.util.List; import java.util.Random;public class KMeansTextClustering {public static void main(String[] args) {// 初始化語句數據集…

Oracle 19c rac 補丁升級,從19.7 to19.22-集群

1. 補丁包概述 數據庫環境 角色 數據庫 IP地址 數據庫版本 主機名 數據庫名稱 源端 RAC 172.30.21.166/167 19.7 hfcwdb66/hfcwdb67 hfdb 將以下補丁包上傳到/soft下 上傳到兩個節點的soft目錄下:p6880880_190000_Linux-x86-64.zip (更新o…

Windows安裝Jira

下載 Download Jira Data Center | Atlassian https://product-downloads.atlassian.com/software/jira/downloads/atlassian-jira-software-10.3.0-x64.exe 以管理員身份安裝,否則彈出以下提醒 創建和配置MySQL數據庫:參照 Connecting Jira applicat…

uniapp - 微信小程序

一、background-image 大圖不顯示的問題 解決方法: 1、使用網絡地址;2、使用 base64 urlTobase64(filePath) {// #ifdef MP-WEIXINlet img ${filePath},imgBase64 wx.getFileSystemManager().readFileSync(img, "base64"),base64Url data:…

DETR: End-to-End Object Detection with Transformers論文學習

論文地址:https://arxiv.org/pdf/2005.12872 代碼地址:https://github.com/facebookresearch/detr 相關學習視頻:https://space.bilibili.com/94779326/lists?sid1531941 標題前言: DETR 是 Facebook 團隊于 2020 年提出的基于…

LeetCode 24反轉鏈表

單鏈表反轉:詳細解析與代碼實現 在數據結構的學習過程中,鏈表是一個非常重要且有趣的部分,而單鏈表的反轉操作更是常考的基礎知識點。今天就來和大家詳細講講如何實現單鏈表的反轉,并通過代碼示例來加深理解呀。 題目 給定單鏈…

Redis學習筆記之——學習計劃

Redis——Remote Dictionary Server,開源、基于內存、速度快、key-value... Redis做為一個高性能的鍵值存儲系統,廣泛應用于緩存、會話存儲、分布式鎖以及其他需要快速訪問的數據場景中。熟悉掌握redis,似乎已成為廣大碼農們必備的一項技能。…