嵌入式Linux学习笔记(四)-内存管理单元mmu.PDFVIP

  • 4
  • 0
  • 约2.05万字
  • 约 24页
  • 2019-04-22 发布于湖北
  • 举报

嵌入式Linux学习笔记(四)-内存管理单元mmu.PDF

嵌入式Linux学习笔记(四)- 内存管理单元mmu 一、内存管理单元MMU介绍 内存管理单元简称MMU ,它负责虚拟地址到物理地址的映射,并提供硬件机制的内存访问权限检查。MM U使得每个用户进程拥有自己独立的地址空间,并通过内存访问权限的检查保护每个进程所用的内存不被 其他进程破坏。 重点就在于地址映射:页表的结构与建立、映射的过程。 1、S3C2440 MMU地址变换过程 1)地址的分类 一个程序在运行之前,没有必要全部装入内存,仅需要将那些要运行的部分先装入内存,其余部分在用到 时从磁盘载入,当内存不足时,再将暂时不用的部分调出到磁盘。 这使得大程序可以在较小的内存空间中运行,也使得内存中可以同时装入更多的程序并发执行,这样的存 储器一般称为虚拟存储器。 虚拟地址最终需要转换为物理地址才能读写实际的数据,通过将虚拟地址空间和物理空间划分为同样大小 的空间(段或页),然后两个空间建立映射关系。 由于虚拟地址空间远大于物理地址,可能多块虚拟地址空间映射到同一块物理地址空间,或者有些虚拟地 址空间没有映射到具体的物理地址空间上去(使用到时再映射)。 ARM cpu地址转换涉及三种地址:虚拟地址(VA ,Virtual Address )、变换后的虚拟地址(MVA ,Modifi ed Virtual Address )、物理地址(PA ,Physical Address ) 没有启动MMU 时,CPU核心,cache,MMU ,外设等所有部件使用的都是物理地址。 启动MMU后,CPU核心对外发出虚拟地址VA ;VA被转换为MVA供cache,MMU使用,在这里MVA被转 换成PA ;最后使用PA读取实际设备 ①CPU核心看到和用到的只是虚拟地址VA ,至于VA如果去对应物理地址PA ,CPU核心不理会 ②caches和MMU看不到VA ,他们利用MVA转换得到PA ③实际设备看不到VA 、MVA ,读写它们使用的是物理地址PA MVA是除CPU核心外的其他部分看到的虚拟地址,VA与MVA 的变化关系 如果VA32M ,需要使用进程标识号PID (通过读CP15 的C13获得)来转换为MVA if (VA 32M) then MVA = VA | (PID 25) else MVA = VA 使用MVA ,而不使用VA 的目的是,当有重叠的VA 时,转换为MVA地址并不重叠,减小转换为PA 的代价 比如两个进程1、2 ,VA都是0- (32M-1 ),则MVA分别为00x03ffffff,00x05ffffff 。 下文说到虚拟地址,如果没有特别指出,就是指MVA 2 )虚拟地址到物理地址的转换过程 arm cpu使用页表来进行转换,页表由一个个条目组成,每个条目存储一段虚拟地址对应的物理地址及访 问权限,或者下一级页表的地址 S3C2440最多会用到两级页表,以段(Section,1M)的方式进行转换时只用到一级页表,以页(Page ) 1 的方式进行转换时用到两级页表。 页的大小有3种:大页(64KB ),小页(4KB ),极小页(1KB)。条目也称为描述符,有:段描述符、 大页描述符、小页描述符、极小页描述符-保存段、大页、小页、极小页的起始物理地址;粗页表描述 符、细页表描述符,它们保存二级页表的物理地址。 下图为S3C2440的地址转换图 TTB base代表一级页表的地址,将它写入协处理器CP15 的寄存器C2 (称为页表基址寄存器)即可,一级 页表的地址是16K对齐,使用[31:14]存储页表基址,[13:0]为0 一级页表使用4096个描述符来表示4GB空间,每个描述符对应1MB的虚拟地址,存储它对应的1MB物理空 间的起始地址,或者存储下一级页表的地址。使用MVA[31:20]来索引一级页表(20-31一共12位,2^12=409 6,所以是4096个描述符),得到一个描述符,每个描述符占4个字节。 一级页表描述符格式如下: 2 一级页表描述符 最低两位: 0b00 :无效 0b01 :粗页表(Coarse page table ) [31:10]为粗页表基址,此描述符低10位填充0后就是一个二级页表的

文档评论(0)

1亿VIP精品文档

相关文档