ARM学习笔记 (二)存储系统

ARM 187浏览

CP15: 用于存储管理的系统控制协处理器。

 

Translate Table页表是在内存中用来存放虚拟地址和物理地址转换的映射关系表, C2就是用来存放页表的基地址(也就是页表有可能会更新);而TLB (Translatelookaside buffer)是个特殊的存储器件,从内存中的页表查询.

 

由于ARM支持的存储块分为这几个粒度的:section 1M, Large page64KB, Small page 4KB, Tiny page 1KB.

页表映射:



一级页表:  

段为单位以及二级页表地址的变换。

 

上图中的位[1:0]是定义它究竟是做什么类型的转换。

二级页表:

大页和小页为单位的变换,二者如下图,唯一的差别就是二级页表的位数不同

存储访问失效:如果在产品端发生这样的错误,哪怕是千分之一的机器,都是不可原谅的!要查一下具体原因:

 

另外转载:

1. 关于地址

    要知道虚拟内存机制必须了解ARM9中的3种地址:VA(虚地址),MVA(修正后虚地址),PA(物理地址)

    1)VA,是程序中的逻辑地址,0x00000000~0xFFFFFFFF。
    2)MVA,由于多个进程执行,逻辑地址会重合。所以,跟据进程号将逻辑地址分布到整个内存中。MVA = (PID << 25)  | VA
    3)PA,MVA通过MMU转换后的地址。

    由2可知,地址位共32位,PID占7位,所以最多只能有 128 个进程。而每个进程可访问的地址位为25位,故只能分到 32MB 的地址空间。(注:不是物理内存空间)

    PID是存放在CP15协处理器的C13寄存器的高7位。

 

2. 关于虚拟内存转换

    CP15从C2中获得页基址(TTB)。将 MVA 的高12位作为页表索引值。获得页表项:TTB [ MVA >> 20 ]。注意:页表项是32位的。

    从上可知,一个页表最多有4096个页表项,也就是4K。那么,每个页表项可以表示1MB的地址空间。

    得来的项表项分三种:

    1)段页描述符,直接指向1MB的内存空间。
    2)粗页描述符,有256个二级页表项,每个二级页表项指向4KB的内存空间。
    3)细页描述符,有1024个二级页表项,每个二级页表项指向1KB的内存空间。

    ## 粗页描述符中存放的是粗页表二级表的基址。 将MVA的[19~12]位用来进行二级页表查寻。粗页表二级表分两种:

    1)大页描述符,一个描述符可以对应64KB的内存地址,但16个二级描述符对应同一块内存。
    2)小页描述符,一个描述符只对应4KB的内存地址,每个二级描述符只对应一块内存。

    ## 细页描述符中存放的是细页表二级表的基址。将MVA的[19~10],共计10位用于进行二级页表索引。二级页表共1024个描述符。剩下的10位作为基址,可访问空间为1024B。

    如下是内存转换图:

(这样看来,vmalloc最大能分配的内存大小就是VMALLOC_START到VMALLOC_END之间,为250M。)

 

 

[参考文献]

《ARM体系结构与编程》

Linux内核学习和研究及嵌入式(ARM)学习和研究的开放文档 http://lli_njupt.0fees.net/index.html

 

位[1:0]是定义它究竟是做什么类型的转换。

二级页表:

大页和小页为单位的变换,二者如下图,唯一的差别就是二级页表的位数不同

位[1:0]是定义它究竟是做什么类型的转换。

二级页表:

以大页和小页为单位的变换,二者如下图,唯一的差别就是二级页表的位数不同