next up previous contents
Next: Programmation Up: Les pipes Previous: Les pipes   Contents

Fonctionnement

Les pipes sont des canaux de communication unidirectionnels entre un producteur et un consommateur.

Un tube est un inode disponible d'un système de fichiers. Le principe du fonctionnement du pipe provient du fait que l'appel système pipe retourne 2 descripteurs de fichiers vers le même inode :l'un est utilisé en écriture, l'autre en lecture. Les pointeurs de position sont gérés dans la table des inodes et non dans la table des fichiers. Quand un processus écrit dans le pipe, le compteur de position d'écriture est incrémenté. De même, quand un processus vient lire dans le pipe, le compteur de position de lecture est incrémenté. Quand le compteur de lecture à rejoint le compteur d'écriture, les 2 compteurs sont remis à 0.

Figure: Un pipe est géré dans les premiers blocs d'accès directs de l'inode (donc dans le cache si 10 blocs disques sont libres)
\begin{figure}
\centerline {\putfigure{width=80mm}{pipe1.eps}} \end{figure}

S'il n'y a rien à lire, le processus consommateur est bloqué. Si le pipe est plein, le processus producteur est bloqué (ce qui peut conduire à un fractionnement des données si d'autres processus écrivent dans le pipe). Le positionnement du flag O_NDELAY, permet d'éviter ce comportement (l'écriture renvoie le nombre d'octets effectivement écrits).

La gestion d'un pipe se fait sur les blocs d'accès direct de l'inode qui lui est affecté (la taille est donc limitée à 10 blocs). Comme ces blocs sont gérés dans le cache, les pipes sont donc gérés directement en mémoire et non sur le disque.

Figure: Le process consommateur est bloqué s'il n'y a rien à lire. Le processus producteur est bloqué si le pipe est plein. Les pointeurs sont remis à 0 s'ils sont égaux.
\begin{figure}
\centerline {\putfigure{width=80mm}{pipe2.eps}} \end{figure}

Pour pouvoir utiliser un pipe, il est nécessaire de posséder le descripteur associé à ce pipe. Cela n'est donc possible qu'au sein d'une filiation de processus, ou en utilisant des processus de communication IPC.


next up previous contents
Next: Programmation Up: Les pipes Previous: Les pipes   Contents
Arnaud Revel
2001-11-26