1
0
mirror of https://github.com/dhil/phd-dissertation synced 2026-03-13 02:58:26 +00:00

Code for session management

This commit is contained in:
2020-10-02 01:48:39 +01:00
parent fe255ba70e
commit 2a50b7402c
2 changed files with 52 additions and 8 deletions

View File

@@ -348,6 +348,9 @@
\newcommand{\Root}{\dec{Root}} \newcommand{\Root}{\dec{Root}}
\newcommand{\User}{\dec{User}} \newcommand{\User}{\dec{User}}
\newcommand{\environment}{\dec{env}} \newcommand{\environment}{\dec{env}}
\newcommand{\EnvE}{\dec{Env}} \newcommand{\EnvE}{\dec{Session}}
\newcommand{\Ask}{\dec{Ask}} \newcommand{\Ask}{\dec{Ask}}
\newcommand{\whoami}{\dec{whoami}} \newcommand{\whoami}{\dec{whoami}}
\newcommand{\Su}{\dec{Su}}
\newcommand{\su}{\dec{su}}
\newcommand{\sessionmgr}{\dec{sessionmgr}}

View File

@@ -2185,11 +2185,11 @@ For simplicity we will fix the users to be root, Alice, and Bob.
Our environment will only support a single environment variable Our environment will only support a single environment variable
intended to store the name of the current user. The value of this intended to store the name of the current user. The value of this
variable can be accessed via an operation $\Ask$. variable can be accessed via an operation $\Ask : \UnitType \opto \String$.
% %
\[ % \[
\EnvE \defas \{\Ask : \UnitType \opto \String\} % \EnvE \defas \{\Ask : \UnitType \opto \String\}
\] % \]
% %
Using this operation we can readily implement the \emph{whoami} Using this operation we can readily implement the \emph{whoami}
utility from the GNU coreutils~\cite[Section~20.3]{MacKenzieMPPBYS20}, utility from the GNU coreutils~\cite[Section~20.3]{MacKenzieMPPBYS20},
@@ -2197,7 +2197,7 @@ which returns the name of the current user.
% %
\[ \[
\bl \bl
\whoami : \UnitType \to \String \eff \EnvE\\ \whoami : \UnitType \to \String \eff \{\Ask : \UnitType \opto \String\}\\
\whoami~\Unit \defas \Do\;\Ask~\Unit \whoami~\Unit \defas \Do\;\Ask~\Unit
\el \el
\] \]
@@ -2206,7 +2206,7 @@ The following handler implements the environment.
% %
\[ \[
\bl \bl
\environment : \Record{\User;\UnitType \to \alpha \eff \EnvE} \to \alpha\\ \environment : \Record{\User;\UnitType \to \alpha \eff \{\Ask : \UnitType \opto \String\}} \to \alpha\\
\environment~\Record{user;m} \defas \environment~\Record{user;m} \defas
\ba[t]{@{~}l} \ba[t]{@{~}l}
\Handle\;m\,\Unit\;\With\\ \Handle\;m\,\Unit\;\With\\
@@ -2245,7 +2245,48 @@ embrace UNIX's laissez-faire attitude and resume with the empty
string. string.
\paragraph{Session management} \paragraph{Session management}
%
\[
\EnvE \defas \{\Ask : \UnitType \opto \String;\Su : \User \opto \UnitType\}
\]
\[
\bl
\su : \User \to \UnitType \eff \{\Su : \User \opto \UnitType\}\\
\su~user \defas \Do\;\Su~user
\el
\]
\[
\bl
\sessionmgr : \Record{\User; \UnitType \to \alpha \eff \EnvE} \to \alpha\\
\sessionmgr~\Record{user;m} \defas
\environment\,\langle{}user;(\lambda\Unit.
\ba[t]{@{~}l}
\Handle\;m\,\Unit\;\With\\
~\ba{@{~}l@{~}c@{~}l}
\Return\;res &\mapsto& res\\
\Su~user'~resume &\mapsto& \environment\,\Record{user';resume})\rangle
\ea
\ea
\el
\]
\[
\ba{@{~}l@{~}l}
&\bl
\basicIO\,(\lambda\Unit.\\
\qquad\sessionmgr\,\Record{\Root;\lambda\Unit.\\
\qquad\qquad\status\,(\lambda\Unit.
\ba[t]{@{}l@{~}l}
\su~\Alice;&\fwrite\,\Record{\stdout;\whoami\,\Unit};~\fwrite\,\Record{\stdout;\texttt{" "}};\\
\su~\Bob;&\fwrite\,\Record{\stdout;\whoami\,\Unit};~\fwrite\,\Record{\stdout;\texttt{" "}};\\
\su~\Root;&\fwrite\,\Record{\stdout;\whoami\,\Unit})})
\ea
\el \smallskip\\
\reducesto^+& \Record{0;\texttt{"alice bob root"}} : \Record{\Int;\UFile}
\ea
\]
\subsection{Nondeterminism: time sharing} \subsection{Nondeterminism: time sharing}
\label{sec:tiny-unix-time} \label{sec:tiny-unix-time}