|
知识路径: > 嵌入式系统软件基础知识 > 嵌入式操作系统基础知识 > 存储管理 > 地址重定位(逻辑地址、物理地址、地址映射等) > 地址映射 >
|
相关知识点:2个
|
|
|
|
动态地址映射的基本思路是:当用户程序被装入内存时,不对指令代码做任何的修改。而是在程序的运行过程中,当它需要访问内存单元的时候,再进行地址转换。具体实现时,为了提高效率,该转换工作一般是由硬件的地址映射机制来完成。通常的做法是设置一个基地址寄存器,或者叫重定位寄存器。当一个任务被调度运行时,就把它所在分区的起始地址装入到这个寄存器中。然后,在程序的运行过程中,当需要访问某个内存单元时,硬件就会自动地将其中的逻辑地址加上基地址寄存器当中的内容,从而得到实际的物理地址,并按照这个物理地址去访问。
|
|
|
|
|
|
如上图所示,当程序在装入内存之前,它里面所用的都是逻辑地址。当它被装入内存后,这些指令代码没有发生任何的变化,里面使用的还是逻辑地址。显然,对于这样的程序,如果直接运行的话,肯定会出错。但现在新增加了一个基地址寄存器。有了它以后,指令的执行方式就发生了变化。例如,在执行第三条指令add R2,R1,3时,由于这条指令只涉及到两个CPU寄存器,不需要去访问内存单元,所以它的执行方式和原来是完全一样的,没有任何变化。而对于其他指令,如str 5[200],它需要去访问逻辑地址200。而该地址所对应的变量x,已经存放在物理地址1200的位置。但CPU会自动完成这个转换。当操作系统调度了这个任务去运行时,它所在分区的起始地址,也就是1000,就会被装入到基地址寄存器当中。然后,当执行到str 5[200]这一条指令时,硬件装置就会自动地把其中的相对地址200取出来,把它和基地址寄存器做一个加法,从而得到实际的物理地址,也就是1200,然后再根据这个新的地址来访问内存单元。这样的话,就使得程序能够正确地运行。这个基地址寄存器是位于MMU的内部,整个地址映射过程是自动进行的。从理论上来说,每访问一次内存都要进行一次地址映射。
|
|
|