Introduction
Dans le chapitre précédent, nous avons étudié les différentes phases d'une "activité" [1] unique, même si nous avons pu pressentir l'existence voisine d'autres activités (par exemple en évoquant l'état en attente d'une activité qui ne peut s'expliquer que par l'existence d'une autre activité active dans le même temps).
On peut imaginer différentes sortes d'interactions :
-
l'utilisation par plusieurs activité de "données communes" (par exemple de fichiers, de variables, de tampons),
-
l'échange d'informations (de données par exemple),
-
la synchronisation de certaines actions, telle action d'une activité ne devant pas survenir avant l'achèvement de telle autre d'une autre activité.
De nombreuses situations d'interactions entre différentes activités peuvent être rencontrées :
-
les activités sont internes à un processus.
C'est le cas des threads [2] en C/C++, Java, ou des tâches en ADA.
Dans ce cas, les mécanismes de communication et de synchronisation (par exemple rendez-vous et les objets protégés en ADA), et de politique (policy) [3] entre ces activités (coroutines en Modula-2, priorité des activités, activités (non) préemptives [4]) sont incorporés directement au processus (run-time ADA).
Si de plus la machine est multiprocesseurs, des mécanismes propres au système d'exploitation et au matériel sont mis en jeu pour répartir ces activités, accéder à la mémoire commune, mettre à jour les mémoires caches des différents processus.
Ces aspects ne seront pas abordés dans ce cours;
-
les activités qui interagissent tournent sur le même système d'exploitation d'une seule machine.
On parle alors de processus.
C'est le système d'exploitation qui offre alors les moyens de communication entre les processus, rassemblés généralement sous l'intitulé d'IPCs (Inter Process Communication).
Les IPCs de Windows NT et d'Unix (Linux) seront présentés plus loin dans ce chapitre.
Les IPCs de Linux feront l'objet de travaux pratiques.
Quoiqu'anciens et n'étant généralement pas classés dans les IPCs, signalons les moniteurs, qui seront développés séparément dans ce chapitre;
-
les activités qui interagissent tournent sur des systèmes différents, par exemple Unix et Windows.
On parle alors d'interopérabilité.
Cet aspect ne sera pas envisagé dans ce cours;
-
les activités qui interagissent tournent sur des machine différentes.
Cet aspect sera envisagé dans le cours "Réseau".
Il faut remarquer que les délimitations entre les IPCs et les autres techniques ne sont pas universellement reconnues, et il règne même une certaine confusion sur les termes.
Alors que les IPCs traditionnels d'Unix (les sémaphores, la mémoire partagée et les files de messages) concernent des processus tournant sur la même machine et le même système d'exploitation, Windows NT inclut les pipes [5] (plutôt assimilés aux fichiers sous Unix) et des mécanismes de communication en réseau.
Les échanges d'objets entre applications font partie intégrante de la communication entre les processus.
Plusieurs aspects peuvent être envisagés, qui dépassent le cadre de ce cours "Système d'exploitation" :
-
les fonctionnalités accessibles des objets (regroupées sous le terme d'interface),
-
le stockage des objets (mémoire partagée accessible par différents processus) : le presse-papiers (clipboard), les objets OLE (Object Linking and Embedding),
-
le transfert des objets dans le cadre d'applications distantes (protocoles de communication et de transfert : DDE (Dynamic Data Exchange), XDR (eXternal Data Representation).
On dit des applications qu'elles sont faiblement couplées lorsque leur mode de communication est général et anonyme.
Sous Windows par exemple, les opérations de "Copier/Coller" par l'intermédiaire du presse-papiers établissent un faible couplage entre les activités.
En revanche, deux processus utilisant une mémoire partagée dont le contenu est spécifique, sont dits fortement couplés.
Les opérations de communication/synchronisation ont un coût en temps et en espace mémoire, qui doit être envisagé lors des choix des IPCs.
Dans ce chapitre, nous allons étudier les interactions entre les processus qui s'exécutent "en même temps" dans un même environnement [6] (même machine, même système d'exploitation).
[1]
Le terme "d'activité" est provisoirement utilisé, en attendant que la distinction soit faite entre processus, tâches et threads.
[2]
Nous conserverons le terme anglais thread, car il n'existe pas de terme français d'usage courant.
[3]
On appelle politique l'ensemble des règles de choix d'une activité parmi plusieurs susceptible d'être activées simultanément, fondées sur la priorité, la durée d'exécution, la durée d'attente, etc...
[4]
Lorsqu'une activité en cours d'exécution peut être interrompue par un mécanisme externe pour passer le contrôle à une autre activité, on dit qu'il s'agit d'un mécanisme préemptif.
Au contraire, lorsqu'une activité ne s'interrompt que de sa propre initiative (par manque de ressource ou attente d'un événement par exemple), le mécanisme est dit non préemptif.
[5]
Le terme français "tuyau" ou "tube" est très peu usité et nous conserverons le terme technique anglais pipe (prononcer "païp")
[6]
Les communications entre processus sur des machines distinctes font partie du cours "Réseau".
Dernière mise à jour : 11/10/2001