ARM 体系结构之 MMU 中的地址转换过程

本文深入探讨了ARM体系结构中的MMU地址转换过程,包括转换表查找、段地址转换和页表转换(粗页与细页二级页表)。详细阐述了各级页表描述符的类型和作用,以及地址转换涉及的术语和优化策略。通过对转换表基址寄存器的解析,解释了一级和二级页表在地址映射中的角色,特别是不同页类型的寻址细节。
摘要由CSDN通过智能技术生成

由于定题是 MMU的地址转换过程,这里就不再叙述 MMU 的基本概念、内存访问顺序和使能和禁止 MMU(Enabling and disabling the MMU)等内容。

本文主要参考 ARM Architecture Reference ManualChapter B3 以及校内课件。

前言

The process of doing a full translation table lookup is known as a translation table walk. It is performed automatically by hardware, and has a significant execution time cost (at least one main memory access, and often two). To reduce the average cost of a memory access, the results of translation table walks are cached in one or more structures known as Translation Lookaside Buffers (TLBs).

这一部分主要是介绍一下整个转换过程的术语以及优化方案,好对整个体系有个粗略的了解。其中的Walk的理解到后面就会慢慢有体会了。

预备知识

MMU支持基于段和页的内存访问
在这里插入图片描述

MMU的地址转换过程通过两级页表实现:

  • 一级页表:包含段(section)描述符、粗页(coarse)描述符和细页(fine)描述符。以段为单位的地址转换只需要一级页表。
  • 二级页表:有粗页和细页两种形式。包含大页、小页和极小页的描述符。以页为单位的地址转换需要二级页表。
    在这里插入图片描述

地址转换的方式有两大类共四种情况:

  • section-mapped acces
  • page-mapped access
    • A page-mapped access can be a large, small, or tiny page access.

转换过程开始都是差不多的:
在这里插入图片描述

转换表基址

由于上述提到的二级页表的功能就是帮助我们将虚拟地址映射为物理地址,所以我们可能会好奇我们是怎么访问到该二级页表的。一个叫做 转换表基址寄存器 ( Translation Table Base Register ,CP15 register 2 )存放一级页表的基地址,该寄存器共32位,但是只有高18位是有效的,其余位应该为0。

获取一级页表

上面一小节我们提到一级页表的基址是由CP15的寄存器2的高18位来指定的。但是,我们知道只有基址还是远远不够的,我们还需要偏移地址来指明一级页表的位置。这个偏移量是由虚拟地址的高12位提供。更近一步的,我们需要两个0添加到末尾来表示字对齐。这样,我们就得到了一个32位用来表示一级页表位置的物理地址。

一级页表地址的形成
= 一级页表基地址(18位) + 一级页表偏移量(12位) + 00(字对齐) 
= CP15-C2 高18位 + 虚地址高12位  + 00

在这里插入图片描述
图中的SBZshould be zero 的缩写。

一级页表描述符

Each entry in the first-level table is a descriptor of how its associated 1MB virtual address range is mapped.

提问:这里的 1MB的虚拟地址 指的是什么?

一级页表描述符的种类是啥是由其低2位决定:

  • 低两位为00:无效
  • 低两位为10:页表项为段描述符
  • 低两位为01:页表项给出粗页二级页表(coarse second-level table )的物理地址
  • 低两位为10:页表项给出细页二级页表(fine second-level table)的物理地址
    在这里插入图片描述

图中的 Each type of table specifies how the associated 1MB virtual address range is mapped. Co

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值