Author: Christian.Queinnec@lip6.fr

## Introduction

Ce chapitre aborde deux grands traits de l'interfaçage d'un langage de programmation avec le système d'exploitation : la communication et les processus. Le module `Sys`, présenté au chapitre 8, a déjà montré comment faire passer des valeurs à un programme et comment lancer un programme à partir d'un autre. Le but de ce chapitre est de préciser les notions de processus et de communication entre processus.
Le terme << processus >> est utilisé pour un programme en cours d'exécution. Les processus sont les composants premiers des applications parallèles. Nous introduisons les processus sous la présentation classique que l'on donne pour le système Unix. Dans ce cadre, un processus est lancé par un autre processus, créant ainsi un lien de filiation. Il existe un processus premier, ancêtre de tous les autres. Cette relation de paternité autorise des attentes sur la fin de l'exécution d'un processus, ainsi qu'une communication privilégiée entre ascendant et descendant. Le modèle de parallélisme sous-jacent est celui à mémoire répartie.
Le terme << communication >> recouvre trois réalités :

- les entrées-sorties au moyen de descripteurs de fichier. La notion de fichier sous Unix a une portée beaucoup plus large que la simple lecture ou écriture de données sur un support de masse. On le verra en particulier au chapitre 20 où des programmes tournant sur diverses machines communiquent via de tels descripteurs ;
- la création et l'utilisation de tubes de communication entre processus qui permettent un échange de données selon le principe des files d'attente;
- la génération et le traitement de signaux qui autorisent une interaction simple entre processus.

Les fonctions présentées dans ce chapitre viennent, pour l'essentiel, du module `Unix` accompagnant la distribution d'Objective CAML. La terminologie et les notions utilisées viennent du monde Unix, mais une grande partie des fonctions de ce module sont utilisables sous Windows. Nous préciserons, quand il y aura lieu, le champ d'application des fonctions présentées.