一步一步写嵌入式操作系统之MMU

MMU——memory management unit的缩写。它代表集成在CPU内部的一个硬件逻辑单元,主要作用是给CPU提供从虚拟地址向物理地址转换的功能,从硬件上给软件提高一种内存保护的机制。

物理地址:即硬件自己定义的地址往往是不可更改的。

虚拟地址:这个地址在真实的硬件中并不存在,只不过我们可以通过访问虚拟地址而间接实现对物理地址的访问,并且只能使用这种方法进行访问。并且只能使用这种方法进行访     问。当然,我们也可以实时调整这种映射关系,让不同的虚拟地址映射到同一个物理地址上。允许多对一的映射。


为什么要使用MMU进行地址映射呢?

第一个原因:

当操作系统还是以单任务的方式运行的年代,MMU并没有它存在的意义。

当操作系统开始支持多任务后,从宏观上看,多个进程并行执行,并且各进程之间的资源都是相互独立的,那么通过什么手段可以有效地保护各个进程的资源不会被其他进程破坏呢?当然,可以通过使用软件划分好各进程的地址空间,但因为各进程仍然有跨界操作的权限,即便在正常执行时进程间彼此不会相互干扰,但也无法避免错误执行时的后果。因此,就需要从硬件上提供一种机制,彻底限制某个进程对其他进程资源的访问权限。于是内存保护单元(MMU)应运而生,MMU能够很好的提供内存保护作用

第二个原因:

例如,当我们经常需要将一个应用程序同时运行多次,这样,问题就会随之而来。我们知道,一个应用程序在编译完成后,其运行地址也就确定了,假设该程序不可以被重定位,那么编译时所确定的地址就成了程序能够运行的唯一地址,那么当同一个应用程序被两次运行时,必然造成同一个地址既存储了一个进程的指令或数据又存储了另一个进程的指令或数据,那么这一矛盾的解决仍然需要MMU。也就是通过把同一个虚拟地址的程序,在运行两遍的时候,把它们映射到不同的物理地址。因此,它们却独立运行在不同的物理地址,因此能够在同一时刻同时运行,给各个进程提供独立的地址空间。


MMU中的页表(page table):

页表就是存储在内存中的一张表,表中记录了将虚拟地址转换为物理地址的关键信息。MMU正是通过对页表进行查询,实现了地址之间的转换。从中找出与虚拟地址相对应的物理地址,然后再进行数据存取。

页表中的条目被称为页表项(page table entry),一个页表项负责记录一段虚拟地址到物理地址的映射关系。


TLB的作用:

因为页表是存储在内存中的,那么程序每次完成一次内存读取时都至少会访问内存两次,相比于不使用MMU时的一次内存访问,效率被大大降低了,如果所使用的内存的性能比较差的话,这种效率的降低将会更明显。为了发挥MMU的优势,同时使系统消耗尽量减小。因此需要产生了TLB。


TLB即是转换旁路转换器,它实际上是MMU中临时存放转换数据的一组重定位寄存器。也即TLB本质上是一组寄存器,因此,访问TLB的速度要快很多。因此如果页表的内容全部存放在TLB中,就可以解决访问效率的问题了。

但是,由于制造成本等诸多限制,所有页表都存储在TLB中几乎是不可能的。因此,只能通过在有限容量的TLB中存储一部分最常用的页表,从而从一定程度上提高MMU的工作效率。这种方法的理论依据是——存储器访问的局部性原理。意思是说,程序在执行过程中访问与当前位置临近代码的概率更高一些。


页表是由页表项组成的,每一个页表项都能够将一个段虚拟地址空间映射到一段物理地址空间中,这里所谓的这段虚拟地址空间,称为页。一个页对应了页表中的一项,页的大小通常是可选的。在ARM中,一个页可以被配置成1K, 4K, 64K或1M大小(ARM V6体系以后,不再支持1K大小的页),分别称为微页、小页、大页和段页。

页的大小决定了页的粒度,是根据使用应用有选择地配置。


一级页表:

......

二级页表:

......


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值