ARM920T及其MMU,Cache学习杂记(二)

MMUMMU由单一的存于内存的两级页表控制。为什么是两级?

TLB用来做什么?在哪里?指令TLB和数据TLB分别用来做什么?

标准的ARMv4MMU重映射大小,域入访问保护机制

映射大小为1MB的段,64KB的大页,4KB的小页和1KB的微页

段的访问允许控制

大页及小页的访问允许控制由它的子页控制,微页则没有访问控制

硬件16个域CP15Reg3为域访问控制  (域用来做什么?)

64个转换入口的指令TLB及数据TLB

Round-Robin替代算法,Reg1 bit14 使能该算法,做什么的?

Reg8 禁止整个TLB入口

Reg8禁止指令MVATLB入口

Reg10分别锁定指令及数据TLB

 

访问允许及域

每一个内存块都有一个与它相关联的域,一个域是内存块的首要访问控制机制,它定义了一个访问是否被处理。CP15 reg3每两个位控制一个域的访问允许:

00        No Access 所有访问都将产生一个域错误

01        Client 访问由段或页描述符检查

10       保留

11       管理模式       访问不被检查,不产生错误

 

其实我们所要了解的就是从虚拟地址到物理地址需要经过哪些过程,怎么一级级地被转换?

 

转换入口:

每个TLB缓存了64个转换入口,在CPU访问内存 期间,TLB给访问控制逻辑提供保护信息。如果TLB包含了一个MVA的转换入口,访问控制逻辑决定该访问是否被允许:

       如果访问被允许,以及需要片外访问,MMU输出所对应的物理地址。(怎么输出?)

       如果访问被允许,以及不需要片处访问,由Cache来服务该访问。

       如果访问不被允许,MMU提示CPU内核中止。

(访问允许在哪里控制?)

手册中还提到:

如果TLB不包含该虚拟地址的转换入口,转换表遍历硬件将从存于物理内存中的转换表得到信息,并写入TLB

不是很懂。。。先往下看

地址转换

MMU转换虚拟地址到物理地址,并且使用TLB来检查访问允许。TLB用来做什么?检查访问允许)

MMU转换表遍历硬件是用来将入口加入TLB。存于物理内存的转换表提供了转换地址数据及权限信息数据组成了转换信息。

对转换表遍历硬件来说,这里有两种级别,这取决于地址被标记为段还是页映射访问。

有一种大小的段访问及三种大小的页访问。但转换过程的开始阶段是一样的,都从一级预取开始,一个段的映射访问仅需要一级预取,而页的映射访问则需要二级预取。

来个实例分析一下:

假设我现在的有一块SDRAM内存,32MB大小,地址从0x30000000开始,现我需要实现将0开始的中断向量表重映射到0x30000000开始,而其他虚拟地址与物理地址一致,线性连续。

为了使问题简单,可以仅使用段映射访问,这样的话,只需一级预取。我该怎么配置MMU实现该功能呢?

 

硬件转换过程

TTB转换表基址

CP15中的Reg2为转换表基址寄存器,16KB对齐,存于物理内存,也就是说,从这个地址开始的内存空间上的数据都为段或页的描述符。最多4096个入口,每个1MB,因此最大可以寻址4GB空间。

 

假设我们让MMU做地址转换,转换的结果是,虚拟地址与物理地址一致。而且仅使用段描述符。

这时,转换表中的4096个入口将为段描述符,格式如下:

31

30

 

 

 

 

 

 

 

 

 

20

19

 

 

 

 

 

 

12

11

10

9

8

 

 

5

4

3

2

1

0

段基址

 

AP

 

Domain

1

C

B

1

0

 

位[1:0]表示描述符类型,10表示段描述符。

这个段基址将与描述符在转换表中的偏移量一致。

地址为{TTB+i}上的内存数据为(i<<20)|其它属性 

位[8:5]表示所使用的域,这个域与Reg3的域访问控制相对应.

 

现在来做一次转换:假设虚拟地址为0x12345678, TTB=0x3000 0000  其它属性为0x01e,使用域0,并且假设域0访问控制使能。

也就是说0x3000 0000-0x3000 3ffc 4096个数据分别为 0x0000 001e - 0xfff0 001e

 

虚拟地址展开为

31

30

 

 

 

 

 

 

 

 

 

20

19

 

 

 

 

 

 

12

11

10

9

8

 

 

5

4

3

2

1

0

0

0

0

1

0

0

1

0

0

0

1

1

0

1

0

0

0

1

0

1

0

1

1

0

0

1

1

1

1

0

0

0

 

它转换时先取得虚拟地的 31:20,在此为:0x123

然后根据TTB+(0x123<<2)=0x3000 048C 取得转换入口的内存地址:

然后得到这个地址上的数据:0x1230 001e 因此这个段基址为 0x123

最后,段基址<<20,再并上虚拟地址的19:0得出物理地址:0x123 45678

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值