您的位置 首页 基础

ARM存储办理体系MMU

一、虚拟地址和物理地址的区别CPU通过地址来访问内存中的单元,地址有虚拟地址和物理地址之分。如果CPU没有MMU(MemoryManagemen…

一、虚拟地址和物理地址的差异

CPU经过地址来拜访内存中的单元,地址有虚拟地址和物理地址之分。假如CPU没有MMU(Memory Management Unit,内存办理单元),或许有MMU但没有启用,CPU在拜访内存时宣布的地址将直接传送到地址总线上,使具有相同地址的物理存储器被读写。这称为物理地址(Physical Address,以下简称PA),如下图所示:

图1.物理地址示意图

假如CPU启用了MMU,CPU核宣布的地址将被MMU截获,从CPU到MMU的地址称为虚拟地址(Virtual Address,以下简称VA),而MMU将这个地址翻译成实在的物理地址发送到地址总线上,也便是将虚拟地址映射成物理地址,如下图所示:

图2.虚拟地址示意图

二、虚拟地址映射物理地址原理

页表是完结虚拟地址到物理地址转化的一个重要手法。咱们在运用MMU曾经,需求在内存中新建一个页表。表中的每一行(即一个字的巨细)寄存的是一个物理内存页的基地址,该页的拜访权限和缓冲特性等,这儿将页表中这样的一行称为一个地址改换条目。页表寄存在内存中,CP15的C2寄存器用来寄存页表的基地址。

大都运用虚拟存储器的体系都运用一种称为分页(paging)。虚拟地址空间区分红称为页(page)的单位。而相应的物理地址空间也被进行区分,单位是页框(frame).页和页框的巨细有必要相同。

虚拟地址被MMU分为两部分,,榜首部分是页号索引(page Index),第二部分则是相对该页首地址的偏移量(offset)

当CPU拜访一个地址时,该地址是虚拟地址,所以该地址被送到MMU,MMU再依据虚拟地址的高几位作为页号索引,在页表中寻觅对应的地址改换条目。从地址改换条目中找到物理地址的页基地址,再加上虚拟地址中的偏移量,便得到了实在的物理地址,然后由MMU将物理地址发送到地址总线上,拜访物理内存。

那么MMU是怎样运用页号索引在页表中找到对应的地址改换条目呢?MMU会用CP15协处理其间的C2寄存器寄存的页表基地址加上虚拟地址的页号索引值,然后便得到了页表中对应的地址改换条目的地址。其实页号索引便是相关于页表基地址的一个偏移量,然后运用基地址加偏移量的方法得到一个页表中的地址。

例:如图所示,假如分页巨细为1M,虚拟地址为0x30000012,

虚拟地址的二进制码为00110000 00000000 00000000 00010010 前12位为页号索引,后20位为偏移量,由于2^20 = 1M

前12位页号索引为00110000 0000 = 768,所以在页表中找到相关于页表基地址的偏移量为768的地址,然后得到地址改换条目。所以0x0300 << 20位,便得到了物理页基地址,再加上虚拟地址中的偏移位0000 00000000 00010010 = 0x12,便得到了实在的物理地址0x30000012。


1、TLB的概念

从虚拟地址到物理地址的改换进程其实便是查询页表的进程,由于页表寄存在内存中,这个查询进程一般价值很大。而程序在履行进程中具有局部性,也便是说,一段时间内,对页表的拜访仅仅限制在少量几个单元中。依据这个特色,选用一个容量更小、拜访速度更快的存储器来寄存当时拜访需求的地址改换条目。这个小容量的页表称为快表,也称TLB.

当CPU拜访内存时,现在TLB中查找需求的地址改换条目。假如该条目不存在,CPU从坐落内存的页表中查询,并把相应的成果添加到TLB中。这样,当CPU下一次又需求该地址改换条目时,能够从TLB中直接得到,然后使地址改换的速度大大加速。

当内存中的页表内容改动,或许经过修正CP15中的寄存器C2运用新的页表时,TLB的内容需求悉数铲除。MMU供给了相关的硬件支撑这种操作。CP15中的寄存器C8用来 操控铲除TLB内容的相关操作。

MMU能够将某些地址改换条目确认在TLB中,然后使得进行与该地址改换条目相关的地址改换速度坚持很快。在MMU中C10用于操控TLB内容的确认。

注:TLB中寄存的是地址改换条目,相当于一个小页表。

  • 使无效TLB内容

当内存中的页表内容改动,或许经过修正协处理器CP15的寄存器来运用新的页表时,TLB中的内容需求悉数或许部分使无效。所谓使无效是指将TLB中的某个地址的地址改换条目表明成无效,然后在TLB中找不到该地址改换条目,而需求到内存页表中从头查找该地址改换条目。假如不进行TLB的使无效操作,或许形成同一个虚拟地址对应于不同的物理地址(TLB中保存的仍是旧的地址映射联系,而内存中的页表现已存了新的地址映射联系)。

有时候页表或许仅仅部分内容改动了,只影响了很少的地址映射联系,这种情况下,能够只使无效TLB对应的单个地址改换条目或许会进步体系功能。

体系协处理器CP15的寄存器C8便是铲除TLB内容的相关操作。它是一个只写的寄存器。

MCR p15,0,Rd,c8,CRm,opcode_2

Rd中为要写入C8寄存器的内容,CRm和opcode_2的不同组合决议指令履行的不同操作。

指令

Rd

意义

MCR p15, 0, Rd, c8, c5, 0

0

使无效整个指令TLB

MCR p15, 0, Rd, c8, c5, 1

虚拟地址

使无效指令TLB中的单个地址改换条目

MCR p15, 0, Rd, c8, c6, 0

0

使无效整个数据TLB

MCR p15, 0, Rd, c8, c6, 1

虚拟地址

使无效数据TLB中的单个地址改换条目

MCR p15, 0, , c8, c7, 0

0

使无效整个数据和指令TLB

MCR p15, 0, , c8, c7, 1

虚拟地址

使无效数据和指令TLB中的单个地址改换条目

  • 确认TLB的内容

2、存储拜访进程

a、使能MMU时的存储拜访进程。

ARM处理器恳求存储拜访时,首要在TLB中查找虚拟地址。假如体系中数据TLB和指令TLB是分隔的,在取指令时,从指令TLB查找相应的虚拟地址,关于其他内存拜访操作,从数据TLB中查找相应的虚拟地址。

假如虚拟地址对应的地址改换条目不在TLB中,CPU从坐落内存的页表中查询,并把相应的成果添加到TLB中。假如TLB现已满了,还需求依据必定的筛选算法进行替换。这样,当CPU下一次又需求该地址改换条目时,能够从TLB中直接得到,然后使地址改换的速度大大加速。

当得到了需求的地址改动条目今后,将进行以下操作

(1)得到该虚拟地址对应的物理地址
(2)依据条目中的C(cache)操控位和B(Bufferable)操控位决议是否缓存该内存拜访的成果

(3)依据存取权限操控位和域拜访操控位确认该内存拜访是否被答应。假如该内存拜访不被答应,CP15向ARM处理器陈述存储拜访间断。

(4)关于不答应缓存的存储拜访,运用进程(1)中得到的物理地址拜访内存。关于答应缓存的存储拜访,假如在cache射中,则疏忽物理地址;假如cache没有射中,运用进程(1)中得到的物理地址拜访内存,并把该块数据读取到cache中。
b、制止MMU时存储拜访进程
  • 制止MMU时,是否支撑cache和write buffer由各个具体芯片的规划确认。假如芯片规则制止MMU时制止cache和write buffer,则存储拜访将不考虑C、B操控位。假如芯片规则当制止MMU时能够使能cache和write buffer,则数据拜访时,C=0,B=0;指令读取时,假如运用分隔的TLB则C=1,假如运用一致的TLB则C=0;
  • 存储拜访不进行权限操控,MMU也不会发生存储拜访间断信号
  • 一切的物理地址和虚拟地址持平,即运用平板形式
c、制止/使能MMU时应留意的问题
  • 在使能MMU之前,要在内存中树立页号表,一起CP15中的各相关寄存器有必要完结初始化。
  • 假如运用的不是平板存储形式(物理地址和虚拟地址持平),在制止/使能MMU时,虚拟地址和物理地址的对应联系会发生改动,这时应该铲除cache中的当时地址改换条目
  • 假如完结制止/使能MMU的代码的物理地址和虚拟地址不相同,则制止/使能MMU时会形成很大费事,因而强烈建议完结制止/使能 MMU的代码的物理地址和虚拟地址最好相同
3、MMU中的地址改换进程
在ARM中,虚拟地址到物理地址的映射有两种方法,一级映射和二级映射。
  
  a、一级映射
当运用一级映射时,只会用到一张页表,咱们将它称为一级页表,用L1表明。一级映射时,虚拟空间被区分红段的单位,每段的巨细为1M。而相应的物理空间也被进行这样的区分,单位是段框,段和段框的巨细有必要相同。
所以,首要在内存中树立一张页表(这个页表由咱们自己树立),页表中的每一项寄存的是一个物理段基地址,该页的拜访权限和缓冲特性等。页表中每一项的巨细为4字节,所以每一项的地址是字对齐。咱们将页表中的每一格称为一个项。
  由于ARM的可寻址规模为4G,且虚拟空间的每段巨细为1M,所以如图所示,页表有4096个项。每一项对应一个段,每一项中寄存的是一个物理段基地址,该页的拜访权限和缓冲特性等。
虚拟地址被MMU分为两部分,榜首部分为页索引号(bits[31:20]),第二部分是相对物理地址的偏移量(bits[0:19])。
 所以当拜访一个地址时,此地址是虚拟地址。MMU会用协处理器CP15的C2寄存器中的页表基地址+页索引号便查到了页表中对应的一项,从页表中相应的项中找到物理段基地址,然后:物理段基地址 + 偏移量(这个是虚拟地址的第二部分) = 物理地址。
注:虚拟空间并不实在存在,仅仅为便利了解才这么说。
例:
CPU要拜访0x300008的地址,此地址为虚拟地址。MMU会依据页索引号(也便是0x3)找到相对页表基地址偏移量为0x3的项。这个项中的物理段基地址为0x006。
物理地址 = (0x006<<20)+0x8=0x600008 
 
一级页表中一项的具体内容如下表所示:
段基地址:也便是物理空间的段首地址,1M巨细对齐
AP:   拜访操控位Access Permission
域:    标明了当时段归于哪个域。Domain与AP合作运用,对拜访权限进行查看
C:    如下表所示
B:     如下表所示

bits[1:0]:

00:相应1M的虚拟空间并没有被映射到物理空间,因而拜访该存储空间将会发生地址改换失效信号,所以bits[31:2]的内容无效
10:这是一个一级映射的地址改换,所以存储的是要拜访的物理段基地址
01:这是一个二级映射的地址改换,所以存储的是粗粒度的二级页表的基地址(后边会讲)11:这是一个二级映射的地址改换,所以存储的是细粒度的二级页表的基地址(后边会讲)
域标明了当时段归于哪个域。然后该段便具有了和该域相同的拜访权限。
CP15的寄存器C3:

310

D15

D14

D13

D12

D11

D10

D9

D8

D7

D6

D5

D4

D3

D2

D1

D0

在CP15的C3寄存器中,区分了16个域,每个区域由两位构成,这两位阐明了当时内存的查看权限:
00:当时级别下,该内存区域不答应被拜访,任何的拜访都会引起一个domain fault,这时 AP位无效
01:当时级别下,该内存区域的拜访有必要合作该内存区域的段描述符中AP位进行权查看
10:保存状况(咱们最好不要填写该值,避免引起不能确认的问题)
11:当时级别下,对该内存区域的拜访都不进行权限查看。这时AP位无效
所以只有当相应域的编码为 01时,才会依据AP位和协处理器CP15中的C1寄存器的S,R位进行权限查看

 b、二级映射

当运用二级映射时,一级页表L1依然存在,可是一级页表中不再寄存物理段基地址了,而是寄存了二级页表的基地址,也便是二级页表的首地址。

  一级页表要表明4G的地址规模,总共4096项,每一项都表明1M的巨细。二级页表相当于对一级页表这1M的规模作更具体的区分,所以每个二级页表要表明1M的地址规模。

对这1M地址规模进行分页,有三种分法:
 大页:将这1M地址规模分红单位为64KB巨细
  小页:将这1M地址规模分红单位为4KB巨细
  极小页:将这1M地址规模分红单位为1KB巨细
注:二级页表分为两类:粗粒度的二级页表和细粒度的二级页表。
粗粒度的二级页表:
当二级页表为粗粒度时,一级页表中一项的内容如下表所示:
由于不论是一级页表仍是二级页表,页表中的每一项都是四个字节,所以页表中每一项的地址都是字对齐的,也便是最低两位的值都为0。所以由于粗粒度的二级页表的基地址为22位,而偏移量只能为8位,则粗粒度的二级页表中只能有256个项,巨细为1KB。而这256个项要表明1M巨细,所以粗粒度二级页表中的每个项要表明4KB的物理空间规模。

细粒度的二级页表:
当二级页表为细粒度时,一级页表中一项的内容如下表所示:
由于不论是一级页表仍是二级页表,页表中的每一项都是四个字节,所以页表中每一项的地址都是字对齐的,也便是最低两位的值都为0。所以由于细粒度的二级页表的基地址为20位,而偏移量只能为10位,则细粒度的二级页表中能有1024个项,巨细为4KB。而这1024个项要表明1M巨细,所以细粒度二级页表中的每个项要表明1KB的物理空间规模。
首要评论粗粒度的二级页表:分页方法为大页64KB。上面现已说了一个粗粒度的二级页表中每一项能表明的物理地址规模只能为4KB,那么64KB的地址规模怎样表明呢?这时其实现已把4KB的地址规模变为了64KB的地址规模,也便是页表中的一项能表明64KB的地址规模。这时物理地址偏移量要占用二级页表索引号的bits[15:12] ,这样才干表明64KB的物理地址规模。
由于现在二级页表的一项中寄存的是64KB地址规模的物理基地址,则物理地址偏移量运用的是bits[15:0](占用了二级页表索引号的bits[15:12]),所以bits[15:12]在0b0000—0bFFFF规模改动时,物理基地址依然相同。可是跟着bits[15:12]的改动,二级索引号也会发生改动,那么得到的项的地址就会改动。所以为了让物理基地址相同,有必要在接连16个项中都寄存相同的内容,这样依据二级页表索引号所找到的接连16个项地址尽管不同,但每一个项中的物理基地址都相同。再与物理地址偏移量(虚拟地址的bits[15:0])相加,就会得到物理地址。
所以当当分页方法为大页64KB时,粗粒度二级页表用16个项对应一页,
粗粒度二级页表中一项的具体内容如下表:
大页基地址:便是64KB页的首地址
一个大页分为4个子页:
AP0子页1的拜访操控权限位
AP1 子页2的拜访操控权限位
AP2子页3的拜访操控权限位
AP3子页4的拜访操控权限位
C:    如下表所示
B:     如下表所示
bits[1:0] :当时页表的分页方法:01:大页 10:小页 11:极小页
当分页方法为小页4KB时,粗粒度二级页表的一项正好对应一页。其地址改换方法和一级映射类似。
当分页方法为极小页1KB时,粗粒度二级页表无法表明。
接下来是细粒度的二级页表:
由于细粒度二级页表的一项只能表明1KB的物理地址规模,所以:
当分页方法为大页64KB时,细粒度二级页表的64个项对应一页。其地址改换方法参阅粗粒度二级页表的大页改换方法
当分页方法为小页4KB时,细粒度二级页表的4个项对应一页。其地址改换方法参阅粗粒度二级页表的大页改换方法
当分页方法为极小页1KB时,细粒度二级页表的一项正好对应一页,其地址改换方法与一级映射类似。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/jichu/276393.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部