In state-of-the-art, general-purpose operating systems, each major I/O subsystem employs its own buffering and caching mechanism.
The UNIX file system employs a separate mechanism designed to allow the buffering and caching of logical disk blocks (and more generally, data from block-oriented devices).
No support is provided in UNIX systems for buffering and caching at the user level.
3) Lack of cross-subsystem optimization: Separate buffering mechanisms make it difficult for individual subsystems to recognize opportunities for optimizations.
First, it extends the fbuf approach from the network subsystem to the file system, including the file data cache, thus unifying the buffering of I/O data throughout the system.
Multiple buffering occurs because a given document may simultaneously be stored in the file cache and in the TCP retransmission buffers of potentially multiple client connections.
With IO-Lite, all data copying and multiple buffering is eliminated.
Caching of dynamic content in a CGI program can aggravate the multiple buffering problem: primary files used to synthesize dynamic content may now be stored in the file cache, in the CGI program's cache as part of a dynamic page, in the Web server's holding buffers, and in the TCP retransmission buffers.