[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模型的碰撞 还可以通过…

精品基于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 混起来用了! 文字部分:实现网络节点下,某个节点下的其…

【AI知识】有监督学习之回归任务(附线性回归代码及可视化)

1. 回归的基本概念 在机器学习的有监督学习中,回归(Regression)是一种常见的任务,它的目标是通过观察数据来建立一个模型,用一个或多个自变量来预测因变量的值。 回归分析通常用于: a.预测,基于…

边缘计算+人工智能:让设备更聪明的秘密

引言:日常生活中的“智能”设备 你是否发现,身边的设备正变得越来越“聪明”? 早上醒来时,智能音箱已经根据你的日程播放舒缓音乐;走进厨房,智能冰箱提醒你今天的食材库存;而在城市道路上&…

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模板的一些用法 基…

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 年提出的基于…

Vue3状态管理:Pinia架构设计分析

Vue3状态管理:Pinia架构设计分析 介绍 在Vue.js开发中,状态管理是一个非常重要的部分。随着Vue3的发布,Pinia作为一种新的状态管理架构也相继问世。本文将对Pinia架构进行深入分析,帮助读者了解其设计原理、特点以及在实际项目中的应用。 架构…

【IDEA】启动报错

今天启动IDEA报错 报错信息: Cannot connect to already running IDE instance. Exception: Process 5,444 is still running 打开任务管理器,关掉进程ID5444的任务

socket编程UDP-实现停等机制(接收确认、超时重传)

在下面博客中,我介绍了利用UDP模拟TCP连接、按数据包发送文件的过程,并附上完整源码。 socket编程UDP-文件传输&模拟TCP建立连接脱离连接(进阶篇)_udp socket发送-CSDN博客 下面博客实现的是滑动窗口机制: sock…

python xpath解析笔记

与bs4的区别 bs4有很多属性和方法,而xpath只有一个方法,是通过不同的xpath表达式实现很多功能的。 html例子 定位 tree.xpath(‘/html/head/title’) 返回列表。 开头的斜杠表示从根节点遍历。 中间的斜杠表示层级。(相当于bs4中的>…

Q学习(Q-Learning)详解

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

树状数组详解

概述 树状数组(Binary Indexed Tree,简称BIT),是一种数据结构,用于处理区间查询和更新问题。它是一种可以高效地在对数级别时间复杂度内进行单点更新和区间查询的数据结构。树状数组通常用于解决以下两类问题&#xf…

freeswitch(开启支持MCU视频会议,使用mod_av模块)

亲测版本centos 7.9系统–》 freeswitch1.10.9 本人freeswitch安装路径(根据自己的路径进入) /usr/local/freeswitch/etc/freeswitch场景说明: 有些场景想使用视频会议MCU融合画面进行开会使用方法: 第一步:下载插件 yum install -y epel-release yum install