ARM SMMUv3简介(一)

1.概述

SMMU(System Memory Management Unit,系统内存管理单元)是ARM架构中用于管理设备访问系统内存的硬件模块。SMMU和MMU的功能类似,都是将虚拟地址转换成物理地址,不同的是MMU转换的虚拟地址来自CPU,SMMU转换的虚拟地址来自Device(比如DMA、PCIe等)。SMMU有以下特点:

  1. 起到地址隔离作用。DMA只能访问页表中的地址,非法地址将会被拦截。
  2. 支持设备使用连续虚拟地址访问离散物理地址,消除了传统DMA直接访问物理内存要求地址连续的限制,以及32位DMA访问4GB地址空间的限制。
  3. 支持设备共享CPU虚拟地址(IOVA=VA)空间。
  4. 在虚拟化环境中,SMMU可以为虚拟机中的设备提供地址转换和隔离,确保虚拟机之间的内存安全。

SMMU简介

如下所示,在支持虚拟化的环境中,SMMU支持2阶段地址转换,第一阶段把IOVA转换成IPA,第二阶段把IPA转换成PA,两阶段都可以设置成Bypass,即不做地址转换。若不支持虚拟化,则SMMU只做第一阶段地址转换,即把IOVA直接转换成PA。

SMMU地址转换示意图

2.内部结构

  1. 两个SMMU的功能相互独立。下图中一个SMMU负责转换普通设备的DMA请求地址,另一个SMMU负责转换PCIe设备的DMA请求地址。
  2. SMMU位于设备请求端和设备互联组件之间,多个SMMU通常都是并行放置,一个SMMU到内存的路径不经过另外一个SMMU。
  3. 由于SMMU负责地址转换和权限检查等,因此设置SMMU的软件必须运行再特权级别下,如EL1、EL2。
  4. SMMU与I/O设备缓存一致性:
    • SMMU与总线的接口支持I/O一致性协议(如ACE或CHI),确保设备访问内存时自动处理缓存一致性。
    • 设备发起的请求(如DMA写)不需要额外的一致性支持,SMMU会自动处理。
    • SMMU不转换系统到设备方向的请求地址,因此窥探流量不能从系统转发到SMMU后面的设备,因此不能将完全一致性设备缓存放置在SMMU后面(这类设备缓存必须直接连接一致性总线)。

SMMU结构

3.布局形式

  1. SMMU A嵌入到一个复杂设备中,属于设备的一部分,只为该设备提供地址转换和权限检查服务。通常情况下,这种SMMU的实现形式,有无竞争且专用的地址转换模块和TLB。
  2. SMMU B是一个的完整的模块,其集成了地址转换、编程接口及页表遍历功能。两个客户端设备将SMMU B作为DMA访问系统的路径。
  3. SMMU C 采用分布式设计,为多个不同的设备提供地址转换及访问权限检查等功能,从而实现更高带宽。其包括:
    1. 一个中央页表遍历器( central translation table walker),该模块拥有独立的请求端接口,用于获取页表结构、配置结构及队列;同时配备完成端接口,用于接收编程访问。此单元可能包含一个macro-TLB及配置缓存。
    2. 远端TLB单元在发生miss时,会向中央页表遍历器发起转换请求,并将结果缓存于本地。图中所示的两个TLB单元,第一个通过一个端口支持一组(三个)设备;第二个连接PCIe Root Complex,同时还向RC提供了ATS(用于处理EP发起地址转换的请求)接口。
  4. 智能设备中嵌入了一个TLB单元,但复用SMMU C的页表遍历器,这样可以减少设备的复杂度。

布局

4.地址转换流程

设备发起一次DMA请求,会把StreamID、SubstreamID和VA信息输入到SMMU,SMMU利用这些信息将IOVA转换成PA。

  1. 首先使用StreamID查找Stream Table,获取设备对应的Stream Table Entry (STE),STE里面保存了设备页表的配置信息、VMID及下一级Context Descriptor (CD)的基地址。
  2. 接着使用SubstreamID查找CD表。CD里面保存了SMMU页表的基地址、ASID等信息。
  3. 若页表TLB命中,则直接使用缓存的页表转换地址,否则从内存中查找页表,并填充TLB。
  4. 利用SMMU的页表,将IOVA转换成PA。
  5. 若是虚拟化环境,此时转换后的地址是IPA,需要利用StreamID进行第二级地址转换,最终得到PA。

地址转换流程示意图

参考资料

  1. Arm ® System Memory Management Unit Architecture Specification version 3.
资源下载链接为: https://pan.quark.cn/s/ddc62c5d4a5d Windows Mobile 是微软在 0200 年代至 2010 年代初推出的移动操作系统,曾广泛应用于智能手机和平板电脑。开发者可以借助各种库和框架为其开发功能丰富的应用,其中 “32feet.NET” 是个开源的 .NET 库,专为 .NET Framework 和 .NET Compact Framework 提供蓝牙开发支持。它包含多个命名空间,例如 InTheHand.Devices.Bluetooth、InTheHand.Net.Personal 和 InTheHand.Phone.Bluetooth,用于实现蓝牙设备交互功能。 InTheHand.Devices.Bluetooth 命名空间用于执行基础蓝牙操作,比如扫描附近设备、建立连接以及发现蓝牙服务等。InTheHand.Net.Personal 提供了更高级的功能,例如创建个人区域网络(PAN)、文件传输和串行端口模拟,便于开发者开发跨设备的数据共享应用。而 InTheHand.Phone.Bluetooth 主要针对 Windows Phone 平台,支持蓝牙配对、消息收发和蓝牙耳机控制等功能,不过由于 Windows Mobile 已停止更新,该命名空间更多适用于旧设备或项目。 压缩包中的文件列表看似是维基页面的渲染文件,可能是关于 32feet.NET 的使用教程、API 参考或示例代码。文件名如 13632.html、563803.html 等可能是页面 ID,涵盖蓝牙设备搜索、连接和数据传输等不同主题。 使用 32feet.NET 进行蓝牙开发时,开发者需要注意以下几点:首先,确保开发环境已安装 .NET Framework 或 .NET Compact Framework,以及 32feet.NET
资源下载链接为: https://pan.quark.cn/s/d8a2bf0af1ac Mask R-CNN 是种在实例分割任务中表现优异的深度学习模型,它融合了 Faster R-CNN 的目标检测功能和 CNN 的像素级分类能力,能够实现图像中每个目标的定位、识别与分割。本指南将指导你如何使用 Mask R-CNN 训练自定义数据集。 你需要准备包含图像(JPEG 或 PNG 格式)和标注文件(XML 或 JSON 格式)的数据集,标注文件需包含物体类别、坐标和掩模信息。数据集应按照 COCO 标准组织,分为训练集、验证集和可选的测试集。可以使用工具如 COCO API 或 labelme 将原始数据转换为 COCO 格式,并确保图像文件名与标注文件名致且在同目录下。通常按 8:2 或 9:1 的比例划分训练集和验证集。 从提供的压缩包中安装所需库。运行 pip install -r requirements.txt 安装依赖,包括 TensorFlow、Keras、Cython、COCO API 等。 修改 train_test.py 和 test_model.py 中的路径,使其指向你的数据集目录,确保 ROOT_DIR 指向数据集根目录,ANNOTATION_DIR 指向标注文件所在目录。在 config.py 中根据硬件资源和训练目标调整学习率、批大小、迭代次数等参数。 运行 train_test.py 开始训练。训练时会加载预训练权重并进行微调,期间会定期保存模型,便于评估和恢复。 使用 test_model.py 或 test.py 对模型进行验证和测试。这些脚本会加载保存的模型权重,将其应用于新图像并生成预测结果。 预测结果为二进制掩模,需进步处理为可读图像。可借助 COCO API 或自定义脚本将掩模合并到原始图像上,生成可视化结果。 若模型性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值