全部博文(86)
分类: LINUX
2015-07-13 19:18:16
上节讨论了当一级描述符[1:0]为01或者11的时候表示这是一种二级页表查询方式,而一级页表描述符仅仅做为二级页表的索引。下面我们将coarse page与fine page 一起讨论,并且之处他们的区别。
Coarse page 索引了一个二级页表,这个页表描述查询是用大页,小页还是极小页。粗颗粒将1MB的空间划分为256个4KB的空间。如下图所示:
其中各个权限的控制位定义如下:
同样细颗粒所索引的二级页表也能包括大页,小页和极小页。但是它把1M空间分为1024个1KB。如下图所示:
其中权限位定义如下:
无论是粗颗粒还是细颗粒,都会在一级描述符中返回一个二级描述符,指向不同的控制页面。这些页面又会分为大页(large page),小页(small page)和极小页(tiny page)。具体是哪一种页面根据二级描述符的[1:0]定义,定义如下:
其中大页是64KB对齐,小页是4KB对齐,而极小页是1KB对齐的。对于粗颗粒只提供大页和小页对齐,而细颗粒可提供极小页对齐。这三种页面的格式定义如下表:
下面将是一个粗颗粒寻址大页的流程,从图中我们可以清楚的看到它的查询方式:
由于这种模式下粗颗粒的低四位与大页寻址的高四位重叠了,所以在实际连续的RAM中也会出现覆盖问题,这个不会影响什么所以提一下就行。(重叠16次)
并且大页在细颗粒的1情况下类似,只是重叠次数增加了。(64次)
下面再看一组小页模式,这种模式下粗颗粒时刚好不重叠的:
大家在这里注意一下:这个是粗颗粒对应小页的查询方式,实际明显可以看出对于细颗粒对应小页的查询方式会出现重叠的。
最后我想让看一下细颗粒对应极小页的这种特殊的方式,如下图:
(待续。。。)