内存管理单元MMU

内存管理单元MMU,第1张

  高性能处理器一般会提供一个内存管理单元(MMU),MMU辅助 *** 作系统进行内存管理,提供虚拟地址和物理地址的映射、内存访问权限保护和Cache缓存控制等硬件支持。 *** 作系统内核借助MMU可以让用户感觉到程序好像可以使用非常大的内存空间。

 为了理解基本的MMU *** 作原理,需要先搞清楚下面几个概念:

  下图是一个典型的ARM处理器访问内存的过程,其他处理器也类型。

  当ARM要访问处理器时,MMU先查找TLB中的虚拟地址表。如果ARM的结构支持分开的数据TLB(DTLB)和指令TLB(ITLB),则除了取指令使用ITLB外,其他都使用DTLB。

  若TLB中没有虚拟地址的入口,则转换表遍历硬件并从存放于主存储器内的转换表中获取地址转换信息的访问权限(执行TTW),同时将这些信息放入TLB,或者被放在一个没有使用的入口或者替换一个已经存在的入口,之后,在TLB条目中控制信息的控制下,当访问权限允许时,对真实物理地址的访问将在Cache或在内存中发生,如下图:

ARM内TLB条目中的控制信息用于控制对对应地址的访问权限以及Cache的 *** 作

  MMU具有虚拟地址和物理地址转换、内存访问权限保护等功能,这将使得Linux *** 作系统能单独为系统的每个用户分配独立的内存空间并保证用户空间不能访问内核空间的地址,为 *** 作系统的虚拟内存管理模块提供硬件基础。

仿真的时候,你的程序是运行在sdram里面的,也就是0x3000_0000处开始运行

你的中断向量表通过仿真器已经放在了0x3000_0000处,

打开mmu是为了把0x3000_0000地址处的值映射到0x0的地方,

因为你的中断向量表是保存在0x0开始的地方,当中断发生时的第一时间

CPU会去0x0地方查中断向量表看是发生了什么中断,是reset还是IRQ还是FIQ还是取数据终止或取指令终止

按键外部中断是IRQ中断,然后CPU会去IRQ开始的地方找到你的中断服务函数,这个时候轮到了你的中断服务函数运行的时间了

所以你不打开MMU就不会进入中断服务函数

你启动了mmu,但是你页表里面没东西呀,一开始初始化都是用物理地址的。启动mmu会错。而且还要关掉看门狗,不然没有喂狗,会一直重启。。。

等系统引导差不多了,就可以用mmu了,改cp15协处理器,管理mmu


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11364075.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存