Jon:
How about the scheme used for the UNIX file system's inodes? It deals with exceptional cases (large files) with indirection to elements of the backing store, which are brought into memory as needed. This relieves the memory pressure while ensuring performance in the common case. In your context, there might be a descriptor which refers to block numbers on the backing store. The file system's buffer cache has some nice ideas, some of which might be absorbed.
-Jonathan
My impression is that this depends on keeping the file system logic in
the kernel. Without doing so, the kernel has no way to interpret the
indirection pages. A complicating issue is that disk-based allocation
units (sectors) are not the same size as memory-based allocation units
(pages), and there is no guarantee that a page of data in a file is
stored contiguously on the disk. I have an idea about this that I will
mail out shortly.
In spite of this, I think what you suggest is basically a good aproach, and I'm trying to come up with a mechanism that places an FS-independent protocol around it. I'm willing (nay! eager) to have the kernel directly initiate loads of local pages from the disk when the pages are contiguously allocated.
How this should be handled for remote access is more convoluted. The solution that solves the noncontiguous allocation problem should work for this too.
Jonathan