S3C2440的内存管理单元MMU学习笔记

关于Cawen_Cao博客中的博文TQ2440 学习笔记—— 19、内存管理单元MMU的理解
该博文源自《韦东山——嵌入式Linux 应用开发完全手册》
另简略图可参考graylocus博客中的S3C2440的内存管理单元MMU


概念解释

  • 虚拟地址(Virtual Address)(VA):在CPU中运行时所用的地址;
  • 变换后的虚拟地址(Modified Virtual Address)(MVA):CACHE,MMU中使用的地址,VA通过硬件电路转换成MVA;
  • 物理地址(Phisical Address)(PA):储存设备实际的地址,当没有启用MMU时,CPU,CACHE使用的都是PA;
  • 一级页表基址(Translation Table Base)(TTB):占位高18位,低位14位,即16K对齐,使用时,将它写入协处理器CP15的寄存器C2(称为页表基址寄存器)即可;
  • 表索引(Table Index):MVA的高12位,占12位,也就是可取4096个值,即一个一级页表的表项为4096个;

其中,一级页表的表项中存放的数据有三种情况,分别包含三种情况的基地址

  • 粗页表基地址(Coarse page table base address):占高22位,低2位保留,则共8位可用,共256项;
  • 段基地址(Sector base address):占高12位,低20位直接用MVA中的低20位(Sector Index),可得PA;
  • 细页表基地址(Fine page table base address):占高20位,低2位保留,可用10位。

粗页表和细页表均有二级表项,粗页表的二级表项有:大页、小页;细页表的二级表项有:极小页

  • 二级表索引(L2 Table Index):用于与粗、细页表基地址组合,查找对应的页基址,粗页表的二级表索引为MVA的12~19位,即8位,共256个取值,细页表为MVA的10~19位,即10位,共1024个取值;
  • 页基址(Page base address):PA的高位,对于大页(Big page)、小页(small page)、极小页(Tiny page)分别为高16、20、22位,页内可用的位为16、12、10位,对应的页容量为64K、4K、1K。

转换过程

VA -> MVA
在ARM9中VA转换成MVA:
if(VA < 32M)
MVA = VA | ( PID<<25 )
else
MVA = VA
PID为进程识别号,即把小于32M(32*1024*1024)的VA的高六位写成PID,而大于32M的VA不变。
接下来,MMU将把MVA转化为PA。

MVA-PA
分为两种形式

页分为两种形式

粗页分为两种形式

细页只有极小


通过一级页表基址一级页表索引(来自MVA)查到(段)一级描述符,其中包含:段基址粗页表基址细页表基址

段基址段索引(来自MVA)可得到PA

粗页表基址细页表基址结合二级表索引(来自MVA)得到二级描述符,其中存放了页基址

页基址页索引(来自MVA)可得到PA


总结

  • 通过MUU功能的启用,不同程序中的同一个数值的地址可以对应物理地址上的不同地址,链接器和加载器的实现会比较容易;
  • 进程有自己独立的地址空间,非法内存访问不会改写其他进程的数据;
  • 分配和释放内存更方便灵活,可把多份不连续的小空间利用起来,在VA中变为连续,以供进程使用;
  • MMU通过虚拟内存映射,可把内存映射到磁盘上,把内存中不常用的数据换出(Pageout)到交换设备,并把这部分内存供给其他进程使用。当进程需要到该数据时,从交换设备中加载数据,换入(Pagein)到内存,完成换页(Paging)的操作,以使进程可用的总内存大小大于内存的物理大小;
  • 灵活通过段、页等方式管理内存,段,大、小、极小页对应的最小单位内存分别为:1MB、64KB、8KB、1KB。

参考内容:Tommy_wxie:的博文:虚拟内存管理的作用/好处

你可能感兴趣的:(操作系统,Linux服务器)