Chinaunix首页 | 论坛 | 博客
  • 博客访问: 53858
  • 博文数量: 104
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 10
  • 用 户 组: 普通用户
  • 注册时间: 2016-09-11 15:25
文章分类

全部博文(104)

文章存档

2016年(104)

我的朋友

分类: LINUX

2016-10-06 11:28:41

原文地址:裸机实验之MMU 作者:gc5084

知识点:

CPU中对内存的管理一般有MPU或者MMU。在了解MMU之前可以先熟悉一下MPUMPU即内存保护单元,其主要功能是为每个任务提供不同的区域保护任务的内存不被其他任务访问。本文主要总结MMU。对MPU参考其他资料。

*MPUMMU

MPUMMU的主要区别是,MMU中增加了额外的硬件,以支持虚存;也就是可以支持地址重映射,每个任务可以有自己的虚拟地址空间,其虚拟地址可以重叠。

 

*基本工作原理

MMU硬件采用地址重定位,即地址在访问主存前,先将地址在MMU中转换成物理地址然后在访问主存。其中MMU会取出这个地址的高位然后用重定位寄存器内的替换它,就产生了一个物理的地址。

解释名词。

页:一个重定位寄存器只能转换一块存储空间,这块存储空间的大小由地址的偏移量部分所占的位数所表示的大小决定,而这样一块虚拟存储空间即为一个页。

页帧:由页转换对应的那块物理地址即为页帧。

 

重定位寄存器是由64个寄存器组成的全相联cache。也称作TLB,而MMU中的重定位寄存器内的值是来自于主存中特定区域的,这些区域中保存着描述数据转换的信息,称之为页表。页表中每个项表示了一个页转换到物理存储器的一个页帧的全部信息。一个页表项一般是4字节长度。

 

处理器会将传来的地址在页表中搜索对应的页表项(可能会有多级页表项,稍后介绍),找到后会将页表项中的内容,填充到重定位寄存器中。所以TLB中保存的就是最近访问地址的转换信息。

 

 

* 页表详解

页表一般有一级页表(L1)和二级页表(L2)。其中一级页表中的页表项可以有两种类型,一种是保存指向二级页表地址的页表项,又分为指向粗页表和细页表的页表项。一种就直接表示1MB空间页的转换而不用再到二级页表。这些页表项种类的不同通过页表项中的低两位的不同来区分。一级页表有4096个页表项,每个页表项都可以直接或间接的转换1MB页,这样就转换完了4GB空间。

图:一级页表L1

指向二级页表的一级页表又分为粗页表和细页表。
在说明粗页表和细页表前,先看一下他们所能指向的二级页表都有哪些分类,
二级页表中包含四种页表项,大页表项(64KB),小页表项(4KB),微页表项(1KB)和错误页表项。
粗页表中的页表项一共有256个每个4字节则占用1KB空间,粗页表中支持包含小页表(4KB)和大页表项(64KB),细页表则有1024个页表项每个4字节共占用4KB,细页表中支持所以三种页表项。因为一个一级页表需要转换1MB的地址,所以举例说,如果一个粗页表中包含的是大页表项(64KB),因为总共是256个页表项,一个页表项本应该负责转换4KB地址。所以同一个大页表项需要重复16次。

图:一级页表L1

*页表基址寄存器CP15:c2保存着L1转换表基地址TTB,指向L1主页表在虚存中的位置。

 

*页表搜索

       在页表中找到对应的页表项,称为页表搜索。页表搜索可分为单页表搜索和2步页表搜索,单页表搜索就是直接在L1页表中的对应的页表项就可以直接转换成物理基地址。而2步页表项是指L1中对应的页表项中存的是L2页表的基地址,物理基地址需要继续在L2页表中找。

       下面举例说明其过程,

L1页表中保存的是粗页表项,L2粗页表中是大页表项的转换过程。是以64KB为页大小。

1.页表基址寄存器[31:14](表明L1表基地址)和虚存[31:20](表明L1页表中页表项的偏移地址)组成一个低两位为032位地址,即L1页表中对应的粗页表项地址。

2.取出粗页表项中[31:10](表明粗页表基址)和虚存[19:12](表明L2页表中页表项的偏移地址)组成一个低两位为032位地址,即L2页表中对应的大页表项地址。

3.取出大页表项中[31:16](即大页基址,表明64KB为页大小的页帧的地址)和虚存[15:0](64KB页中具体的页帧偏移地址)组成地址。这即是实际的物理地址。

其中,大页表项在粗表页中也重复16次,因为虚存[15:0]位用于64KB的页帧内偏移地址而其中的[15:12]位也在步骤2中用于选择大页表项。这4位的变化会寻址到连续16个不同大页表项,这些大页表项必须相同才能符合以64KB为单位的转换。这在页表详解中也有提到。

 

 

* TLB操作

       在转换过程中会多次访问内存,其效率不高,TLB(转换旁路缓冲器)可以缓存最近访问到的页表项。

       操作系统改变了页表中的内容,如果相应的页表存在TLB中则其中的数据是过时无效的,这就需要部分或全部清除TLB中的数据。其指令如下:

-所有TLB数据无效: MCR p15,0,Rd,c8,c7,0  (Rd应为0)

-按行使TLB无效:     MCR p15,0,Rd,c8,c7,1 (Rd 为要使之无效的虚拟地址)

-省略

注:MCR指令是写协处理器寄存器指令,便于记忆即可以理解成R型寄存器到C型寄存器(便记忆:(M) C=R),相反读协处理器指令MRC(便记忆:(M) R=C,第三操作数Rd,代表内核寄存器,c8为协处理器主寄存器,c7为协处理器辅助寄存器。

 

* 域和存储器访问权限

       S3C2440中有16个域,每个域占2位保存权限信息。域在CP15C3寄存器中。任何一个页表项中的域信息就代表着这16个域中的一个。

C3中每两位代表的信息如下表。

 

       而最后权限的决定还要结合CP15:c1控制器中的Ssystem)和RROM)位,和当前处理器的状态是系统模式还是用户模式。具体如下:

 

 

+发现
阅读(303) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~