| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> ARM 内存管理翻译笔记 -> 正文阅读 |
|
[嵌入式]ARM 内存管理翻译笔记 |
参考文献: 1.《ARM Cortex-A(armV7)编程手册V4.0》 2.《ARM ArchitectureReference Manual ARMv7-A and ARMv7-R edition》 3.《深入理解Linux内核》 注意:尽量阅读原文ARM ArchitectureReference Manual ARMv7-A and ARMv7-R edition,作者只做了自己需要了解的部分的翻译。尽量避免断章取义。 1.Virtual Memory System Architecture (VMSA)虚拟内存系统架构B3.1 About the VMSA 关于VMSA????????在VMSAv7中,内存管理单元(MMU)控制地址转换、访问权限和内存属性的确定和检查,以及处理器进行的内存访问。MMU由系统控制寄存器控制,也可以禁用MMU。 ????????每个MMU使用一组地址转换和内存映射表中的相关内存属性。对于MMU,转换表定义了以下属性:
????????系统控制协处理器(CP15)寄存器控制VMSA,包括定义转换表的位置,以及启用和配mmu。此外,它们还会报告在内存访问过程中发生的任何故障。 ?B3.1.1 Address types used in a VMSA description VMSA介绍中用到的地址????????对VMSAv7的描述引用了以下地址类型: ? ? ? ? 虚拟地址:? 指令中使用的地址,作为数据或指令地址,是虚拟地址(VA)。PC、LR或SP中的地址是VA。VA映射从零运行到VA空间的大小。对于ARMv7,最大VA空间为4GB,最大VA范围为0x00000000-0xFFFFFFFF。 ? ? ? ? 中间物理地址:在提供两个地址转换阶段的转换中,IPA是第1阶段转换后的地址,也是第2阶段转换的输入地址。在只提供一个地址转换阶段的转换机制中,IPA与PA相同。 ????????在ARM VMSA实现中,只提供了一个地址转换的阶段:
B3.1.2 Address spaces in a VMSA implementation VMSA中的地址空间????????ARMv7体系结构支持:
????????备注:大型物理地址扩展程序定义了两种转换表格式。长描述符格式允许以4kb的粒度访问完整的40位IPA或PA地址空间。短描述符格式:
B3.1.3 About address translation 地址转换????????地址转换是将一种地址类型映射到另一种地址类型的过程,例如,将VAs映射到IPAs,或将VAs映射到PAs。转换表定义了从一种地址类型到另一种地址类型的映射。 ????????转换表基址寄存器表示转换表的开始。 ????????一个完整的转换表查找过程被称为转换表遍历。它是由硬件自动执行的,并且会耗费一些时间。为了完成VA到PA的映射,由于最小访问单位的原因,单个输入地址到输出地址的转换可能需要对转换表进行多次访问,每次访问都提供更小的访问单元。每次访问都被描述为一个地址查找级别。查找的最后一个级别定义了:
? ? ? ? 转换备用缓冲区(TLBs)通过缓存转换表遍历的结果,降低了内存访问的平均时间。TLBs表现为转换信息表的缓存,为了管理TLBs的内容,VMSA为TLBs提供了维护操作。 B3.3 Translation tables????????VMSAv7定义了两种可替代的转换表格式: ????????短描述符格式:不包含大型物理地址扩展的实现中唯一支持的格式。它在转换表中使用了32位的描述符条目,并提供了:
? ? ? ? 长描述符格式:大型物理地址扩展增加了对这种格式的支持。它在转化表中使用了64位的描述符条目,并提供了:
B3.3.2 Information returned by a translation table lookup 转换表遍历返回结果????????在VMSA实现中,当启用了关联的MMU时,内存访问需要一个或多个转换表查找。如果TLB中没有转换所需的转换表描述符,则执行转换表遍历以获取描述符。无论是从TLB还是作为转换表遍历的结果,都返回:
B3.5 Short-descriptor translation table format短描述符转换表格式????????短描述符转换表格式支持以内存段(memory sections)或内存页(memory pages)为基础的内存映射(笔记:section和page是内存单元的描述):
????????Supersections, Sections 和Large pages 映射内存的大区域,他们只使用一个TLB条目。
????????当使用段描述符转换表格式时,内存中保留两级转换表:
? ? ? ? 第一级转换表:包含基地址,Section和Supersection的转换属性,指向第二级表的Large page或者Small page的指针;
? ? ? ? 第二级转换表:包含基地址,Small page和Large page的转换属性,二级表需要1KB的内存,二级表也叫做页表(page table)
? ? ? ? 在转换表中,描述符可以是:
描述符的位[1:0]给出了描述符类型。 图B3-3给出了在使用短描述符转换表格式时的地址转换的一般视图。 图中说明了虚拟地址VA[31-N:20]包含了一级转换表的索引信息,VA[19:12]包含二级表(页表)的索引信息。 ?B3.5.1 Short-descriptor translation table format descriptors????????短描述符转换表的一级描述符格式 ????????第一级表中的每个条目都描述了关联的1MB 的MVA(修改后的虚拟地址)的映射。 ????????一种32位的描述符格式如下,最后两位bits[1:0]决定描述符类型,这两位为01时,描述符给出了一个二级转换表的地址,该表指定了关联的1MByte 的VA映射。 ?????????第一级描述符中的地址信息为: ?????????Page table :描述符的位Bits[31:10]是页(Page)地址的bits[31:10]位 ????????Section:描述符的位Bits[31:20]是节(Section)地址的bits[31:20]位
????????Supersection:描述符的位
Bits[31:24]是超级块(Supersection)地址的
bits[31:24]位
? ? ? ??????????
? ? ? ? 笔记:使用Section作为一级页表中的最小寻址单位时,共12位地址表示,也就是一级描述符将4GB的虚拟地址划分为 4096*1MB。
Short-descriptor translation table second-level descriptor formats
短描述符转换表的二级描述符格式
????????二级描述符中的地址信息为:
????????Large page:描述符的位
Bits[31:16]是大页(Large page)地址的
bits[31:16]位
????????Small page:描述符的位
Bits[31:12]是小页(Small?page)地址的
bits[31:12]位
·? ? ? ? 笔记:使用Small Page作为二级页表的最小寻址单位时,共20位地址表示,也就是2^20*4KB = 4GB
B3.5.2 Memory attributes in the Short-descriptor translation table format descriptorsB3.5.2短描述符转换表格式描述符中的内存属性????????本节描述除描述符类型字段和地址字段以外的描述符字段:
? ? ? ? ?
TEX[2:0], C, B? ? 内存区域属性位
?????????AP[2], AP[1:0]? ??访问权限位 B3.5.5 Translation table walks, when using the Short-descriptor translation table format3.5.5翻译表遍历时,使用短描述符转换表格式 Section(1MB)的转换流程 Small page的转换流程 ? ? |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 8:21:57- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |