next up previous contents
suivant: Envoi d'un message monter: Mécanisme de communication : précédent: Structure d'un message   Table des matières

Création d'un message

La création d'un message s'effectue en utilisant la fonction de la libc système :

  int create_msg(t_tskid dest, int data_size);
.

Il suffit à l'utilisateur de passer en paramètre le destinataire du message, ainsi que la taille des données à transporter.

Cette fonction est en fait un appel système, et la création du message est donc effectuée par le noyau. Ce dernier commence par réaliser une allocation mémoire (physique et virtuelle) de pages suffisante pour contenir le message en entier, c'est-à-dire le header et les données. Cette allocation, effectuée dans l'espace d'adressage du créateur du message, n'est pas effectuée en utilisant malloc, par mesure de sécurité. En effet, comme nous le verrons par la suite, la zone physique contenant le message sera référencé par l'émetteur et le destinataire. Il ne faut donc pas que le destinataire puisse modifier les structures de gestion du malloc de l'émetteur, présentes en début de page. Il s'agit donc simplement d'une allocation de pages.

Le noyau écrit alors le header du message, en utilisant les paramètres fournis par l'émetteur (destination et taille des données). L'adresse des données est déterminée en ajoutant la taille du header à l'adresse de début du message. La source (c'est-à-dire l'identifiant de tâche de l'émetteur) est fournie par l'ordonnanceur, excluant la possibilité d'attaque par spoofing sur la source (usurpation d'identité de tâche).

Le noyau retourne enfin à l'émetteur une structure de message pointant sur la zone mémoire remplie. Le programme appelant peut alors utiliser la structure retournée et remplir les données.


next up previous contents
suivant: Envoi d'un message monter: Mécanisme de communication : précédent: Structure d'un message   Table des matières
nicolas 2006-07-30