ARM存储器之:存储管理单元MMU
15.5.4MMU的使能与禁止
MMU的使能/禁止可以通过CP15寄存器的c1的bit[0]来控制。
·bit[0]=0,MMU禁止。
·bit[0]=1,MMU使能。
下面的例子显示了典型的MMU使能过程。
【例15.4】典型的MMU使能过程。
MRCp15,0,r0,c1,0,0
ORRr0,#01
MCRp15,0,r0,c1,0,0
当MMU被禁止时,存储访问执行下列过程。
①当禁止MMU时,存储系统是否支持Cache和写缓存,根据不同芯片设计不同而有所不同(ARM公司将设计权交给芯片厂商)。
·如果芯片规定当禁止MMU时禁止Cache和写缓存,则存储访问不考虑C、B控制位。
·如果芯片规定禁止MMU时使能Cache和写缓存,则数据访问被视为无Cache(uncachable)和写缓存(unbufferable)的,即C=0、B=0。读取指令时,如果系统是统一的TLB,则C=0;如果使用分开的TLB,则C=1。
②存储访问不受权限控制,MMU也不会产生存储访问中止信号。
③所有物理地址和虚拟地址相等,即使用平板存储模式。
使能/禁止MMU时需要注意以下几个问题。
·在使能MMU之前,正确的传输表要在内存中事先建立,CP15的相关寄存器必须完成初始化操作。
·如果使用的不是平板存储模式(物理地址和对应虚拟地址相等),在禁止/使能MMU时,虚拟地址和物理地址的对应关系发生变化,这时应该清除(Flush)Cache中的当前地址变换入口(Entry)。
·如果完成禁止/使能MMU的代码的物理地址和虚拟地址不同,则禁止/使能MMU将带来很大麻烦,因此建议完成使能/禁止MMU的代码的物理地址和虚拟地址相同。
15.5.5虚拟地址到物理地址的转换
(1)地址重定位
为了使任务有各自的虚拟存储器映射,MMU硬件采用地址重定位,在地址访问主存之前,转换有处理器输出的虚拟地址。当处理器产生一个虚拟地址时,MMU取出这个虚拟地址的高位,遍历传输表,从而形成一个物理地址。
虚拟存储空间到物理存储空间的映射是以内存块为单位进行的。也就是说,虚拟存储空间中一块连续的存储空间被映射到物理存储空间中同样大小的一块连续存储空间。
虚拟存储空间到物理存储空间地址重映射过程如图15.24所示。
图15.24虚拟存储空间到物理存储空间地址重映射过程
ARM支持的存储块的大小有以下几种。
·段(Sections):大小为1M的存储块。
·大页(Largepages):大小为64KB。
·小页(Smallpages):大小为4KB。
·极小页(TinyPages):大小为1KB。
段和大页只需通过一次映射就可以将虚拟地址转换成物理地址,也可以根据需要增加一级映射,采用两级映射的方式再将大页分成16KB的子页,小页分成1KB的子页。极小页不能再分,只能以1KB大小的整页为单位。
ARM在内存中存在两级页表以实现上述地址映射过程。
·一级页表:一级页表包括两种类型的页表项,即保持指向二级页表起始地址的页表项和保存用于转换段(Section)地址的页表项。一级页表也称为段页表(sectionpagetable)。
·二级页表:二级页表包含以大页和小页为单位的地址变换页表项。
一级页表将4G地址空间划分为多个1MB的段(Section),因此一级页表包含4096个页表项。一级页表是一个混合表,可以作为二级页表的目录表,也可以作为用于转换1MB段(也可视为1MB的虚拟页)的普通页表。当一级页表作为页目录时,其页表项包含的是代表1MB虚拟空间的二级页表指针。二级页表分为粗页表(Coarse)和细页表(Fine)。当一级页表用于转换一个1MB的段时,其页表项包含的是物理存储器中对应1MB页帧(pageframe)的首地址。
注意 | 目录页表项和1MB的段页表项可以共存于一级页表中。 |
一个粗二级页表(Coarse)包含256个页表项,占有1KB的主存空间,每个页表项将一个4KB的虚拟存储块转换成一个4KB的物理存储块。粗二级页表支持4KB和64KB的页,页表项包含的是4KB或64KB的页帧地址。如果转换的是一个64KB的页,则对于每个64KB的页,同一个页表项必须在页表中重复16次。
一个细二级页表(Fine)有1024个页表项,占有4KB的主存空间,每个页表项转换一个1KB的存储块。细页表支持1KB、4KB、64KB虚存页,每个页表项包含1KB、4KB或64KB的物理页帧首地址。如果转换的是4KB的页,则同一个页表项必须在页表中连续重复4次;如果转换的是64KB的页,则同一个页表项需要在页表中连续重复64次。
存储器相关文章:存储器原理
评论