FreeBSD将物理页表结构从VM系统中分离了出来。各进程的所有页表可以脱离进程 (on the fly)重建,并且通常被认为是一次性的。特殊的页表,如内核虚拟内存(KVM), 常常是被永久性预分配的;这些页表不是一次性的。
FreeBSD通过vm_map_t
和vm_entry_t
结构将虚拟内存中vm_objects
的各地址范围部分关联起来。
页表被直接的从
vm_map_t
/vm_entry_t
/vm_object_t
中有层次的合成出来。这里需要重申一下,我曾提到的“物理页仅直接与
vm_object
相关联”并不很正确。vm_page_t
也被会被链接到正在与之相关联的页表中。当页表被调用时,
一个vm_page_t
结构体可以被链接到几个pmaps。
然而,由于有了层次的关联,因此在对象中所有对同一页的引用会引用同一
vm_page_t
结构体,这样就实现了跨区域(board)的缓存的统一。
本文档和其它文档可从这里下载: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
如果对于FreeBSD有问题,请先阅读
文档,如不能解决再联系
<questions@FreeBSD.org>.
关于本文档的问题请发信联系
<doc@FreeBSD.org>.