\section{Introduction to Virtualization}

\begin{frame}
   {What is Virtualization?}

   \begin{itemize}

      \item

      An abstraction layer:
      \begin{itemize}
         \item
         A \textbf{physical} resource is replaced by a
         \textbf{virtual} one
      \end{itemize}

      \item

      Types include:

      \begin{itemize}

         \item

         Operating System (e.g., \textbf{Virtual Machine, VM})

         \item

         Network (e.g., \textbf{Software Defined Networking,
            SDN})

         \item

         Storage (e.g., \textbf{Network Attached Storage, NAS})

         \item

         Application (e.g., \textbf{containers})
      \end{itemize}

      \item

      The abstraction layer may replace operating system
      specific \textbf{software}, rather than
      \textbf{hardware}

   \end{itemize}

\end{frame}

\cprotect\note{

   In this section of the course we will be concerned with
   the creation, deployment and maintenance of
   \textbf{Virtual Machines} (\textbf{VM}s).

   These are a virtualized instance of an entire operating
   system, and may fulfill the role of a \textbf{server} or a
   \textbf{desktop/workstation}.

   The outside world sees the VM as if it were an actual
   physical machine, present somewhere on the network.
   Applications running in the VM are generally unaware of
   their non-physical environment.

   Other kinds of virtualization include:

   \begin{itemize}

      \item

      \textbf{Network:} The details of the actual physical
      network such as the type of hardware, routers etc.  are
      abstracted and need not be known by software running on
      it and configuring it.

      \item

      \textbf{Storage:}

      Multiple network storage devices are configured to look
      like one big storage unit such as a disk.

      \item

      \textbf{Application:}

      An application is isolated into a stand alone format
      such as a \textbf{container}, which we will discuss
      later.

   \end{itemize}

   There are differences between physical and virtual
   machines which are not always easy to ignore.  For
   example, performance tuning at a low level needs to be
   done (separately) on both the VM and the physical machine
   residing underneath it.

}

\begin{frame}
   {Virtualization History}
   \begin{itemize}
      \item Implemented originally on mainframes decades ago:
      \begin{itemize}
         \item Enables better hardware utilization
         \item Operating Systems often progress more quickly than hardware
         \item Microcode driven
         \item Not particularly user friendly
      \end{itemize}
      \item Virtualization technology migrated to PCs and  workstations:
      \begin{itemize}
         \item Initially done using \textbf{Emulation}
         \item CPUs enhanced to support Virtualization led to boost
         in performance, easier configuration and more flexibility
         in VM installation and migration
      \end{itemize}
   \end{itemize}

\end{frame}

\cprotect\note{

   \textbf{Virtualization} has a long proud history. From
   early \textbf{mainframes} to \textbf{mini-computers},
   virtualization has been used for expanding limits,
   debugging and administration enhancements.

   Today, virtualization can be found everywhere in many
   forms.

   Each of the different forms and implementations available
   provide particular advantages.
}
\section{Hosts and Guests}
\begin{frame}
   {Hosts and Guests}

   \begin{itemize}

      \item \textbf{Host:}

      Underlying physical operating system managing one or
      more virtual machines

      \item \textbf{Guest:}

      The \textbf{VM} which is instance of a complete
      operating system, running one or more applications.
      Sometimes called a \textbf{client}

      \item

      Guest does not care or know the specific host

      \item

      Guests can be \textbf{migrated} to another host

      \item

      Performance tuning needs to be done on host as well as
      guest

   \end{itemize}

\end{frame}

\cprotect\note{

   In most cases the guest should not care what host it is
   running on and can be \textbf{migrated} from one host to
   another, sometimes while actually running.

   In fact, it is possible to convert physical machines into
   virtual ones, by copying the entire contents into a VM.
   Specialized software utilities can make this easier.

   Low level performance tuning on areas such as CPU
   utilization, networking throughput, memory utilization is
   often best done on the host, as the guest may have only
   simulated qualities not directly useful.

   Application tuning will be done mostly on the guest.

}
