Multimedia systems typically involve a number of datastreams representing highly dense multimedia data which must be transferred extremely efficiently through the system. A representative example is "video-on-demand" server system. Various methods have been devised for attempting to efficiently move the data through these systems. Many of these systems utilize as their operating system the familiarUnix operating system or a derivative thereof, typically found in client-server environments such as those which implement multimedia content delivery systems. An inherent and seriously defective aspect of such Unix-based systems is that the mechanisms employed therein for moving data are not optimized for efficiency as is required in systems involving highly complex multimedia datastreams.
The video coupling subsystem (VCS) of the invention, to be hereinafter described in greater detail, provides a producer/consumer framework for transferring data between producer and consumer devices in an extremely efficient manner within such Unix or Unix-derivative kernel environments. Traditional methods have employed copying of such data from the kernel to user space and then back again to the kernel. Moreover, such systems involve a great deal of CPU overhead associated with context switches. For a Multimedia File System (MMFS) in which the multimedia data resides to act as a producer within a zero copy framework (employed for efficiency because of its avoidance of copying of data and lessened CPU overhead) such an MMFS must supply buffers of data to be transferred within an interrupt context at an interrupt level. However, this presents a serious problem in that file system operations (such as those associated with Unix-based systems), normally must run in a process context rather than an interrupt context.
Additional problems presented by conventional subsystems in order to effect efficient transfer of multimedia datastream information gave rise to innovations in the invention including finding and locking buffers at an interrupt level, communicating prefetch information to a daemon process utilized to prefetch buffers of file data in advance of when they are needed at the interrupt level, handling serialization with concurrent writer to the file, and more generally, devising a general purpose file system interface to support zero copy in a VCS framework.
In order to more fully understand the contributions and nuances of the invention, it will first be helpful to provide a generalized description of basic components and modules in a multimedia system such as that depicted in FIG. 1.
In accordance with the invention a "zero copy" or video coupling subsystem "VCS" 48 is provided for moving data between the file system 22 and the network or video decoder cards without having to copy the data from kernel to user space. While this VCS has been shown in the depiction in FIG. 1 of a conventional system so that it may clearly be seen where it fits in such a system, it is actually an aspect of the novel contributions of the invention. It will accordingly be described in greater detail with respect to the Description of the Invention. As such, the combination of the various subsystems including the file system, data exporter, VCS, and NARs will hereinafter be referred to more generally as the data pump subsystem 14A driven by a control server 14B, in turn driven by an application server I/O.
In an effort to address the previously described problems, it has been known to attempt to effect a zero-copy mechanism by developing separate subsystems in order to manager the buffers which transfer data from mass storage to a consumer device. Such an approach however, has been extremely problematic and relates to the reason why data is brought into shared memory in the first place, e.g., to effect timely management of data so as to provide an efficient mechanism for transferring it while avoiding copying of the data and associated CPU overhead.
In these systems, it has been conventional to effectively export this function (management of the shared data) to separate custom-designed new modules which themselves must solve the problem of effecting the correct sharing of data. Accordingly, a mechanism was highly sought after wherein the necessary control and buffering knowledge could remain with the original file system. In this manner any current policies associated with the data control and buffering already implemented in the pre-existing file system could be advantageously maintained.