MMU与虚拟地址、物理地址、链接地址
2018-01-29 20:40
337 查看
MMU可以将虚拟地址转化为物理地址。
我的理解,物理地址是内存的真实地址。链接地址是编译链接时给程序强加的一个地址;比如arm-linuc-ld -Ttext 0x30000000 led.o head.o -o led_elf; 定义led.bin的起始地址为0x30000000,正常情况下,存放程序的真实物理地址应该和链接地址一致,这时人为做到的,因为这样做比较方便,例如:ldr pc,=main,此时跳到main的链接地址,假设main的真实物理地址和链接地址一致,这时才能真正跳转到main函数。(这里main就是一个数,即链接地址)
至于虚拟地址,会被MMU转化为物理地址。例如,我在页表里设置0xB0000000对应0x30000000, 即ldr pc,=0xB0000000,pc会跳到真实地址0x30000000,这时 ldr pc,=main,main的链接地址和物理地址不能一致。例如main函数存放在0x30000000真实物理空间,则需要设置arm-linuc-ld -Ttext 0xB0000000 led.o head.o -o led_elf,因为main的链接地址赋给pc是虚拟地址,还要经过MMU变为物理地址。如果MMU不开,那就一致,这时没有虚拟地址的说法。
我的理解,物理地址是内存的真实地址。链接地址是编译链接时给程序强加的一个地址;比如arm-linuc-ld -Ttext 0x30000000 led.o head.o -o led_elf; 定义led.bin的起始地址为0x30000000,正常情况下,存放程序的真实物理地址应该和链接地址一致,这时人为做到的,因为这样做比较方便,例如:ldr pc,=main,此时跳到main的链接地址,假设main的真实物理地址和链接地址一致,这时才能真正跳转到main函数。(这里main就是一个数,即链接地址)
至于虚拟地址,会被MMU转化为物理地址。例如,我在页表里设置0xB0000000对应0x30000000, 即ldr pc,=0xB0000000,pc会跳到真实地址0x30000000,这时 ldr pc,=main,main的链接地址和物理地址不能一致。例如main函数存放在0x30000000真实物理空间,则需要设置arm-linuc-ld -Ttext 0xB0000000 led.o head.o -o led_elf,因为main的链接地址赋给pc是虚拟地址,还要经过MMU变为物理地址。如果MMU不开,那就一致,这时没有虚拟地址的说法。
相关文章推荐
- 虚拟地址、物理地址及MMU的理解
- 【解答】关于内核中没开MMU之前的虚拟地址物理地址转换问题
- MMU内存管理单元(1)-虚拟地址到物理地址转换
- ARMv6 架构下MMU虚拟地址到物理地址二级映射过程
- 物理地址和虚拟地址1 (MMU)(转载)
- MMU与逻辑地址,物理地址和虚拟地址之间的关系
- 内存管理单元MMU, 虚拟存储器,虚拟地址 --> 物理地址
- 【解答】关于内核中没开MMU之前的虚拟地址物理地址转换问题
- 物理地址和虚拟地址1 (MMU)
- 物理地址,虚拟地址,链接地址的个人理解
- 自己学驱动13——内存管理单元MMU(虚拟地址和物理地址)
- 物理地址和虚拟地址1 (MMU)
- 物理地址,虚拟地址,链接地址的个人理解
- ARM920T MMU and Cache ——PART1 虚拟地址和物理地址的概念
- 物理地址和虚拟地址1 (MMU)
- (亚嵌)ARM920T的MMU与Cache之虚拟地址和物理地址的概念
- 【解答】关于内核中没开MMU之前的虚拟地址物理地址转换问题
- MMU_虚拟地址物理地址
- 【解答】关于内核中没开MMU之前的虚拟地址物理地址转换问题
- ARM中虚拟地址到物理地址的映射示意图