\section{Virtual Filesystem (VFS)}
\begin{frame}
   {VFS}
   The \textbf{V}irtual \textbf{F}ile\textbf{S}ystem (\textbf{VFS}):
   \begin{itemize}
      \item Abstraction layer
      \item Communicates between the kernel and the real
      filesystems (on all storage media)
      \item Real filesystems register with the
      \textbf{VFS} layer
   \end{itemize}

\end{frame}

\cprotect\note{

   \textbf{Linux} implements a \textbf{Virtual File System} (VFS), as do
   all modern operating systems.  When an application needs to
   access a file it interacts with the \textbf{VFS} abstraction
   layer, which then translates all the I/O system calls
   (reading, writing etc.) into specific code relevant to the
   particular actual filesystem.

   Thus neither the specific actual filesystem or physical
   media and hardware on which it resides need be considered by
   applications.  Furthermore, network filesystems (such as
   \textbf{NFS}) can be handled transparently.

   This permits \textbf{Linux} to work with more filesystem
   varieties than any other operating system. This democratic
   attribute has been a large factor in its success.

   Most filesystems have full read and write access while a few
   have only read access and perhaps experimental write access.
   Some filesystem types, especially non-\textbf{UNIX} based
   ones, may require more manipulation in order to be
   represented in the \textbf{VFS}.

   Variants such as \textbf{vfat} do not have distinct
   read/write/execute permissions for the owner/group/world
   fields; the \textbf{VFS} has to make an assumption about how
   to specify distinct permissions for the three types of user,
   and such behavior can be influenced by mounting operations.
   There are non-kernel filesystem implementations, such as the
   read/write \textbf{ntfs-3g}
   (\url{https://sourceforge.net/projects/ntfs-3g/})
   which are reliable but have weaker performance than
   in-kernel filesystems.

}





