\HeadingLevelA{A Primer on Computer System Architecture}
\label{sec:architecture_background}

Analyzing the security of a software system requires understanding the
interactions between all parts of the software's execution environment. This section attempts to summarize the architectural principles behind
a modern processor, grounded in the specific example of the Intel Core architecture\footnote{In this paper, the term \textit{Intel architecture} refers to the x86 architecture as described in Intel's SDM. The entire x86 architecture is very complex, in part due to its native support for legacy software dating back to 1990. This work considers a subset - the microarchitecture as used by modern 64-bit software only.} (the widely accessible high-end computer system at the time of publication), which offers a complex tapestry of interacting subsystems, subsets of which exemplify all architectural concepts required to reason about the security concepts in this survey.

In an effort to present an accessible view of the relevant aspects of computer architecture, this section presents each part of the computer system in introductory terms before refining these with the details of modern CPUs. Unless specified otherwise, the information here is summarized from Intel's \textit{Software Development Manual}~(SDM)~\citep{intel2015sdm}.

\input{text/architecture/overview.tex}

\input{text/architecture/resources.tex}

\input{text/architecture/rings.tex}

\input{text/architecture/addresses.tex}

\input{text/architecture/paging.tex}

\input{text/architecture/registers.tex}

\input{text/architecture/segments.tex}

\input{text/architecture/faults.tex}

\input{text/architecture/computer.tex}

\input{text/architecture/out_of_order.tex}

\input{text/architecture/caching.tex}

\input{text/architecture/interrupts.tex}

\input{text/architecture/booting.tex}

\input{text/architecture/microcode.tex}
