\newpage
\subsection{Exceptions}

Control flow is mainly dictated by program state, and manipulated using jumps, branches, calls and returns. 
To react to changes in system state, exceptional control flow is used instead.

\textbf{Low level mechanisms}
\begin{itemize}
    \item Hardware Exceptions
    \item Exceptions via combination of Hardware and OS software
\end{itemize}

\textbf{High level mechanisms}
\begin{itemize}
    \item Process context switch
    \item Signals
    \item Nonlocal jumps
    \item Language-level exceptions (e.g. Java)
\end{itemize}

Generally, on an exception, control is transferred to a handler specific to the type of exception, which investigates the situation and returns control upon success.
Mostly, this is handled via a \textit{Exception Table} which is allocated on boot. On exception, this table is indexed depending on the type of exception to locate the corresponding handler. This causes a switch to Kernel Mode.

\inlinedef \textbf{Exception}: A control transfer to the OS in reponse to an event
\begin{itemize}
    \item \textbf{Synchronous}: result of executing some instruction
    \item \textbf{Asynchronous}: result of an event external to the processor
\end{itemize}

\begin{center}
    \begin{tabular}{l|l|l}
        \textbf{Type of exception} & \textbf{Cause} & \textbf{Async/Sync} \\
        \hline
        Interrupt & Signal from I/O device          & Async     \\
        Trap      & Intentional exception           & Sync      \\
        Fault     & Potentially recoverable error   & Sync      \\
        Abort     & Nonrecoverable error            & Sync      \\
    \end{tabular}
\end{center}

\subsubsection{Synchronous Exceptions}

\inlinedef \textbf{Trap} is an intentional exception that transfers control back to the next instruction

For example, opening a file in \verb|C| executes a trap via a system call.

\inlinedef \textbf{Fault} is an unintentional, possibly recoverable exception. Either re-executes faulty instruction or aborts

For example, page faults, protection faults, floating point exceptions

\inlinedef \textbf{Abort} is unintentional and unrecoverable. Always aborts the program.

For example, a machine error.

\subsubsection{Asynchronous Exceptions}

Asynchronous Exceptions are indicated by setting the processor's (physical) interrupt pin.

For example, 
\begin{itemize}
    \item \textbf{Interrupts} are actions like network data arrival or hitting a key on the keyboard
    \item \textbf{Hard Reset Interrupts} are executed by hitting the system reset button
    \item \textbf{Soft Reset Interrupts} are caused by, for example, hitting \verb|CTRL|+\verb|ALR|+\verb|DEL| (on Windows)
\end{itemize}
