阅读背景:

2.6内核新引入的反向映射

来源:互联网 

(本文基于2.6.1内核,参考2.6.9内核)反向映射是2.6内核中新引入的一个机制,主要是为了加速页面置换的时候的效率,由于内核中的页面是不区分进程的,多个进程很有可能会共享一个页面,内核只管每个页面必须和一个或者多个pte对应,反过来,每一个present位为1的pte必须和一个页面相对应,这个反过来的对应是个一一映射关系,但是前面的却不然,也就是说页面到pte的映射却不是一一映射的关系,而在一个页面将要被换出物理内存的时候必须实时更新与之相关的各个pte,由此得出的问题就是必须扫描所有的进程的所有的pte,只要找到pte所对应的页面是将要被换出的页面就更新之,这样效率未免太低下,为什么呢?因为页面被换出本应该只涉及页面和与该页面相关的实体,如果为了找到这些所谓的相关实体而消耗大量的时间和空间资源,那么这必然是一个瓶颈,并且这个缺陷是一定可以弥补的,为什么可以弥补呢?因为我们需要做的仅仅是记录下和此页面相关的实体就可以了,而不是通过遍历寻找的方式,这样可以滤去很多无关的查找,必然的一种可能是浪费了空间来存储额外的信息,带来的优惠就是节省了大量的时间,这就是反向映射的设计初衷,那么反向映射是怎么实现的呢?最简单的实现就是在page数据结构中扩展一个字段,实际上是一个链表,里面链接所有指向这个page的pte,换出该页面的时候遍历这个链表就会得到所有的需要更新的pte,这也是2.6的早期版本中使用的方式:(本文基于2.6.1内核,参考2.6.9内核)反向映射是2.6内核中新引入的一个机制,主要是为




你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: