[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.mzph.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,似乎已成为广大码农们必备的一项技能。…