Échange de données
Les
fichierss peuvent être utilisés pour échanger
des informations entre deux, ou plusieurs processus. Dans ce cas, les processus
voulant envoyer des informations écrivent dans un (ou plusieurs) fichier(s)
à une certaine position ;
les processus souhaitant recevoir ces informations se positionnent aux
« bons » emplacement dans un fichier et les lisent.
Ce type d'échange est possible entre des processus concurrents, en utilisant
le système de fichiers local, ou distants en utilisant un système de fichiers
distribué tel que
NFS.
La mémoire (principale) d'un système peut aussi être utilisée pour des
échanges de données. Suivant le type de processus, les outils utilisés
ne sont pas les mêmes.
- Dans le cas des processus « classiques », l'espace mémoire du processus n'est pas partagé. On utilise alors des mécanismes de mémoire partagée, comme les segments de mémoire partagée pour Unix.
- Dans le cas des processus légers l'espace mémoire est partagé, la mémoire peut donc être utilisée directement.
Dans les deux cas, les échanges sont réalisés en plaçant les données dans
des variables partagées par les processus.
Quelle que soit la méthode utilisée pour partager les données, ce type de
communication pose le problème des sections critiques : le moment
où les processus accédent aux données partagées. En effet si deux
processus accédent « en même temps » à une
ressource, les données risquent de ne plus être cohérentes ; de
plus ce type de conflit résulte généralement en un
« plantage » de l'un ou de tous les processus
concernés.
Synchronisation
Les mécanismes de synchronisation sont utilisés
pour résoudre les problèmes de sections critiques et plus généralement
pour bloquer et débloquer des processus suivant certaines conditions.
Les verrous permettent de bloquer tout ou une partie d'un fichier.
Ces blocages peuvent être réalisés soit pour les opérations de lecture,
soit d'écriture, soit pour les deux.
Les sémaphoress sont un mécanisme plus général, ils ne sont pas associés
à un type particulier de ressource et permettent de limiter l'accès concurrent
à une section critique à un certain nombre de processus. Pour ce faire les
sémaphores utilisent deux fonctions : P et V, et un compteur.
La fonction P décremente le compteur, si le compteur est négatif le
processus est bloqué. La fonction V incrémente le compteur et débloque
l'un des processus bloqué.
Les signaux sont à l'origine destinés à tuer (terminer) un
processus dans certaines conditions, par exemple le signal SIGSEGV
tue un processus qui effectue un accès à une zone de mémoire qu'il
n'a pas alloué. Les signaux peuvent cependant être déroutés vers
d'autres fonctions. Le blocage d'un processus se fait alors en
demandant l'attente de l'arrivée d'un signal et le déblocage
consiste à envoyer un message au processus.
Le problème des mécanismes de synchronisation est que les processus ne
sont bloqués que s'ils les utilisent. De plus, leur utilisation est
difficile et entraine des problèmes d'interblocage (tous les processus
sont bloqués).
Échange de données et synchronisation
Ces outils regroupent les possibilités des deux autres et sont
plus simples d'utilisation.
L'idée de ce type d'outil est de communiquer en utilisant le principe
des files, les processus voulant envoyer des informations les placent
dans la file ; ceux voulant les recevoir les récupèrent dans cette
même file. Les opérations d'écriture et de lecture dans la file sont
bloquantes et permettent donc la synchronisation.
Ce principe est utilisé par les files d'attente de message (message queue) sous Unix, par
les sockets Unix ou Internet, par les tubess, nommés ou non, et par la transmission de messages (Message Passing).