arm的存储管理单元MMU and arm的存储保护单元MPU

转自
http://bluefish.blog.51cto.com/214870/59997
    MMU提供的一个关键服务是,能使各个任务作为独立的程序在其自己的私有存储空间运行.地址转换过程允许运行的多个程序使用相同的虚拟地址,而各自存储在物理存储器的不同位置.
 
    区域可以是活跃的,也可以是睡眠的:活跃区域包含当前系统正在使用的代码或数据;睡眠区域包含当前不使用,但可能在短时间内变为活跃的代码或数据.睡眠区域是被保护的,因此当前正在运行的任务是不能访问的.MPU和MMU的主要区别是,MMU中增加了额外的硬件,以支持虚存.
 
    一个重定位寄存器只能转换一块存储空间.这块存储空间的大小由虚拟地址的偏移量部分所占的位数所决定.ARM的MMU中临时存放转换数据的一组重定位寄存器实际上是一个由64个重定位寄存器组成的全相联cache.这个cache就是转换旁路缓冲器--TLB.TLB缓存最近被访问的页的转换数据.MMU还使用主存中的表来存放描述系统中用到的虚拟存储器映射数据,这些转换数据的表就是页表.页表中的每个项代表了将虚拟存储器的一个页转换到物理存储器的一个页帧所需要的所有信息.
 
    在MMU中,区域被定义为一组页表的集合,并作为虚存中的连续页完全由软件控制.除了L1一级页表外,所有其他的页表都代表虚存的1MB空间.如果一个区域的大小大于1MB或者它跨过页表的1MB边界地址,那么就必须使用一组页表来描述这个区域.页表可以驻留在存储器中,而不必映射到MMU硬件.
 
    当在2个应用程序任务间实现上下文切换时,处理器其实要发生多次上下文切换.它先从用户模式任务切换到内核模式任务,以处理准备运行下一个应用程序任务时的上下文数据的移动;然后,它从内核模式任务切换到下一个上下文的新的用户模式任务.
 
    MMU在转换一个地址时失败,就会产生一个中止异常.MMU只有在转换失败,权限错误和域错误时,才会中止.
 
    L1住页表包含2种类型的页表项:保存指向二级页表起始地址指针的页表项和保存用于转换1MB页的页表项.L1页表也称为段页表.当L1页表作为页目录时,其页表项包含的是1MB虚拟空间的L2粗页表或L2细页表指针;当L1页表用于转换一个1MB的段时,其页表项包含的是物理存储器中1MB页帧的首地址.目录页表项和1MB的段页表项可以共存于L1主页表.CP15:c2寄存器保存转换表基地址TTB--指向L1主页表在虚存中的位置.
 
    TLB只支持两种类型的命令:清除TLB和锁定TLB中的转换数据.存储器访问时,MMU将虚拟地址的一部分与TLB中的所有值进行比较.如果TLB中已有所要的转换数据,即为一次TLB命中,则由TLB提供物理地址的转换数据.如果TLB中不存在有效的转换数据,即为一次TLB失效,则MMU会由硬件自动处理TLB失效,通过主存中的页表搜索有效的转换数据,并将其装入TLB的64行的一行.如果TLB中的某一行是锁定的,则当TLB清除命令发出时,它仍然保留在TLB中.
 
arm的存储保护单元MPU
 
在受保护的系统中,主要有两类资源需要监视:存储器系统和外围设备.存储器中对区域的访问可以是读/写,只读或不可访问,基于当时的处理器模式--管理模式或用户模式,还有一些附加的权限.区域还有控制cache和写缓冲器属性的cache写策略.当处理器访问主存的一个区域时,MPU比较该区域的访问权限属性和当时的处理器模式.如果请求符合区域访问标准,则MPU允许内核读/写主存;如果存储器请求导致存储器访问违例,则MPU产生一个异常信号.
 
    区域与内核是冯.诺依曼结构还是哈佛结构无关.每个区域通过0~7的号码来标识和引用.区域的属性如下:
(1)区域可以相互重叠;
(2)每个区域都分配有一个优先级,该优先级与分配区域的权限无关;
(3)当区域重叠时,具有最高优先级的区域的属性可以覆盖其他区域的属性,优先级仅作用于重叠部分的地址;
(4)区域的起始地址必须是其大小的倍数;
(5)区域的大小可以是4KB~4GB之间的任何2的乘幂;
(6)访问所定义区域外的存储器将产生异常.如果是内核预取指令,则MPU产生预取指令中止异常;如果是存储器数据请求,则产生数据中止异常.
   
    在启用存储器保护单元之前,必须至少定义一个数据区域和一个指令区域,而且必须在启用cache和写缓冲器之前(或同时)启用存储器保护单元.控制器通过设置CP15的主寄存器c1~5来配置MPU.通过配置寄存器c2和c3来设置区域的cache和写缓冲器的属性,寄存器c5控制区域的访问权限,在寄存器c6里有8个或16个次寄存器用来定义每个区域的大小和位置.初始化MPU,cache和写缓冲器需要以下步骤:
(1)使用CP15:c6来定义指令和数据区域的大小和位置
(2)使用CP15:c5来设置每个区域的访问权限
(3)分别使用CP15:c2和CP15:c3来设置每个区域的cache和写缓冲器属性
(4)使用CP15:c1来使能cache和MPU
 
    每个内核有3个CP15寄存器用来控制区域的cache和写缓冲器属性.其中CP15:c2:c0:0和CP15:c2:c0:1两个寄存器保存D-cache和I-cache区域属性;第三个寄存器,CP15:c3:c0:0用于保存区域写缓冲器属性,并应用于存储器数据区域.当配置数据区域时,区域的cache位和写缓冲器位一起决定区域的策略.写缓冲器位有2个用途:使能和禁止区域的写缓冲器和设置区域的cache策略.区域的cache位控制写缓冲器位的作用.当cache位为0时,写缓冲器位为1,则使能写缓冲器;写缓冲器位为0,则禁用写缓冲器.当cache位为1时,cache和写缓冲器都被使能,此时写缓冲器位决定cache策略.若写缓冲器位为0,则区域使用直写策略;若写缓冲器位为1,则区域使用回写策略.

你可能感兴趣的:(arm的存储管理单元MMU and arm的存储保护单元MPU)