您的位置 首页 新品

ARM9学习笔记之——MMU

我记得有一次我去应聘ARM-Linux软件工程师。结果被问到ARM中的虚拟内存是怎么管理的。由于我只对X86平台下的MMU了解,所以我被问倒了。原来…

我记住有一次我去应聘ARM-Linux软件工程师。成果被问到ARM中的虚拟内存是怎样办理的。我们我只对X86平台下的MMU了解,所以我被问倒了。本来我所学的仅仅皮裘。还有许多东西值得我去深化。要做ARM-Linux下的驱动,了解虚拟内存应该是有必要的。

ARM9中的虚拟内存是怎样完成的呢?以下是我的学习总结。

ARM920T核是经过CP15来完成MMU机制的。

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。

如下是内存转化图:

考虑:

经过上面的学习,了解到ARM将4GB的地址拜访空间分红128个32MB,每份供一个进程运用。如此以来,一个进程的地址拜访空间只要32MB。如进程1的地址空间为[0x02000000~0x03FFFFFF]。假如超出这个规模,地址拜访便是不合法的。

那ARM9在规划CP15时为什么不为每一个进程指定一个独自的页表。这样以来,每个进程就能够独地具有4GB的地址空间。

如此以来,进程数就不再受限于128个,能够多达1024个进程。而每一个进程的虚拟地址的空间能够扩展到4GB。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/264145.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部