Library OSs can insert a block into the cache via
sys_bc_insert and they may probe for an entry via
__bc_lookup. Blocks may be read
and written through the cache using sys_bc_read_and_insert
and sys_bc_write_dirty_bufs. These are the non-XN
interfaces. They do protection with proxy-exonodes which are basically
just a way of associating lists of extents with capabilities. A user
has to present the right capability to read/write a block in one of
the extents. The NFS code in lib/libexeos/fd/nfs has some examples of
how to setup a dummy proxy-exonode and then use it when interacting
with the buffer cache. See the section on XN for how to read and write
blocks using it since XN is the preferred protection method.