Chinaunix首页 | 论坛 | 博客
  • 博客访问: 924869
  • 博文数量: 63
  • 博客积分: 568
  • 博客等级: 中士
  • 技术积分: 3435
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-05 11:44
文章分类
文章存档

2016年(4)

2015年(6)

2014年(3)

2013年(27)

2012年(23)

分类: LINUX

2012-11-21 23:06:46

ARM MMU 概要介绍



什么是MMU

MMU存储器系统的结构允许对存储器系统的精细控制。大部分的控制细节由存在存储器中的转换表提供。这些表的入口定义了从1KB到1MB的各种存储器区域的属性。这些属性包括:

虚拟地址到物理地址映射

存储器访问权限

高速缓存和缓冲位


TLB

查找整个转换表的过程叫转换表遍历。它由硬件制动进行,并需要大量的执行时间(至少一个存储器访问,通常是两个)。为了减少存储器访问的平均消耗,转换表遍历结果被高速缓存在一个或多个叫作TLB的结构中。通常在ARM的实现中每个内存接口有一个TLB


内存访问过程


1. 当CPU请求存储器访问时,首先在TLB中查找虚拟地址

2. 如果该虚拟地址对应的地址描述符不在TLB中时,读取内存中页表查询,并将该描述符添加到TLB中,如果TLB已满,根据一定算法进行替换。

3. 通过TLB缓存或者通过页表查询得到描述符,从描述符表中得到对应的物理地址

4. 根据域访问控制和描述符中AP位确定是否允许对该内存进行操作。如不,则产生存储访问中止中断

5. 如访问被允许,根据描述符表中CB位决定是否缓存该内存的访问结果,如不,则根据得到的物理地址直接访问内存

6. 缓存被允许,则首先在CACHE中查找,命中则直接读取,如未命中,则根据物理地址直接访问内存,并将该数据读取到CACHE中。


ARM920T CP15协处理器介绍

ARM的虚拟地址管理主要通过CP15相关寄存器来实现的,CP15包括了16个32位寄存器,编号为0~15,实际上对于某些编号的寄存器可能对应有多个物理寄存器,在指令编码时指定标志位来区分。

编号

MMU功能

C0

ID编码(只读)

C1

开启/禁止MMU/CACHE/WRITE等功能

C2

地址转换表基地址

C3

域访问控制

C4

保留

C5

内存失效状态

C6

内存失效状态

C7

CACHE及WRITE控制

C8

TLB控制

C9

CACHE锁定

C10

TLB锁定

C11

保留

C12

保留

C13

进程PID

C14

保留

C15


CP15寄存器的读写

MCR ARM寄存器到协处理器寄存器数据传送

MRC 协处理器寄存器到ARM寄存器数据传送

格式:

MCR/MRC P15,0,,,,{,}

其中RD为ARM寄存器

CRN为协处理器寄存器

CRM附加的目标寄存器或源操作数寄存器,用于区分一个编号的不同物理寄存器

MCR P15,0,R4,C1,C0,0  R4->C1

MRC P15,0,R4,C1,C0,0  R4<-C1


ARM920T 一级、二级页表的组织介绍

描述符定义:

第一级段、粗页和细页描述符

类型

31                 20

19   12

11

10

9

8     5

4

3

2

1

0

粗页

二级页表基地址[31:10]


Domain

1



0

1

物理地址基地址[31:20]


AP


Domain

1

C

B

1

0

细页

二级页表基地址[31:12]



Domain

1



1

1

第二级极大页、小页和极小页描述符


31                         16

15 12

11

10


9  8

7 6

5 4

3

2

1

0

极大

物理地址基地址[31:16]64k


Ap3

Ap2

Ap1

Ap0

C

B

0

1

小页

物理地址基地址[31:12]4k

Ap3

Ap2

Ap1

Ap0

C

B

1

0

极小

物理地址基地址[31:10]1k



ap

C

B

1

1

ARM对一级、二级页表的组织有多种情况,这里不对多种情况做细致的分析,主要分析一种情况就是一级是粗页,二级页表是小页的情况。

协处理地址转换页表遍历的过程如图所示。虚拟地址的31~20位表示一级页表的索引值,通过cp15 c2寄存器保存的一级页表基地址值,根据这个索引,可以找到一级页表中的页表项。下面例子中的页表项是一个粗表项。一个粗表项记录了一个二级页表。这个二级页表的大小为1K(每个表项为4字节,一共有256个表项),根据虚拟地址中的19~12位,可以在二级页表中找到对应的页表项。在下面的例子中二级页表项为小页,一个表项记录了一个4K物理内存的基地址,根据虚拟地址的最后11~0位,可以访问到这个4K地址中的任意内存值。




阅读(2167) | 评论(0) | 转发(0) |
0

上一篇:linux 进程的状态分析

下一篇:ARM MMU介绍

给主人留下些什么吧!~~