vnode VM对象,比如文件VM对象,一般需要维护它们自己的清理(clean)/ 未清理(dirty)信息,而不依赖于文件系统的清理/未清理维护。 例如,当VM系统要同步一个物理页和其对应的实际存储器, VM系统就需要在写入到实际存储器前将该页标记为已清理。 另外,文件系统要能够将文件或文件元数据的各部分映射到内核虚拟内存 (KVM)中以便操作。
用来进行这些管理的实体就是众所周知的文件系统缓存, struct buf或bp。 当文件系统需要对一个VM对象的一部分操作时, 它常会将这个对象的这部分映射到struct buf, 并且将struct buf中页映射到内核虚拟内存(KVM)中。 同样的,磁盘输入/输出通常要先将VM对象的各部分映射到buf结构体中, 然后对buf结构体进行输入/输出操作。 下层的vm_page_t在输入/输出期间通常被标记为“忙”。 文件系统缓存也会“忙”,这对于文件系统驱动程序非常有用, 对文件系统缓存操作比对VM真实页(hard)操作更好。
FreeBSD保留一定数量的内核虚拟内存来存放struct buf的映射, 但是这些buf结构体应该是被清理过的。这些内核虚拟内存仅用来存放映射, 并不限制缓存数据的能力。严格的说,物理数据缓存是 vm_page_t的一个功能,不是文件系统缓存的功能。 然而,由于文件系统缓存被用来处理输入/输出, 他们固有的限制了同时进行输入/输出可能的数量。 但是,由于通常有数千文件系统缓存可供使用,所以这并不会造成问题。
本文档和其它文档可从这里下载:ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
如果对于FreeBSD有问题,请先阅读文档,如不能解决再联系<questions@FreeBSD.org>.
关于本文档的问题请发信联系 <doc@FreeBSD.org>.