zoukankan      html  css  js  c++  java
  • S3C2440之MMU

    转自:http://blog.chinaunix.net/uid-23193900-id-3187782.html

    1.MMU简介

       MMU(Memory Management Unit),内存管理单元,主要职责:将虚拟地址映射为物理地址,提供硬件机制的内存访问权限检查。
     

    2.基本概念

      虚拟地址(Virtual Address,VA),修改后的虚拟地址(Modified VA),物理地址(Phisical Address)
     VA是CPU使用的地址,MVA是MMU、Caches使用的,PA是内存设备使用,他们的映射关系:
      
     
    (1)cpu看到的是VA
    (2)caches和MMU使用的是MVA,
    (3)实际物理设设备使用的是PA。
     

    3.地址转换中的基本概念

    地址的转换就像是数学中映射,利用函数公式,多对1,就是多个虚拟地址对应同一个物理地址
    这里地址转换用的是页表的方式
    • 页表
       页表是由一个个表项(Entry,又称作描述符)组成的物理表,每个页表项或是一个物理页(一块物理内存,大小为1k,4k不等)的起始地址,或是一个二级页表的地址(当是一个二级页表的地址时,又可以称该页表为页描述符)。所有的页表都用物理地址访问。
    • 表项(描述符)的分类
      依据描述符保存的内容,可以分为两类。
      一类保存的是直接的物理页或段的起始地址,如段描述符、大页、小页、极小页描述符。
      另一类保存的是二级页表的物理地址,如粗页表描述符,细页表描述符。
    • 一级映射与二级映射
       一级映射,是指以段(Section,大小1MB)的方式进行转换。
       二级映射,是以页的方式进行转换。ARM页大小由三种:1k,4k,64k。
     

    4.地址转换的过程

    • VA->MVA:CPU发出一个VA,是怎么转换为MVA的
       这在上图可以看到,是通过一个硬件电路转换的。
     在ARM9里面,如果VA<32M,利用进程标识号PID转换得到MVA
    过程如下:
    if(VA < 32M)
         MVA = VA | ( PID<<25 )
    else
         MVA = VA
    只是上面的过程是由硬件实现的。
      这样为VA进行了一级映射,为什么呢?在linux系统里,每个进程的地址空间0-4G,0-3G是进程独有的,称为用户空间,3G-4G是系统的,称为内核空间,所有进程共享。如果两个进程所用的VA有重叠,在切换进程时,为了把重叠的VA映射到不同的PA上,需要重建页表、使无效caches和TLBS。使用了MVA,使进程在VA相同的情况下,使用不同的MVA,进而PA也不同。这就是在VA与PA之间加上一次到MVA的映射的意义
     
    • MVA->PA:MVA到PA的转换
    上面说了,虚拟地址到物理地址的转换有两种方式:公式映射+页表转换。
    概念上面也介绍过了。
    这里就进行实际的转换说明。
    首先,给定一个MVA,要进行转换,先要找到一级页表,怎么找?
    有一个寄存器,TTB寄存器,页表基地址寄存器,负责保存一级页表的基地址,当然是物理地址。
     
    TTB寄存器是集成在CP15协处理器中的,
     
    TTB的格式:
    因此,一级页表的地址是16k对齐的,因为[14:0]要求为0.
     
    一级页表的描述符格式:
     
     
    一级页表的表项,可以是个段描述符,粗页表描述符或细页表描述符。
    共同点是,每个描述符都代表1MB的物理地址空间。
    不同点:段描述符直接指向一个1MB地址空间,可以直接访问;而页表描述符,顾名思义,就是指向一个二级页表,还需要另一次映射。
     
    二级页表的描述符格式:
     
     
    二级页表有两种:粗页表(Coarse Page Table )+细页表( Fine Page Table)
    粗页表与细页表的异同:粗页表有最多256个表项,每个表项可表示4kb空间,如果表项是个大页页表描述符,则连续16个表项都表示同一个大页描述符。
    细页表中每个表项代表1kb,指向一个极小页;也可扩展成4k的小页,64k的大页。
     
    页表的结构与格式就是这些了。。下面看转换的具体过程
     
     
    段地址转换
     
    大页地址转换
    小页的地址转换
     
    极小页的地址转换
     
     
  • 相关阅读:
    洛谷P2751 工序安排Job Processing
    UVA 1613 K度图染色
    线段树+扫描线
    分组背包
    洛谷P5506 封锁
    洛谷P2574 XOR的艺术
    List.Sort
    Dict.Count
    Convert.ToString(null) => null
    Convert 输入字符串的格式不正确
  • 原文地址:https://www.cnblogs.com/aaronLinux/p/5699767.html
Copyright © 2011-2022 走看看