Le système PVM
IMI - S3 Jeudi matin


Communication

En PVM, les communications utilisent un tampon (buffer) pour le stockage des messages. L'envoi de messages est asynchrone : le processus émetteur n'est pas bloqué si le processus receveur n'est pas prêt à recevoir. La réception peut être bloquante ou non. Une réception bloquante stoppe le processus receveur tant que les données ne sont pas dans le buffer de réception. Une réception non bloquante ne stoppe pas le processus receveur mais retourne une valeur indiquant si les données sont arrivées ou non.

Les communications peuvent être point-à-point (1-1) ou bien multiple (1-n). Les messages sont étiquetés. Le receveur peut spécifier l'émetteur ou bien l'ignorer, de même il peut spécifier l'étiquette ou bien l'ignorer.

Le buffer utilisé pour les messages est ordonné. Si une tâche 1 envoie successivement un message A puis un message B à une tâche 2, alors A arrivera avant B.

L'interface PVM

Fichier d'entêtes : #include "pvm3.h" à placer au début de tout programme utilisant la bibliothèque PVM.

Le code doit être lié à celui de la bibliothèque grâce à l'option -lpvm3. Pour simplifier la compilation, un fichier Makefile est fourni.

Ci-dessous, quelques fonctions qu'il est utile de connaître :

Contrôle des processus

int tid = pvm_mytid()
informe pvmd qu'il est un processus PVM. Un identificateur unique lui est attribué.
int info = pvm_exit()
informe pvmd qu'il n'est plus un processus PVM

Tout programme PVM doit débuter par un appel à pvm_mytid() et doit comporter un appel à pvm_exit() avant de se terminer.

int numt = pvm_spawn(char *task, char** argv, int flag,
                     char* where, int ntask, int *tids)

démarre ntask instances de l'exécutable spécifié par task sur la machine virtuelle. argv est un pointeur vers un tableau d'arguments, la fin du tableau doit être marquée par la valeur NULL. Si les tâches n'ont pas d'arguments, argv doit recevoir la valeur NULL. flag permet de spécifier des options de lancement, on doit passer 0 pour avoir les options par défaut. Si l'on a passé 0 pour flag alors passer NULL pour where. La fonction retourne le nombre de tâches effectivement lancées ou un code d'erreur si aucune tâche n'a pu être lancée. Si des tâches ont été lancées alors la fonction retourne dans tids un tableau contenant les identificateurs de ces tâches.

Information

int tid = pvm_parent()
retourne l'identificateur du processus PVM qui l'a créé ou bien PvmNoParent s'il n'a pas été créé par un processus PVM.

Passage de messages

[Systèmes informatiques distribués]