diff --git a/paper/redox.tex b/paper/redox.tex new file mode 100644 index 0000000..9e250ba --- /dev/null +++ b/paper/redox.tex @@ -0,0 +1,85 @@ +\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}