ARM中MMU地址转换理解
2011-09-22 08:54
190 查看
MMU的作用就是负责虚拟地址(virtual address)转化成物理地址(physical address)。 32位的CPU的虚拟地址空间达到4GB,在一级页表中使用4096个描述符来表示这4GB的空间,每个描述符代表1M的虚拟地址,要么存储了它的对应物理地址的起始地址,要么存储了下一级页表的地址。使用MVA[31:20]来索引一级页表(4096个描述符)
由协处理器CP15中的寄存器C2(高18位,即[31:14]为转换表基地址,低14位为0)为一级转换表基地址,指向2^14=16KB整除的存储器即16K对齐,这个存储区称为一级转换表;MVA的高12位,即位[31:20]作为一级转换表的地址索引,因此一级转换表具有2^12=4096项,每一项的地址为32位,最高的18位[31:14]为寄存器C2的高18位,中间12位为MVA的高12位[31:20],最低2位为0b00。每一项的内容称为一个描述符,在段(Section)下,一级描述符的高12位为,大小为1MB的段基地址,段内地址(偏移地址)为MVA的低20位,即段内每个存储器的地址是这样组成:高12位为一级描述符的高12位,低20位MVA的低20位。这样,借助于寄存器C2和一级描述符,将一个MVA转换成一个PA。(在这里一定要注意:MVA的高12位是用来索引4096个项的,然后使用项的内容(即描述符)的高12位为段的高12位,类似于指针里面存放地址,4096项类似指针,描述符类似指针里面的内容)
虚拟地址(注意:是一个确定的地址,不是一个空间)被MMU分成2个部分,第一部分是4096页号索引(descriptor index)即用选择4096(2^12)个号中的某个页号,比喻description index为768,页号768中保存的是物理地址的某个页框的起始地址(0x300),第二部分则是相对于section base(0x300)为起始地址空间为1M的偏移量(offset)(如下图)例如: 假设现在执行指令MOV REG, 0x30100013,虚拟地址的二进制码为00110000 00010000 00000000 00010011,前12位是Descriptor Index = 2^9+2^8+1 = 769,找到769项对应的内容0x301,偏移量为0000 00000000 00010011=13,那么段地址为0x3000000D。
下面是s3c2410内存映射后的一个示意图:
![](http://blog.chinaunix.net/photo/101649_091123124001.jpg)
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/dream_blue/archive/2010/03/09/5359842.aspx
由协处理器CP15中的寄存器C2(高18位,即[31:14]为转换表基地址,低14位为0)为一级转换表基地址,指向2^14=16KB整除的存储器即16K对齐,这个存储区称为一级转换表;MVA的高12位,即位[31:20]作为一级转换表的地址索引,因此一级转换表具有2^12=4096项,每一项的地址为32位,最高的18位[31:14]为寄存器C2的高18位,中间12位为MVA的高12位[31:20],最低2位为0b00。每一项的内容称为一个描述符,在段(Section)下,一级描述符的高12位为,大小为1MB的段基地址,段内地址(偏移地址)为MVA的低20位,即段内每个存储器的地址是这样组成:高12位为一级描述符的高12位,低20位MVA的低20位。这样,借助于寄存器C2和一级描述符,将一个MVA转换成一个PA。(在这里一定要注意:MVA的高12位是用来索引4096个项的,然后使用项的内容(即描述符)的高12位为段的高12位,类似于指针里面存放地址,4096项类似指针,描述符类似指针里面的内容)
虚拟地址(注意:是一个确定的地址,不是一个空间)被MMU分成2个部分,第一部分是4096页号索引(descriptor index)即用选择4096(2^12)个号中的某个页号,比喻description index为768,页号768中保存的是物理地址的某个页框的起始地址(0x300),第二部分则是相对于section base(0x300)为起始地址空间为1M的偏移量(offset)(如下图)例如: 假设现在执行指令MOV REG, 0x30100013,虚拟地址的二进制码为00110000 00010000 00000000 00010011,前12位是Descriptor Index = 2^9+2^8+1 = 769,找到769项对应的内容0x301,偏移量为0000 00000000 00010011=13,那么段地址为0x3000000D。
下面是s3c2410内存映射后的一个示意图:
![](http://blog.chinaunix.net/photo/101649_091123124001.jpg)
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/dream_blue/archive/2010/03/09/5359842.aspx
相关文章推荐
- ARM中MMU地址转换理解
- ARM中MMU地址转换理解
- 5、ARM中MMU地址转换理解
- ARM中MMU地址转换理解
- ARM中MMU之地址转换
- X86,ARM的虚拟地址转换.什么是MMU,MMU的作用
- X86,ARM的虚拟地址转换.什么是MMU,MMU的作用
- MMU内存管理单元(1)-虚拟地址到物理地址转换
- 【解答】关于内核中没开MMU之前的虚拟地址物理地址转换问题
- arm的MMU详解(虚拟地址)
- 网络地址转换NAT原理(易于理解)
- 【解答】关于内核中没开MMU之前的虚拟地址物理地址转换问题
- 地址转换的理解配置命令-不作为参考学习之用
- (亚嵌)ARM920T的MMU与Cache之虚拟地址和物理地址的概念
- 关于MMU与各种地址的理解
- 虚拟地址、物理地址及MMU的理解
- arm地址转换
- 一个函数分析(s3c2410_gpio_setpin),浅析ARM GPIO地址转换
- ARMv6 架构下MMU虚拟地址到物理地址二级映射过程
- ARM Android内核虚拟地址到物理地址的转换实例 (ARM Android kernel virtual address to physical address)