aboutsummaryrefslogtreecommitdiff
path: root/doku
diff options
context:
space:
mode:
authorMichael Stapelberg <michael@stapelberg.de>2011-01-14 11:56:38 +0100
committerMichael Stapelberg <michael@stapelberg.de>2011-01-14 11:56:38 +0100
commitb7b4c5a98c47464ca54ff2aff3fda9e3c3944c14 (patch)
tree6c734feb29a6b2efd22304e2ed4e5815cf509245 /doku
parentef56970db25fa640769d0f391c160b06b9390c17 (diff)
downloadprozesskommunikation-b7b4c5a98c47464ca54ff2aff3fda9e3c3944c14.tar.gz
prozesskommunikation-b7b4c5a98c47464ca54ff2aff3fda9e3c3944c14.tar.bz2
kleine Fehler in der Doku behoben
Diffstat (limited to 'doku')
-rw-r--r--doku/doku.tex52
1 files changed, 28 insertions, 24 deletions
diff --git a/doku/doku.tex b/doku/doku.tex
index 2e8ef14..e6efca5 100644
--- a/doku/doku.tex
+++ b/doku/doku.tex
@@ -16,6 +16,7 @@
\begin{document}
\pagestyle{fancy}
\chead{BTS}
+\lhead{}
% New paragraph
\newcommand{\np}{\bigskip\noindent}
@@ -25,9 +26,9 @@
\section{Grundgerüst}
Das Grundgerüst wird in Teilaufgabe 2, 3 und 4 verwendet und startet die
-verschiedenen Prozesse. Dies wird durch die Funktion \texttt{fork\_child()}
+verschiedenen Prozesse. Dies wird durch die Funktion \texttt{fork\_child}
erledigt, welche als Parameter zwei Zeiger auf Funktionen erwartet. Der erste
-Zeiger zeigt auf eine Funktion, welche die eigentlich Arbeit des Prozesses
+Zeiger zeigt auf eine Funktion, welche die eigentliche Arbeit des Prozesses
erledigt, der zweite Zeiger auf eine Aufräumfunktion. Das Definieren und
Benutzen der \texttt{fork\_child}-Funktion erspart uns viel redundanten Code.
\np
@@ -35,8 +36,8 @@ Benutzen der \texttt{fork\_child}-Funktion erspart uns viel redundanten Code.
Die Funktion ruft zunächst \texttt{fork} auf, um den Programmverlauf zu
teilen. Im Kindprozess wird dann ein Signalhandler für das Signal
\texttt{SIGINT} (Unterbrechung durch Ctrl-C) eingerichtet (hierfür wird der
-Aufräum-Funktionszeiger genutzt). Anschließend wird der erste Funktionszeiger
-aufgerufen. Dieser Aufruf kehrt nicht mehr zurück, da in allen Prozessen eine
+Aufräum-Funktionszeiger genutzt). An\-schließ\-end wird der erste Funktionszeiger
+aufgerufen. Dieser Aufruf kehrt nicht mehr zu\-rück, da in allen Prozessen eine
Endlosschleife enthalten ist.
\np
@@ -49,9 +50,9 @@ Elternprozesses korrekt beendet und geben ihre Resourcen frei.
\subsection{Conv-Prozess}
Der \texttt{Conv}-Prozess generiert mithilfe von \texttt{rand} eine
-ganzzahlige Zufallszahl. Dies entspricht dem Einlesen eines Werts von einem
-Analog-Digital-Wandler. Dieser Wert wird anschließend zum \texttt{Log}- und zum
-\texttt{Statistik}-Prozess gesendet.
+ganzzahlige positive Zufallszahl. Dies entspricht dem Einlesen eines Werts von
+einem Analog-Digital-Wandler. Dieser Wert wird anschließend zum \texttt{Log}-
+und zum \texttt{Statistik}-Prozess gesendet.
\np
Der \texttt{Conv}-Prozess hat per se keinerlei dynamische Resourcen, die
@@ -66,7 +67,7 @@ direkt in die Datei geschrieben. Es wird hierbei nicht via \texttt{fflush}
sichergestellt, dass die Ausgabe tatsächlich auf die Festplatte geschrieben
wurde. Stattdessen wird darauf vertraut, dass \texttt{fclose} beim Beenden des
Programms aufgerufen wird, wobei alle Daten aus dem Puffer auf die Platte
-geschrieen werden.
+geschrieben werden.
\np
Der \texttt{Log}-Prozess gibt via \texttt{fclose} das Dateihandle frei, welches
@@ -74,9 +75,9 @@ er beim Start geöffnet hat.
\subsection{Statistik-Prozess}
-Der \texttt{Statistik}-Prozess empfängt je 5 Datenwerte und bildet anschließend
-das arithmetische Mittel über die empfangenen Werte. Das gebildete Mittel
-schickt er wiederum an den \texttt{Monitor}-Prozess.
+Der \texttt{Statistik}-Prozess empfängt Datenwerte und bildet anschließend
+den Mittelwert über die empfangenen Werte. Das gebildete Mittel schickt er
+wiederum an den \texttt{Monitor}-Prozess.
\np
Da dieser Prozess ausschließlich mit statischen Puffern arbeitet hat er per se
@@ -124,40 +125,43 @@ also als 1-Byte-Integer ohne Vorzeichen gespeichert.
\subsection{Initialisierung: queue\_init}
\texttt{queue\_init} erstellt via \texttt{shm\_open} das Shared Memory-Segment,
-setzt die Größe und bildet es in den Arbeitsspeicher des Programms ab.
-Weiterhin wird der Speicherbereich mit Nullen initialisiert und der Semaphor
-initialisiert. Da bei einem \texttt{fork} der Arbeitsspeicher nicht verändert
-wird, ist die Abbildung des Shared Memory-Segments auch in den Kindprozessen
-ohne weitere Initialisierung direkt nutzbar.
+setzt die Größe (in Bytes) und bildet es in den Arbeitsspeicher des Programms
+ab. Weiterhin wird der Speicherbereich mit Nullen initialisiert und der
+Semaphor initialisiert. Da bei einem \texttt{fork} der Arbeitsspeicher nicht
+verändert wird, ist die Abbildung des Shared Memory-Segments auch in den
+Kindprozessen ohne weitere Initialisierung direkt nutzbar.
\subsection{Schreiben eines neuen Eintrags: queue\_write}
In der Funktion \texttt{queue\_write} wird zunächst via Semaphor die
-Datenstruktur gesperrt. Das ist nötig, damit anschließend deterministisch die
+Datenstruktur gesperrt. Dies ist nötig, damit anschließend deterministisch die
Stelle bestimmt werden kann, an welcher das nächste Element eingefügt wird.
Diese wird dadurch gefunden, dass frisch initialisierte und bereits bearbeitete
-Einträge den Wert \texttt{D\_INVALID} als \texttt{dir} (Direction) haben.
+Einträge den Wert \texttt{D\_INVALID} als \texttt{dir} (Direction) besitzen.
+\np
Nun wird das Element via \texttt{memcpy} kopiert, der \texttt{cur}-Wert im
Header (für das aktuelle Element) angepasst und der Semaphor wieder entsperrt.
\subsection{Richtung des aktuellen Eintrags abrufen}
-Die Richtung des aktuellen Eintrags kann man sehr einfach herausfinden, indem
+Die Richtung des aktuellen Eintrags lässt sich sehr einfach herausfinden, indem
das aktuelle Element ermittelt wird und anschließend der \texttt{dir}-Wert
zurückgegeben wird.
+\np
Diese Funktion arbeitet ohne Locks oder zusätzliche Variablen auf dem Stack. Da
sie in einer Schleife permanent aufgerufen wird, solange die einzelnen Prozesse
-warten, ist das eine gute Eigenschaft.
+warten, ist dies eine gute Eigenschaft.
\subsection{Daten abrufen und Element invalidieren: queue\_get\_data}
Da durch die Richtung (\texttt{dir}) immer klar ist, von welchem Prozess die
-Nachricht kommt und an welchen sie gerichtet ist, ruft kein Prozess
-\texttt{queue\_get\_data} auf, der mit den Daten nichts anfangen kann. Deshalb
-haben wir uns entschieden, die Funktion atomar den Datenwert der aktuellen
-Nachricht zurückgeben zu lassen und diesen gleichzeitig zu invalidieren.
+Nachricht kommt und an welchen sie gerichtet ist, ruft immer genau der richtige
+Prozess \texttt{queue\_\-get\_\-data} auf, und sonst keiner. Deshalb haben wir uns
+entschieden, die Funktion atomar den Datenwert der aktuellen Nachricht
+zurückgeben zu lassen und diesen gleichzeitig zu invalidieren.
+\np
Die Invalidierung geschieht, indem der \texttt{dir}-Wert auf
\texttt{D\_INVALID} gesetzt und der \texttt{cur}-Wert im Header auf das nächste