The inter-process communication mechanism described above fits the needs of inter-domain invocation quite well, but is not appropriate for stream based bulk transfer of data. Besides Pipes and Streams, schemes for controlling such transfers are more often integrated with network buffering and include Mbufs, IOBufs, Fbufs and other schemes to support application data unit (ADU) transfer such as the IP trailers scheme found in some versions of BSD. A full discussion of these schemes can be found in .
The scheme presented here, RBufs, is intended as the principal mechanism for both interdomain streams and for streams between devices and application domains. The main design considerations are based on the requirements for networking and it is in that context it is presented; however, as is demonstrated with the fileserver example, it is also intended for more general stream I/O use.
The requirements for an I/O buffering system in Nemesis are slightly different from all of the above systems. In Nemesis, applications can negotiate for resources which possess availability guarantees. This means that an application can have a certain amount of buffer memory which will not be paged. If the system is short of memory then the QoS Manager will require the application to free a certain amount. Hence, like the Fbuf system, there is no need for highly dynamic reallocation of buffers between different I/O data paths. Also it would be preferable if multi-recipient data need not be copied.