vm_page的hash链表已经被splay树取代了

2009-05-13 03:05:07来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折


在【FreeBSD操作系统设计与实现】的第5.2节“FreeBSD虚拟内存系统概述”的末尾,提到了vm_page结构体通常是用一个全局的hash链表进行快速查找的。求诸代码,结果看了很久都没有在源码中发现所谓hash链表的影子,但【FreeBSD操作系统设计与实现】、man手册页以及源代码中的一些注释都提及了这个hash链表的存在,百思不得其解。于是决定进一步考证,去FreeBSD的网站上查历史记录。就在vm_object.c文件的历史中翻出了这么一条:
QUOTE:
Revision 1.215 / (download) - annotate - [select for diffs], Fri Oct 18 17:24:30 2002 UTC (3 years, 5 months ago) by dillon
Branch: MAIN
Changes since 1.214: +92 -58 lines
Diff to previous 1.214 (colored)
Replace the vm_page hash table with a per-vmobject splay tree. There should
be no major change in performance from this change at this time but this
will allow other work to progress:  Giant lock removal around VM system
in favor of per-object mutexes, ranged fsyncs, more optimal COMMIT rpc's for
NFS, partial filesystem syncs by the syncer, more optimal object flushing,
etc.  Note that the buffer cache is already using a similar splay tree
mechanism.
Note that a good chunk of the old hash table code is still in the tree.
Alan or I will remove it prior to the release if the new code does not
introduce unsolvable bugs, else we can revert more easily.
Submitted by:        alc        (this is Alan's code)
Approved by:        re
也就是说,vm_page的hash链表已经在2002年的10月份被替换成了splay树!联想到我前两天写的关于vm_map_entry的splay树的文章,又去查vm_map.c文件的历史记录,发现那边是在2002年的5月份引入splay树的,前后差了5个月。
通过和这本书的前身【4.4BSD操作系统设计与实现】的对比,发现关于vm_page用hash链表查找的那句话是在新版本中添加进去的。继续考证4.4BSD-Lite2的代码,原来的hash链表就是放在vm_page结构体里的:
CODE:
[Copy to clipboard]
___________________________________________________________________4.4BSD-Lite2
099  struct vm_page {
100      TAILQ_ENTRY(vm_page)    pageq;        /* queue info for FIFO
101                           * queue or free list (P) */
102      TAILQ_ENTRY(vm_page)    hashq;        /* hash table links (O)*/
103      TAILQ_ENTRY(vm_page)    listq;        /* pages in same object (O)*/
104  
105      vm_object_t        object;        /* which object am I in (O,P)*/
106      vm_offset_t        offset;        /* offset into object (O,P) */

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:FreeBSD虚存系统splay树的代码分析

下一篇:BSD程序开发版“【FreeBSD操作系统设计与实现】勘误汇总”贴链接