\section{Kernel Modules}
\begin{frame}
   {Kernel Modules}

   \begin{itemize}
      \item Extensions to the kernel
      \item May be loaded or unloaded dynamically, as needed
      \item Often embody device drivers, network protocols, etc
      \item Located in \verb?/lib/modules/$(uname -r)?
      \item Compiled for specific kernel versions
      \item Kernel remains a \textbf{monolithic} one, not a
      \textbf{microkernel}
   \end{itemize}

\end{frame}

\cprotect\note{

   The \textbf{Linux} kernel makes extensive use of
   \textbf{modules}, which contain important software that
   can be loaded and unloaded as needed after the system
   starts.

   Many modules incorporate \textbf{device drivers} to
   control hardware either inside the system or attached
   peripherally. Other modules can control network protocols, support
   different filesystem types and many other
   purposes.

   Parameters can be specified when loading modules to
   control their behavior.
   The end result is great flexibility and agility in
   responding to changing conditions and needs.

}
\begin{frame}
   {Listing Modules in Use with lsmod}

   \begin{figure}[H]
      \includegraphics[width=0.9\textwidth]{IMAGES/lsmod}
      \caption{Using lsmod}
   \end{figure}

\end{frame}

\cprotect\note {

   Most kernel features can be configured as modules, even if
   they are almost always likely to be used.  This flexibility
   also aids in development of new features as system reboots
   are almost never needed to test during development and
   debugging.

   While other operating systems have used module-like methods,
   \textbf{Linux} uses it far more than any other operating
   system.

}
