The initial push for redesigning the file system handling code was the introduction of NFS, or the Network File System. Suddenly, files could no longer be accessed directly, since they were not necessarily local and they were not necessarily UNIX files! There is nothing to prevent a completely different system with a unique OS from offering its files for access over the network. This flexibility meant that file system type information or file information had to be divided: into the parts that were general and could be used by any machine; and into the parts that were entirely specific to that file or file system type, on that system, and would have to be handled by the local system itself. Once the new design was implemented, the set of file system types that could be handled locally was also increased, even to the point of creating "pseudo" file systems that actually didn't have a file system, files, or real devices. Solaris 2 has a greatly expanded repertoire when it comes to handling file system types. Some of the more common file system or disk formats you will find:
Some examples of supporting routines for these other file system types are:
As you can see, every file system type provides the same general functions to access the data that resides there. Most system calls are processed at various levels: the general level to validate the parameters, then at the vnode level to do file-oriented things, and then at the file or file system-specific level to take care of accessing real data if needed. These are usually well named functions, and can be easily recognized as referring to a specific type of file system. |