From 97e0a787bd7ef82448513720552b13771a532516 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Hillerstr=C3=B6m?= Date: Fri, 16 Oct 2020 12:52:43 +0100 Subject: [PATCH] Rewording --- thesis.tex | 61 ++++++++++++++++++++++++++++++------------------------ 1 file changed, 34 insertions(+), 27 deletions(-) diff --git a/thesis.tex b/thesis.tex index 614012f..13ed26c 100644 --- a/thesis.tex +++ b/thesis.tex @@ -2877,14 +2877,13 @@ goes: art is in the eye of the beholder. Thus far the system supports limited I/O, abnormal process termination, multiple user sessions, and multi-tasking via concurrent -processes. With the notable exception of I/O the system models the -core features of a practical operating system. The current I/O model -provides an incomplete file system consisting of a single write-only -file. +processes. At this stage we have most of core features in place. We +still have to complete the I/O model. The current I/O model provides +an incomplete file system consisting of a single write-only file. % -In this section we will complete the file system by implementing a -\UNIX{}-like file system that supports file creation, opening, -truncation, read and write operations, and file linking. +In this section we will implement a \UNIX{}-like file system that +supports file creation, opening, truncation, read and write +operations, and file linking. % To implement a file system we will need to use state. State can @@ -2978,19 +2977,26 @@ completion of $m$ to invoke the $\Return$-case. Since $\Get$ does not modify the value of the state cell it passes $st$ unmodified to the next handler activation. % -The $\Put$-case discards the current state value $st$ and replaces it -by the value $st'$. +In the $\Put$-case the resumption must also produce a state-accepting +function of the same type, however, the type of the resumption is +slightly different +$resume : \UnitType \to \beta \to \Record{\alpha, \beta}$. The unit +type is the expected return type of $\Put$. The state-accepting +function arising from $resume~\Unit$ is supplied with the new state +value $st'$. This application effectively discards the current state +value $st$. -Operationally, evaluation of the sub-computation $m$ gets suspended -when it either invokes an operation or returns a value upon which the -corresponding clause in the handler definition returns a state -accepting function. This function gets bound to $run$ which is -subsequently applied to the initial state $init$, thereby continuing -evaluation of the stateful fragment of $m$. +The first operation invocation in $m$, or if it completes without +invoking $\Get$ or $\Put$, the handler returns a function that accepts +the initial state. The function gets bound to $run$ which is +subsequently applied to the provided initial state $st_0$ which causes +evaluation of the stateful fragment of $m$ to continue. +% +\dhil{Discuss briefly local vs global state~\cite{PauwelsSM19}} \subsubsection{Basic sequential file system} - +% \begin{figure} \centering \begin{tabular}[t]{| l |} @@ -3039,15 +3045,15 @@ evaluation of the stateful fragment of $m$. \hline \end{tabular} %% Hamlet arrows. - \tikz[remember picture,overlay]\draw[->,thick,out=30,in=160] ([xshift=1.3cm,yshift=0.1cm]pic cs:hamlet) to ([xshift=-0.85cm,yshift=0.1cm]pic cs:hamletino) node[] {}; + \tikz[remember picture,overlay]\draw[->,thick,out=30,in=160] ([xshift=1.23cm,yshift=0.1cm]pic cs:hamlet) to ([xshift=-0.85cm,yshift=0.1cm]pic cs:hamletino) node[] {}; \tikz[remember picture,overlay]\draw[->,thick,out=30,in=180] ([xshift=0.62cm,yshift=0.1cm]pic cs:hamletino) to ([xshift=-0.23cm,yshift=0.1cm]pic cs:hamletdr) node[] {}; %% Ritchie arrows. \tikz[remember picture,overlay]\draw[->,thick,out=-30,in=180] ([xshift=0.22cm,yshift=0.1cm]pic cs:ritchie) to ([xshift=-0.85cm,yshift=0.1cm]pic cs:ritchieino) node[] {}; \tikz[remember picture,overlay]\draw[->,thick,out=30,in=180] ([xshift=0.62cm,yshift=0.1cm]pic cs:ritchieino) to ([xshift=-0.23cm,yshift=0.1cm]pic cs:ritchiedr) node[] {}; %% Act3 arrow. - \tikz[remember picture,overlay]\draw[->,thick,out=10,in=210] ([xshift=1.73cm,yshift=0.1cm]pic cs:act3) to ([xshift=-0.85cm,yshift=-0.5mm]pic cs:hamletino) node[] {}; + \tikz[remember picture,overlay]\draw[->,thick,out=10,in=210] ([xshift=1.64cm,yshift=0.1cm]pic cs:act3) to ([xshift=-0.85cm,yshift=-0.5mm]pic cs:hamletino) node[] {}; %% Stdout arrows. - \tikz[remember picture,overlay]\draw[->,thick,out=30,in=180] ([xshift=1.3cm,yshift=0.1cm]pic cs:stdout) to ([xshift=-0.85cm,yshift=0.1cm]pic cs:stdoutino) node[] {}; + \tikz[remember picture,overlay]\draw[->,thick,out=30,in=180] ([xshift=1.23cm,yshift=0.1cm]pic cs:stdout) to ([xshift=-0.85cm,yshift=0.1cm]pic cs:stdoutino) node[] {}; \tikz[remember picture,overlay]\draw[->,thick,out=30,in=180] ([xshift=0.62cm,yshift=0.1cm]pic cs:stdoutino) to ([xshift=-0.23cm,yshift=0.1cm]pic cs:stdoutdr) node[] {}; \caption{\UNIX{} directory, i-list, and data region mappings.}\label{fig:unix-mappings} \end{figure} @@ -3347,12 +3353,17 @@ evaluation of the stateful fragment of $m$. \section{Parameterised handlers} \label{sec:unary-parameterised-handlers} +\subsection{Syntax and static semantics} +\subsection{Dynamic semantics} + +\subsection{Lightweight concurrency} + \begin{example}[Green threads] \dhil{Example: Lightweight threads} \end{example} -\section{Default handlers} -\label{sec:unary-default-handlers} +% \section{Default handlers} +% \label{sec:unary-default-handlers} \section{Shallow handlers} \label{sec:unary-shallow-handlers} @@ -3360,14 +3371,10 @@ evaluation of the stateful fragment of $m$. \subsection{Syntax and static semantics} \subsection{Dynamic semantics} -\subsection{Shallow handlers in action} - -\begin{example}[State handling] - foo -\end{example} +\subsection{\UNIX{}-style pipes} \begin{example}[Inversion of control] - asd + foo \end{example} \begin{example}[Communicating pipes]