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.
This, and other documents, can be downloaded from http://ftp.FreeBSD.org/pub/FreeBSD/doc/
For questions about FreeBSD, read the
documentation before
contacting <questions@FreeBSD.org>.
For questions about this documentation, e-mail <doc@FreeBSD.org>.