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>.