6. Memory management

内存管理单元(MMU)将输入地址转换为输出地址。这种转换基于在Cortex®-A715核心内部寄存器和转换表中可用的地址映射和内存属性信息。MMU还控制每个内存区域的内存访问权限、内存属性和缓存策略。
从输入地址到输出地址的地址转换被描述为地址转换的一个阶段。Cortex®-A715核心可以执行以下操作:
- 第1阶段转换,将输入虚拟地址(VA)转换为输出物理地址(PA)或中间物理地址(IPA)。
- 第2阶段转换,将输入IPA转换为输出PA。
- 组合的第1阶段和第2阶段转换,将输入VA转换为IPA,然后将该IPA转换为输出PA。Cortex®-A715核心对每个转换阶段执行转换表遍历。
除了将输入地址转换为输出地址,地址转换的一个阶段还定义了输出地址的内存属性。对于两个阶段的转换,第2阶段的转换可以修改第1阶段转换定义的属性。地址转换的一阶段可以被禁用或绕过,并且核心可以为禁用和绕过的转换阶段定义内存属性。
每个地址转换阶段使用存储在内存映射转换表中的地址转换和相关内存属性。转换表项可以缓存在TLB(Translation Lookaside Buffer)中。转换表项使得MMU能够提供细粒度的内存系统控制,并控制表遍历硬件。
有关虚拟内存系统体系结构(VMSA)的更多信息,请参阅Arm® Architecture Reference Manual for A-profile architecture。
6.1 Memory Management Unit components
Cortex®‑A715核心的内存管理单元(MMU)包括多个Translation Lookaside Buffers (TLBs)、一个L2 TLB和一个转换表预取器。 TLB是MMU内部存储最近执行的页转换的缓存。Cortex®‑A715核心采用了两级TLB结构。L2 TLB存储所有页面大小,并在L1数据TLB或L1指令TLB需要时将这些页面分割成较小的页面。 下表描述了MMU的组件。

TLB条目包含以下内容:
• 全局指示器和地址空间标识符(ASID),允许在上下文切换时无需使TLB失效
• 虚拟机标识符(VMID),允许虚拟化管理程序(hypervisor)进行虚拟机切换,而无需使TLB失效
L1指令TLB的命中可以在一个时钟周期内访问转换,并将物理地址(PA)返回给指令缓存进行比较。它还检查访问权限,以发出指令异常信号。
L1数据TLB的命中可以在一个时钟周期内访问转换,并将物理地址(PA)返回给数据缓存进行比较。它也检查访问权限,以发出数据异常信号。
在L1数据TLB中未命中但在L2 TLB中命中的情况下,与L1数据TLB中的命中相比,会有5个时钟周期的延迟。根据待处理请求的仲裁,这个延迟可能会增加。
6.2 TLB entry content    //TLB条目的内容
转换查找缓冲区(TLB)条目存储所需的上下文信息,以便进行匹配并避免在上下文或虚拟机切换时需要进行TLB清理。
每个TLB条目包含以下内容:
• 虚拟地址(VA)
• 物理地址(PA)
• 一组内存属性,包括类型和访问权限
每个TLB条目与以下之一相关联:
• 特定的地址空间标识符(ASID)
• 全局指示器
每个TLB条目还包含一个字段,用于存储适用于从EL0和EL1进行访问的虚拟机标识符(VMID)。VMID允许hypervisor进行虚拟机切换,而无需使TLB失效。
相关信息
第54页的6.4节“转换表遍历”
6.3 TLB match process    //TLB匹配过程
Armv8-A架构支持多个以不同方式进行转换的虚拟地址(VA)空间。
每个转译查找缓冲区(TLB)条目与特定的转换方案相关联:
• 安全EL3
• 安全EL2
• 安全EL2和EL0
• 非安全EL2
• 非安全EL2和EL0
• 安全EL1和EL0
• 非安全EL1和EL0
当满足以下条件时,将发生TLB匹配条目:
• 其VA[48:N],其中N是存储在TLB条目中的该转换的块大小的log2,与请求的地址匹配。
• 条目的转换方案与当前的转换方案匹配。
• 地址空间标识符(ASID)与与目标转换方案相关联的TTBR0_ELx或TTBR1_ELx寄存器中保存的当前ASID匹配,或者该条目被标记为全局。
• 虚拟机标识符(VMID)与VTTBR_EL2寄存器中保存的当前VMID匹配。
ASID信息用于以下条目的TLB匹配:
• 使用安全EL1&0和非安全EL1&0的转换方案
• 使用安全EL2&0和非安全EL2&0的转换方案
VMID信息用于以下条目的TLB匹配:
• 当启用EL2时,使用安全EL1&0和非安全EL1&0的转换方案。
6.4 Translation table walks    //转换表遍历
当Cortex®-A715核心生成内存访问时,内存管理单元(MMU)会在转译查找缓冲区(TLB)中搜索所请求的虚拟地址(VA)。如果不存在,则会发生缺失,此时MMU会继续在转译表遍历过程中查找。
当Cortex®-A715核心生成内存访问时,MMU会执行以下操作:
1. 在相关的指令或数据L1 TLB中对请求的VA、当前地址空间标识符(ASID)、当前虚拟机标识符(VMID)和当前转换方案进行查找。
2. 如果相关的L1 TLB中没有命中,那么MMU会在L2 TLB中对请求的VA、当前ASID、当前VMID和转换方案进行查找。
3. 如果L2 TLB中也没有命中,那么MMU会进行硬件转换表遍历。
只有在启用MMU时才执行地址转换。可以针对特定的转换基址寄存器禁用MMU,这种情况下MMU会返回一个转换错误。
您可以编程设置MMU使转换表遍历生成的访问可缓存。这意味着转换表条目可以缓存在L2缓存、L3缓存和外部缓存中。
在查找或转换表行走过程中,匹配的转换表条目中的访问权限位确定访问是否被允许。如果权限检查违反了规定,那么MMU会返回一个权限错误。有关更多信息,请参阅Arm®架构参考手册Armv8-A架构配置文件。
下图显示了TLB查找过程。

在转换表遍历过程中,描述符从L2缓存或外部存储系统中获取。
6.5 Hardware management of the Access flag and dirty state    //访问标志(Access Flag)和脏位(Dirty State)的硬件管理
该核心包括执行对转换表进行硬件更新的选项。
这个功能在TCR_ELx(其中x为1-3)和VTCR_EL2中启用。为了支持脏位的硬件管理,转换表描述符中包含了Dirty Bit Modifier (DBM)字段。
Cortex®-A715核心仅在转换表存储在Inner Write-Back和Outer Write-Back Normal内存区域时支持对访问标志和脏位的硬件更新。
如果软件在非Inner Write-Back或Outer Write-Back Normal内存区域请求进行硬件更新,则Cortex®-A715核心返回以下编码的中止信息:
• 对于数据中止,ESR_ELx.DFSC = 0b110001
• 对于指令中止,ESR_ELx.IFSC = 0b110001
6.6 Responses
在某些故障和中止情况下,由于内存访问,可能会触发异常。
MMU响应
当完成以下操作之一时,内存管理单元(MMU)会向请求方生成一个转换响应:
• L1指令或数据转译查找缓冲器(TLB)命中
• L2 TLB命中
• 转换表遍历
从MMU返回的响应包含以下信息:
• 对应于转换的物理地址(PA)
• 一组权限
• 安全状态或非安全状态信息
• 报告中止所需的所有信息
MMU中止
MMU可以检测与地址转换相关的故障,并可能导致异常传递到核心。这些故障可能包括地址大小故障、翻译故障、访问标志故障和权限故障。
外部中止
外部中止发生在内存系统中,与MMU检测到的中止不同。
通常情况下,外部内存中止很少发生。外部中止由外部内存接口标记的错误或L1数据缓存或L2缓存数组中未纠正的纠错码(ECC)错误引起。
当发生以下情况时,同步地报告外部中止:
• 用于指令获取、加载和存储的转换表行走
• 将操作加载到内部写回、外部写回正常可缓存内存
在Fault Address Register(FAR)中捕获的地址是生成同步外部中止的指令的目标地址。
异步地报告外部中止发生在以下情况下:
• 在不是由转换表行走引起的情况下,将加载操作应用于除内部写回、外部写回正常内存之外的所有内存位置
• 对任何内存类型进行存储操作
• 缓存维护、TLB使失效和指令缓存使失效操作
• 包括AtomicLd、AtomicSt、AtomicCAS和AtomicSwap在内的原子操作
错误编程的连续提示
在出现错误编程的连续提示情况下,当存在一个包含置位CH位的描述符时,输入的虚拟地址(VA)地址空间必须包括此块中的所有连续VA。
VA地址空间由以下因素定义:
• 阶段1翻译:TCR_ELx.TxSZ
• 阶段2翻译:VTCR_EL2.T0SX
Cortex®‑A715核心将此类块视为不会引起翻译错误,并忽略连续位的值。
冲突中止
Cortex®‑A715核心不会生成冲突中止异常。
当在L1 TLB或L2 TLB中检测到TLB冲突时,硬件会自动处理冲突,通过使冲突条目无效来解决冲突。
6.7 Memory behavior and supported memory types
Cortex®‑A715核心支持Armv8-A架构中定义的内存类型。 设备内存类型具有以下属性:
G – Gathering(聚合) 
将多个请求聚合并合并为单个事务的能力 
R – Reordering(重排序) 
对事务进行重排序的能力 
E – Early Write Acknowledgement(提前写入确认) 
接受来自互联的写入事务的提前确认的能力 
在下表中,前缀n表示不允许该能力。 
以下表格显示了Cortex®‑A715核心中支持的内存类型。

下表显示了对于特定的Normal内存,如何处理共享性(shareability)。

6.8 Page-based hardware attributes
Page-Based Hardware Attributes (PBHA)是一个可选的、实现定义的特性。它允许软件在转换表中设置最多四个位,然后通过内存系统传播这些位,并可用于控制系统组件。这些位的含义特定于系统设计。
要了解如何在转换表中设置和启用PBHA位,请参阅Arm® A型架构参考手册。当禁用时,总线上传播的PBHA值为0。
对于由转换表遍历引起的内存访问,ATCR和AVTCR寄存器控制PBHA值。
在内存访问中,stage 1和stage 2之间的PBHA组合
PBHA应始终被视为物理地址的属性。
当同时启用stage 1和stage 2时:
- 如果stage 1 PBHA和stage 2 PBHA都启用,则最终的PBHA是stage 2 PBHA。
- 如果stage 1 PBHA启用且stage 2 PBHA禁用,则最终的PBHA是stage 1 PBHA。
- 如果stage 1 PBHA禁用且stage 2 PBHA启用,则最终的PBHA是stage 2 PBHA。
- 如果stage 1 PBHA和stage 2 PBHA都禁用,则最终的PBHA被定义为0。
启用PBHA的粒度是一位,因此该属性独立地应用于每个PBHA位。
不匹配的别名
如果通过多个虚拟地址映射访问相同的物理地址,并且这些映射中的PBHA位不同,则结果是不可预测的。总线上传播的PBHA值可以是任一映射的值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
memory_management ntoskrnl.exe 是一种常见的蓝屏(BSOD)错误,通常与内存管理有关。"ntoskrnl.exe" 是指 Windows 操作系统内核,它负责管理系统的内存、进程和设备驱动程序。 出现 memory_management ntoskrnl.exe 错误通常表明系统在进行内存管理时发生了一些问题。这可能是由于以下原因之一导致的: 1. 内存问题:系统中的某个硬件故障或内存模块错误可能导致内存管理错误。此时,建议进行内存测试,可以使用 Windows 内置的记忆体诊断工具或第三方可靠的内存测试软件。 2. 驱动程序问题:某个驱动程序可能与内存管理不兼容,导致出现该错误。可以尝试升级或回滚一些最新更新的驱动程序,以解决潜在的驱动程序冲突。 3. 恶意软件感染:某些恶意软件也可能引起内存管理错误。建议进行彻底的病毒扫描,并确保您的系统受到最新的安全性更新保护。 4. 系统配置问题:某些系统配置可能与内存管理不兼容,例如过度超频或不稳定的 BIOS 设置。在出现错误之前对系统进行任何更改,请确保这些更改不会干扰内存管理。 为了解决此问题,您可以尝试以下步骤: 1. 运行内存测试:使用内置的记忆体诊断工具或第三方可靠的内存测试软件,测试您的内存模块是否存在问题。 2. 更新或回滚驱动程序:检查您的系统中的驱动程序是否需要更新,并确保它们与您的操作系统兼容。如果最近更新了某个驱动程序,请尝试回滚驱动程序以查看问题是否得到解决。 3. 扫描系统以查找恶意软件:运行最新版本的病毒扫描程序,确保您的系统没有被恶意软件感染。 4. 恢复默认系统配置:如果您最近更改了系统的某些设置,请尝试将它们还原为默认值,以消除可能的配置问题。 如果以上步骤无法解决内存管理问题,建议咨询专业技术人员以获取更深入的分析和解决方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值