一步一步写嵌入式操作系统之MMU
来源:互联网 发布:dota1618牛蛙淘宝店 编辑:程序博客网 时间:2024/05/16 11:42
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大小的页),分别称为微页、小页、大页和段页。
页的大小决定了页的粒度,是根据使用应用有选择地配置。
一级页表:
......
二级页表:
......
- 一步一步写嵌入式操作系统之MMU
- 读《一步一步写嵌入式操作系统》
- 一步一步写嵌入式操作系统学习(一)
- 一步一步写嵌入式操作系统 第二章练习。
- 嵌入式操作系统内存管理 mmu
- 《自己动手写嵌入式操作系统》阅读笔记之操作系统小知识
- 一步一步写嵌入式操作系统中skyEye-1.2.6的安装问题
- 《一步一步写嵌入式操作系统——ARM编程方法与实践》(第一章、第二章)读书笔记
- 《一步一步写嵌入式操作系统——ARM编程方法与实践》读书笔记(第三章)
- 从“一步一步写操作系统”到“一步一步抄操作系统”
- 《一步一步嵌入式操作系统》笔记2-环境搭建
- 一步一步写算法(之)
- 一步一步写算法(之)
- 一步一步写算法(之)
- 《一步一步嵌入式操作系统》笔记1-写在前面的话
- 《嵌入式LINUX应用完全开发手册》之 MMU 实验
- 操作系统---精髓与设计原理 之 虚拟存储器(MMU)
- 动手写简单的嵌入式操作系统一
- 在linux上搭建javaweb的开发环境
- SQLSERVER 存储过程 语法
- 硬盘安装win7
- WinForm 正则表达式 只能输入数字
- 注销session
- 一步一步写嵌入式操作系统之MMU
- 学习软件技术必备的专业网站和论坛
- The method getTextContent() is undefined for the type Node
- 如果程序出现Segment fault错误,该如何排错?谈SIGBUS和SIGSEGV
- Tiny6410 编译linux内核的问题(Linux-2.6.38)
- Iframe自适应1
- uboot添加命令
- error C2259: 'CException' : cannot instantiate abstract class 2011.11.04
- 不好意思Mark,Facebook需要硅谷