转:http://blog.sina.com.cn/s/blog_a07635070101bcbt.html
最近笔者详细地学习了由杜春雷老师编写的《ARM体系结构与编程》。对ARM存储管理单元MMU有了全新的认识。在这里写写心得体会,也可以对知识点儿梳理一下吧。
在谈MMU之前,笔者谈一下关于学习方法的问题。笔者在看第5章——ARM储存系统时,反复的对所讲到的内容进行思考推敲,但是当看完一遍、两遍时,笔者 发现还是对其中相关的一些概念理解不是很透彻,也就是有些概念很模糊,甚至老是弄的混淆了,更别说是相关的联系了。后来,笔者发现,杜老师的书写的是很详 细,但是缺少图解。而大对数人在学习过程中懒得动笔,光是在哪儿阅读课文,导致读完一遍是晕晕乎乎的,不知所云。于是,笔者对第5章看第三遍的时候,开始 用笔在纸上写写画画,不放过任何一句话。效果显然与前两遍不同了。在看第三遍的时候,笔者在纸上做了很多图,也记录的许多要点。等第三遍看完了,笔者眼前 一亮,对ARM的存储系统有了庖丁解牛般的感觉。其实好记性不如烂笔头完全可以这样理解,呵呵。好了接下来笔者开始谈谈关于ARM存储系统的问题。
一、相关概念
说是ARM存储系统,名字有些唬人,其实说白了不就是可以理解为是一个存储粮食的仓库嘛。既然是一个存储粮食的仓库,那当然就需要管理员啦。假设该仓库内 要存放20种粮食。管理员需要做的是把仓库分成若干个分区,一区、二区……二十区。然后,一区放玉米,二区放大米,三区放小米,依次类推将20种粮食在二 十个分区内对号入座,并将信息记录在档案本上。好,再来看ARM存储系统。先来看几个概念。
1、MMU
什么是MMU,暂且将他理解为MMU就是仓库的管理员,后面将会对其详细解释。
2、虚拟地址空间
显然,虚拟地址是一个抽象的概念,是存在于人的思维中的一个概念并不以实物的形式表现出来,比如在仓库中,当管理员把玉米存到A区后,脑子里就有了一条记 录:A区存放了玉米,并且管理员还知道这种玉米产于内蒙古。这条记录就是虚拟出来的东西了,并不以实物的形式表现出来。直到,管理员把这条记录用笔写到档 案本上之后,这条记录就以文字的形式表现出来了。虚拟地址空间就可以看作是在脑子里而未以实物的形式表现出来的一条条记录的集合。在ARM中采用了页式虚 拟内存管理。它把虚拟地址空间分成一个个固定大小的块,每一块称为一页。而一页就是上面提到的一条记录。这句话用图形语言表示出来就是:
这就是虚拟内存地址空间,地址空间分为若干虚拟页来管理。这其中的每一页便可看作是一条记录(记录了具体某种粮食的地址和备注信息)。虚拟地址空间中的每
一页同理具有自己的属性,分别是A、B和C属性。A属性是该虚拟内存页对应的真实物理内存地址;B属性是该虚拟内存页的的方位权限;C属性是该虚拟内存的
缓冲特性等。不厌其烦的再说一点:这个虚拟内存地址空间是凭空想象的并不是真实存在于ARM中的,后面会对其详细介绍,这里只需明白虚拟地址空间这个概念
就好。接下来在介绍一个概念。
3、物理内存地址空间
其实物理内存空间就是那个仓库了,当然这个仓库被管理员分为了一区、二区……二十区来管理。同理,在ARM中把物理内存地址空间分成与虚拟内存空间中虚页同样大小的若干页。用图形语言来描述一下:
这些页可分为三类,大页、小页和极小页。其中:
大页:是大小为64KB的存储块儿。
小页:是大小为4KB的存储块儿。
极小页:是大小为1KB的存储块儿。
这个大小就是反映了存储量了,就好比仓库里A区能够存储多少吨玉米一个意思啦。通过观察知每一页又被分成一行一行的样子。那么其中的每一行被称为一个页描述符。到这儿只需了解一下页描述符这个概念就可以了,详细后面会对其详细的介绍。
4、页表
页表是什么呢?想想看,物理内存空间中的某一页(实页)在仓库中对应着具体存储某种粮食的一块儿地方(有一定的面积)。虚拟地址空间中的某一页(虚页)又
对应着一条记录,比如说在管理员脑子中有条信息:A区存储着玉米,玉米产于内蒙古。那么像这样的记录要是多了,管理员肯定是就不住的,所以他要把这一条一
条的记录记到一个档案本子上,以便之后取粮食的时候方便查找。其实这个档案本儿就是页表了。图解页表:
页表是真实存在于内存中的一张表,页表中的每一行被称为一个地址变换条目,每个地址变换条目就是一条记录,即每个地址变换条目对应了虚拟地址空间中的某一虚页。
5、快表TLB(translation lookaside buffer)
那什么是快表呢?来看例子:比如说仓库里有上千中粮食,即档案本儿上有上千条记录,如果现在来个取粮食的货车要拉走1吨小麦,而小麦这条记录正好在589
条处记录着。货车司机来到仓库后,肯定要去查档案本了,看看小麦放在什么地址处。你想想看,如果他从第一条记录处开始查起,找到小麦得多长时间?不用说,
这肯定是很费劲儿的。你再想想看,当第一个货车拉走小麦后,又来了一辆货车(奇怪的是又是拉小麦,其实这种现象在微机中称作时间局部性:在一段相邻的时间
内,CPU访问相同数据的概率很大),司机在查找地址上又得费一番周折。再想想,如果接下来一个接一个的又来了10辆拉小麦的货车。真实郁闷了……。
呵呵,现在想想,有没有一种好办法让这个查找地址的效率提高点儿?答案是肯定的。如果在档案本的旁边再放一个快速查找记录本,记录下上次拉走的粮食种类和
地址。如果是这样再回头想想,后面来拉粮食的司机,一到仓库首先去查看这个快速查找记录本,看看有没有自己需要的记录。如果有,是不是就为自己节省了不少
时间。如果没有,再去档案本儿上查,查到后,这位司机再把自己需要的记录抄写到快速查找记录本上。这种方式是不是就大大提高了查找地址的效率。哈哈,不用
说,这个快速查找记录本就是快表TLB了。图解TLB:
显然,这个快表TLB就是页表的一个子集。当CPU需要访问内存时,现在TLB中查找需要的地址变换条目,如果该条目不存在,CPU从位于内存中的页表中查询,并把相应的结果添加到TLB中。这样,当CPU下一次又需要该地址变换条目时,就可以从TLB中直接得到,从而使地址变换的速度大大加快。