La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Places Send File Receive Messages.

Présentations similaires


Présentation au sujet: "Places Send File Receive Messages."— Transcription de la présentation:

1 Places Send File Receive Messages

2 Implantation à l’aide de sémaphores
Gestion des communications Boîte à lettres, synchrone, file de taille bornée, avec blocage Implantation à l’aide de sémaphores Structure de données typedef char t_msg[MAX_MSG] typedef struct { t_sema s_messages init 0; /* Sémaphore pour accès aux messages */ t_sema s_places init N_PLACES; /* Sémaphore pour accès place libre */ t_msg tampon[N_PLACES]; /* Tampon pour message en attente */ t_sema s_tampon init 1; /* Mutex sur tampon */ int i_msg init 0; /* Message à lire */ int i_place init 0; /* Place à remplir */ } t_port;

3 Gestion des communications Boîte à lettres, synchrone, file de taille bornée, avec blocage
void receive (t_msg *msg, t_port *port) { /* On attend qu’un message soit la */ P(port->s_messages); /* Recopie message */ P(port->s_tampon); recopier(port->tampon[port->i_msg],msg); port->i_msg = (port->i_msg+1) modulo N_PLACES; V(port->s_tampon); /* On signale la libération d’une place vide*/ V(port->s_places); } void send (t_msg msg, t_port *port) { /* On attend qu’une place se libère */ P(port->s_places); /* Recopie message */ P(port->s_tampon); recopier(&msg,port->tampon[port->i_places]; port->i_places = (port->i_places+1) modulo N_PLACES; V(port->s_tampon); /* On signale son arrivée */ V(port->s_messages); } Cas problématique : Tâche moins prioritaire interrompue par une tâche plus prioritaire Lorsque le premier mutex (s_tampon) est consommé mais pas le second (s_places)  Dessiner le contenu de la FIFO


Télécharger ppt "Places Send File Receive Messages."

Présentations similaires


Annonces Google