ARM学习之内存管理单元(MMU)
来源:互联网 发布:淘宝账号怎么绑定邮箱 编辑:程序博客网 时间:2024/06/06 07:22
今天在学习MMU时,学到了不少知识。现总结如下,一是加深印象;二是写出来希望能和大家交流学习。
1.MMU是什么?
答:MMU是内存管理单元。如果MMU开启的话,它会把CPU发出的虚拟地址转化为物理地址,然后对实际的物理地址进行相应的读写操作。当然,它还有其他的作用,包括内存权限检查、Cache等。
2.虚拟地址是什么?为什么会出现虚拟地址?
答:虚拟地址是CPU所“看到”的地址。它的所有与地址相关的操作用到的都是虚拟地址。那为什么会出现虚拟地址呢?我想,可能是这个原因:以前,还没有操作系统的时候,只有一个程序在CPU上跑,它占据了所有的内存空间(和现在的裸板程序差不多),只要程序所需要的的内存空间小于实际物理内存,那CPU就可以直接用物理地址操纵这个物理内存。但后来,随着多用户、多程序机制的出现,所有程序所需要的内存空间大于实际的物理内存,这样虚拟内存出现了,理论上,它使得每个程序可以具有同样大小的内存空间(理论上,最大可以为实际物理内存空间,具体的原理在此就不赘述了)。虚拟内存对应的就是虚拟地址,每个进程的虚拟地址空间可以是相同的(你可以在一个C语言中申请一个变量然后把它的地址打印出来,同时运行两次这个程序,你会发现这两个变量的地址是一样的),然后再通过MMU的作用把每个进程的虚拟地址,转化到实际的物理地址空间中。
3.MMU的地址映射(虚拟地址->物理地址)功能是如何实现的?
答:其实总体上看很简单,一般来说采用的是类似与映射表的一种机制(专业上叫页表)。虚拟地址到物理地址的映射。简单来说,CPU发出的虚拟地址,MMU通过查询这种映射表把这种虚拟地址转化为物理地址。在ARM体系中,用的有段(一级页表)、大页、小页、极小页(二级页表)等页表类型。
4.运行地址和加载地址分别是什么意思,有什么区别?
答:在ARM中,当程序被烧写到FLASH中,用的就是加载地址。是烧写到FLASH中的某地址上。当程序运行时,程序所处的地址就是运行地址,也叫做链接地址。在烧写ARM裸板程序时,如果在链接时,不指定链接地址的话,程序的加载地址就是链接地址。当指定了某段的链接地址时,运行到此段时,此段必须处在所指定的链接地址上,否则可能会出现程序崩溃(其实,如果指定段中不涉及到与位置相关的指令应该也没关系,因为与位置相关的指令使用的绝对地址,而与位置无关的指令使用的是相对地址。绝对地址和链接地址有关系,相对地址和链接没关系)。
- ARM学习之内存管理单元(MMU)
- 4,嵌入式Linux之内存管理单元MMU
- ARM基础学习-存储管理单元MMU
- ARM学习笔记--内存管理单元MMU
- arm的存储管理单元MMU [转]
- ARM 内存管理单元MMU详解
- arm s3c2410 MMU(存储器管理单元)详解
- ARM存储管理单元MMU和存储保护单元MPU
- ARM存储管理单元MMU和存储保护单元MPU
- Boost之内存管理学习(一)
- Boost之内存管理学习(二)
- s3c2440 内存管理单元MMU学习笔记 (修改中)
- 嵌入式学习记录:内存管理单元(MMU)介绍
- 【ARM学习笔记】五、操作系统Operation System和内存管理单元MMU
- 【ARM学习笔记】实验四:内存管理单元MMU的虚拟地址映射实验
- s3c2440 内存管理单元MMU学习笔记
- Ucos学习之内存管理
- ios学习之内存管理
- Spring mvc json 乱码
- 六度分离
- matplot绘图legend设置到图边界外
- POJ 2914 Minimum Cut 无向图最小割SW算法
- java创建线程的两种方法
- ARM学习之内存管理单元(MMU)
- BZOJ 4915 简单的数字题(数学)
- 1. Two Sum
- cassandra节点启动报错:java.io.UTFDataFormatException
- 集合运算
- 排序之四:二分插入
- 自定义Parcelable引发的AlarmManager设置的Alarm无法收到
- CountDownLatch的简单理解
- 0805JS