FreeBSD separates the physical page table topology from the VM system. All hard per-process page tables can be reconstructed on the fly and are usually considered throwaway. Special page tables such as those managing KVM are typically permanently preallocated. These page tables are not throwaway.
FreeBSD associates portions of vm_objects with address
ranges in virtual memory through vm_map_t
and
vm_entry_t
structures. Page tables are
directly synthesized from the
vm_map_t
/vm_entry_t
/
vm_object_t
hierarchy. Recall that I
mentioned that physical pages are only directly associated with
a vm_object
; that is not quite true.
vm_page_t
's are also linked into page tables
that they are actively associated with. One
vm_page_t
can be linked into several
pmaps, as page tables are called. However,
the hierarchical association holds, so all references to the
same page in the same object reference the same
vm_page_t
and thus give us buffer cache
unification across the board.
All FreeBSD documents are available for download at https://download.freebsd.org/ftp/doc/
Questions that are not answered by the
documentation may be
sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.