IPC : added some bugs
This commit is contained in:
84
chap/IPC.tex
84
chap/IPC.tex
@@ -4,7 +4,8 @@
|
||||
\textit{Inter Process Communication.}
|
||||
|
||||
Il existe deux familles bien distinctes. Nous allons donc
|
||||
les voir dans le plus grand des désordres.
|
||||
les voir dans le plus grand des désordres, en commençant
|
||||
par les grands classiques.
|
||||
|
||||
% ================================================================
|
||||
|
||||
@@ -68,7 +69,84 @@ Mémoire partagée.
|
||||
|
||||
% ================================================================
|
||||
|
||||
\section{named pipe}
|
||||
\section{named pipe} \label{named-pipe}
|
||||
\index{fifo}
|
||||
|
||||
Un « FIFO » (ou « tube nommé ») peut être vu comme une sorte de
|
||||
boite à lettres
|
||||
dans laquelle on peut glisser un message à l'intention du
|
||||
processus qui aura crée cette boite, avec un nom pré-défini afin
|
||||
que l'expéditeur du message sache où le déposer.
|
||||
|
||||
\begin{quote}
|
||||
A FIFO special file is similar to a pipe, except that it is created in a different way.
|
||||
Instead of being an anonymous communications channel, a FIFO special file is entered
|
||||
into the filesystem by calling mkfifo().
|
||||
\end{quote}
|
||||
|
||||
Hop, une rapide démonstration. J'avais tout d'abors pensé à un
|
||||
exemple minimaliste, puis je me suis dit~: « Et pourquoi ne pas
|
||||
enmbarquer une charge utile dans le message ? », aussitôt dit
|
||||
aussitôt fait.
|
||||
|
||||
L'émetteur mettra un \textsl{timestamp} dans le corps du message,
|
||||
et le récepteur affichera l'écart avec le \textsl{timestamp} local.
|
||||
Ce marqueur temporel sera obtenu par l'appel à
|
||||
\texttt{gettimeofday(2)} \index{gettimeofday}
|
||||
pour tenter d'avoir une précision
|
||||
significative.
|
||||
|
||||
\subsection{Émetteur}
|
||||
|
||||
Son role est simple~: il met le timestamp dans l'enveloppe, et
|
||||
la poste vers l'adresse qu'on lui passe sur la ligne de commande.
|
||||
|
||||
\lstinputlisting[language=c]{code/fifo-tx.c}
|
||||
|
||||
\subsection{Récepteur}
|
||||
|
||||
Pour faire simple, le récepteur des messages va passer l'intégralité
|
||||
de son temps scotché devant la boite aux lettres, et attraper le
|
||||
message dès son arrivée. Dans notre jargon, nous appellons ça
|
||||
la méthode \textsl{buzzy-wait}.
|
||||
|
||||
Sauf que ça n'est pas tout à fait ça.
|
||||
|
||||
\lstinputlisting[language=c]{code/fifo-rx.c}
|
||||
|
||||
J'avoue ne pas avoir encore bien capté le deuxième argument
|
||||
de mkfifo\dots
|
||||
|
||||
\subsection{Timestamp} \index{timestamp}
|
||||
|
||||
Comme promis un peu plus haut, le code est très simple.
|
||||
|
||||
\lstinputlisting[language=c]{code/dtime.c}
|
||||
|
||||
Cecit dit, la précision, ou plutôt la résolution,
|
||||
est très dépendante du matériel,
|
||||
de sa gestion par le système d'exploitation,
|
||||
et et aussi\footnote{Mais faut-il s'étonner ?}
|
||||
du \textsc{bofh} local.
|
||||
|
||||
\begin{quote}
|
||||
The time returned by gettimeofday() is affected by discontinuous jumps
|
||||
in the system time (e.g., if the system administrator manually changes
|
||||
the system time). If you need a monotonically increasing clock, see
|
||||
clock\_gettime(2).
|
||||
\end{quote}
|
||||
|
||||
\subsection{Message}
|
||||
|
||||
Pour des raisons pas si évidente que ça, les messages transmis
|
||||
doivent tous avoir la même taille. Nous allons donc définir
|
||||
une structure (page ???) contenant les données à transmettre.
|
||||
|
||||
\lstinputlisting[language=c]{code/my-fifo.h}
|
||||
|
||||
C'est rudimentaire, mais ça fera l'affaire pour claquer un Bonaldi.
|
||||
|
||||
% ================================================================
|
||||
|
||||
|
||||
Tube nommé.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user