历史上的今天
今天是:2025年07月21日(星期一)
2018年07月21日 | ARM学习之内存管理单元(MMU)
2018-07-21 来源:eefocus
今天在学习MMU时,学到了不少知识。现总结如下,一是加深印象;二是写出来希望能和大家交流学习。
1.MMU是什么?
答:MMU是内存管理单元。如果MMU开启的话,它会把CPU发出的虚拟地址转化为物理地址,然后对实际的物理地址进行相应的读写操作。当然,它还有其他的作用,包括内存权限检查、Cache等。
2.虚拟地址是什么?为什么会出现虚拟地址?
答:虚拟地址是CPU所“看到”的地址。它的所有与地址相关的操作用到的都是虚拟地址。那为什么会出现虚拟地址呢?我想,可能是这个原因:以前,还没有操作系统的时候,只有一个程序在CPU上跑,它占据了所有的内存空间(和现在的裸板程序差不多),只要程序所需要的的内存空间小于实际物理内存,那CPU就可以直接用物理地址操纵这个物理内存。但后来,随着多用户、多程序机制的出现,所有程序所需要的内存空间大于实际的物理内存,这样虚拟内存出现了,理论上,它使得每个程序可以具有同样大小的内存空间(理论上,最大可以为实际物理内存空间,具体的原理在此就不赘述了)。虚拟内存对应的就是虚拟地址,每个进程的虚拟地址空间可以是相同的(你可以在一个C语言中申请一个变量然后把它的地址打印出来,同时运行两次这个程序,你会发现这两个变量的地址是一样的),然后再通过MMU的作用把每个进程的虚拟地址,转化到实际的物理地址空间中。
3.MMU的地址映射(虚拟地址->物理地址)功能是如何实现的?
答:其实总体上看很简单,一般来说采用的是类似与映射表的一种机制(专业上叫页表)。虚拟地址到物理地址的映射。简单来说,CPU发出的虚拟地址,MMU通过查询这种映射表把这种虚拟地址转化为物理地址。在ARM体系中,用的有段(一级页表)、大页、小页、极小页(二级页表)等页表类型。
4.运行地址和加载地址分别是什么意思,有什么区别?
答:在ARM中,当程序被烧写到FLASH中,用的就是加载地址。是烧写到FLASH中的某地址上。当程序运行时,程序所处的地址就是运行地址,也叫做链接地址。在烧写ARM裸板程序时,如果在链接时,不指定链接地址的话,程序的加载地址就是链接地址。当指定了某段的链接地址时,运行到此段时,此段必须处在所指定的链接地址上,否则可能会出现程序崩溃(其实,如果指定段中不涉及到与位置相关的指令应该也没关系,因为与位置相关的指令使用的绝对地址,而与位置无关的指令使用的是相对地址。绝对地址和链接地址有关系,相对地址和链接没关系)。
上一篇:ARM学习之GPIO实现流水灯
下一篇:ARM学习之中断体系结构
史海拾趣
|
1 引言 为了以更低的功耗获得更高的速度和更佳的性能,要求电源电压越来越低,瞬态性能指标越来越高,因此对开关电源提出了越来越高的要求。用原有的电路拓扑及整流方式已不能满足现在的要求,为了适应IC芯片发展的需要,人们开始研 ...… 查看全部问答> |
|
原文见我在ednchina的博客:http://blog.ednchina.com/bluehacker/240730/Message.aspx这个程序是NSS08Kit-R1开发板上的PS2接口演示程序,通过PS2接口连接普通PC键盘,MC9S08AC16读用户按键的值。 下面是ps2keyboard.c文件,驱动程序 /****** ...… 查看全部问答> |
|
摘要:文章针对智能家庭系统的控翻R络相关技术进行研究,提出一种基于ZigBee技术的智镌家庭无线一络的构建方案,并进行了系统设计。… 查看全部问答> |
|
要在wince 上面实现外置usb摄像头功能,如何才能实现 好多摄像头都没有提供wince下的驱动程序,是否要自己编写 思路要怎样?… 查看全部问答> |
|
我在万利开发板上改的JOYSTICK DEMO运行正常,移植到自己的板子上USB连不上,芯片用的是STM32F103T8U6,观察D+ D-Pin可看到约1ms间隔的数据脉冲,互为反相,D+也通过1.5K电阻上拉到3.3V,但似乎未产生US ...… 查看全部问答> |
|
搞MCU的耗时两周写了一个串口的MFC , 没有自己想的那么简单 本帖最后由 点创@布丁 于 2016-12-30 23:37 编辑 最近在做一个小产品,要是有个上位机的小软件 可以方便产品调试与测试。虽然以前从来没有从头到尾的做过这样的工作。可自己还是感觉都是控件的应该没有那么难吧,何况 ...… 查看全部问答> |




