add pseudocode for the engine
authorMart Lubbers <mart@martlubbers.net>
Thu, 1 Jun 2017 15:23:56 +0000 (17:23 +0200)
committerMart Lubbers <mart@martlubbers.net>
Thu, 1 Jun 2017 15:23:56 +0000 (17:23 +0200)
.chktexrc
methods.mtask.tex
thesis.loa [new file with mode: 0644]
thesis.tex

index a9f06b0..91bb817 100644 (file)
--- a/.chktexrc
+++ b/.chktexrc
@@ -1,4 +1,4 @@
-VerbEnvir { lstlisting }
+VerbEnvir { lstlisting algorithm }
 WipeArg {
        \CI:{}
        \texttt:{}
index 5b6128d..db31782 100644 (file)
@@ -36,11 +36,45 @@ instance isExpr Expr
 \end{lstlisting}
 
 \section{Semantics}
-\gls{mTask} do not behave like functions but more like
-\gls{iTasks}-\glspl{Task}. When an \gls{mTask} is created it returns immediatly
-and the \gls{Task} will be executed sometime in the future. \glspl{Task} can
-run at an interval and they can start other tasks.
-\todo{Meer uitwijden over de mTask semantiek}
+The \gls{C}-backend of the \gls{mTask}-system has an engine that is generated
+alongside the code for the \glspl{Task}. This engine will execute the
+\glspl{mTask} according to certain rules and semantics.
+\glspl{mTask} do not behave like functions but more like
+\gls{iTasks}-\glspl{Task}. An \gls{mTask} is queued when either his timer runs
+out or when it is started by another \gls{mTask}. When an \gls{mTask} is
+queued it does not block the execution but it will return immediately while
+the actual \gls{Task} will be executed some time in the future.
+
+The \gls{iTasks}-backend simulates the \gls{C}-backend and thus uses the same
+semantics. This engine expressed in pseudocode is listed as
+Algorithm~\ref{lst:engine}. All the \glspl{Task} are inspected on their waiting
+time. When the waiting time has not passed the delta is subtracted and they are
+pushed to the end of the queue. When the waiting has has surpassed they are
+executed. When a \gls{mTask} wants to queue another \gls{mTask} it can just
+append it to the queue.
+
+\begin{algorithm}[H]
+       \KwData{\textbf{queue} queue$[]$, \textbf{time} $t, t_p$}
+
+       $t\leftarrow\text{now}()$\;
+       \Begin{
+               \While{true}{
+                       $t_p\leftarrow t$\;
+                       $t\leftarrow\text{now}()$\;
+                       \If{notEmpty$($queue$)$}{
+                               $task\leftarrow \text{queue.pop}()$\;
+                               $task$.wait $-= t-t_p$\;
+                               \eIf{$task.wait>t_0$}{
+                                       queue.append$(task)$\;
+                               }{
+                                       run\_task$(task)$\;
+                               }
+                       }
+               }
+       }
+       \caption{Engine pseudocode for the \gls{C}- and
+               \gls{iTasks}-backends}\label{lst:engine}
+\end{algorithm}
 
 \section{Expressions}
 Expressions in the \gls{mTask}-\gls{EDSL} are divided into two types, namely
diff --git a/thesis.loa b/thesis.loa
new file mode 100644 (file)
index 0000000..813f3bb
--- /dev/null
@@ -0,0 +1,10 @@
+\addvspace {10\p@ }
+\addvspace {10\p@ }
+\addvspace {10\p@ }
+\addvspace {10\p@ }
+\contentsline {algocf}{\numberline {1}{\ignorespaces Engine pseudocode for the \gls {C}- and \gls {iTasks}-backends\relax }}{14}{algocf.1}
+\addvspace {10\p@ }
+\addvspace {10\p@ }
+\addvspace {10\p@ }
+\addvspace {10\p@ }
+\addvspace {10\p@ }
index 7b45b95..519f9c2 100644 (file)
@@ -1,5 +1,6 @@
 %&thesis
-\usepackage[nonumberlist,acronyms]{glossaries}
+\usepackage[nonumberlist,acronyms]{glossaries}  % Glossaries and acronyms
+\usepackage[]{algorithm2e}                      % Pseudocode
 \makeglossaries%
 
 \input{acronyms}
 \addcontentsline{toc}{chapter}{Lists of \ldots}
 \begingroup
 \let\clearpage\relax
-\listoffigures
-\listoftables
-\lstlistoflistings{}
+\listoffigures%
+\listoftables%
+\lstlistoflistings%
+\listofalgorithms%
 \endgroup
 
 \end{document}