\documentclass[11pt]{article}
\usepackage[T1]{fontenc}
\usepackage{amsmath, amsfonts, amssymb, amsthm, url, algorithmicx,
    algpseudocode, lmodern, color, graphicx}

\title{Redox and system calls -- a multi-level kernel space}
\author{Redox OS developers}
\date{\today}

\begin{document}
    \maketitle

    %%% DISCLAIMER %%%

    \begin{titlepage}
        \centering \huge\bfseries The following document is an incomplete draft.
    \end{titlepage}

    %%% START OF DOCUMENT %%%

    \maketitle

    \begin{abstract}
        In this paper, we review Redox's core system call interface. Redox has
        multiple levels of kernel space, and the top one consists of a very
        minimal system call interface, which we go over here.
    \end{abstract}

    \section{Introduction}
    TODO

    \section{Executing system calls}
    We allow multiplied system calls, a generalized version of concept of
    multicalls in the \emph{kqueue} system call.

    Depending on the platform, system calls might be sent through interrupts or
    \texttt{sysenter}. What we are really interested in, though, is the state
    when we leave user space.

    \begin{description}
        \item [\texttt{rax}/\texttt{eax}] stores the pointer to the array of system calls.
        \item [\texttt{rbx}/\texttt{ebx}] stores the number of system calls in
            this bundle.
    \end{description}

    \section{The interface}
    Each entry in this system call bundle buffer needs an ABI representation.
    We represent the interface for the \emph{core system calls}.

    The representation is as follows:

    \begin{description}
        \item [The system call ID] this is an unsigned 16-bit integer
            representing which system call is used.
        \item [First argument] this 64-bit integer is used as defined by the
            system call.
        \item [Second argument] this 64-bit integer is used as defined by the
            system call.
    \end{description}

    The return value of the system call is placed in the respective element.

    \subsection{Access management}
    The memory access management is a set of system calls taken pointer and
    size, respectively.

    It contains of four calls:

    \begin{description}
        \item [Make memory readable].
        \item [Make memory unreadable].
        \item [Make memory writable].
        \item [Make memory unwritable].
        \item [Make memory executable].
        \item [Make memory unexecutable].
    \end{description}

    \subsection{Access management}

    %%% BIBLIOGRAPHY %%%

    \begin{thebibliography}{9}
        TODO
    \end{thebibliography}
\end{document}
