Systèmes en temps réel Services de Communication
Communication (partie 1) - 2 Synopsis Communication Asynchrones Communication Synchrones Utilisation des communication synchrones Problèmes communs Réception de Messages Invoqué par chrono Exemple de brouilleur coordonné Déferrage dévénements
Communication (partie 1) - 3 Communications Asynchrones La capsule qui envoie ne bloque pas quand les messages sont en transit Elle va compléter tous le code de transitions dans la chaîne avant que le(s) message(s) envoyés aient la chance dêtre traités Dautres messages, et autres chaînes de transitions, peuvent même être traités dans lintérim Mécaniques: myPort.mySignal( [data] ).send( [priority] ); Voir la classe OutSignal dans la bibliothèque des Services optionnel
Communication (partie 1) - 4 Communications Asynchrones On se rappel de la sémantique dexécution jusquà la fin: Quand déclenchée, chaque chaîne de transitions va naturellement exécuter jusquà la fin. Tout message(s) envoyé durant lexécution de code dans la chaîne de transitions va être mis dans une file par le service de traitement de messages le la bibliothèque de services en temps réel Les messages à priorité égale seront traité PAPS Les autres messages déjà dans la file (derrière celui qui à commencé la transition originale) vont être traités avant le(s) nouveau(x) message(s) envoyé(s).
Communication (partie 1) - 5 Communications Synchrones - définit Fournit un moyen de contourner la sémantique normale dexécution jusquà la fin La capsule qui envoie (invoque) bloque jusquà ce quune réponse soit reçu (sémantique dappel de procédure Le bloque est efficace même contre la réception de messages à plus haute priorités. Les communications synchrones imbriqués (nested) sont permises, mais pas circulaire
Communication (partie 1) - 6 Communications Synchrones - mécaniques OutSignal.invoke( ) //envoyeur Message replies; Message[] replies = senderPort.senderSignal( ).invoke(); if (replies[0] != null) { code pour traiter une réponse valide } else {code pour traiter une réponse invalide } //receveur receiverPort.receiverSignal( ).reply( );
Communication (partie 1) - 7 Communications Synchrones – découplage du receveur Le comportement événementiel de RoseRT assure que les états sont toujours en mode réception Les messages reçus sont traités de la même façon (du côté de la réception) peut importe quils soient envoyés asynchrone ou synchrone Découple limplémentation du receveur/envoyeur Cependant, pour utiliser cette assurance, il faut que le receveur envoie une réponse dans tous les cas
Communication (partie 1) - 8 Communications Synchrones– invoqué par chrono La ponctualité pour la capsule qui envoie (ou son thread) peut requérir quune invocation bloque seulement pour une période minimum Le receveur peut aussi être trop lent dans sa réponse Les délais de communication peuvent être trop longs Les communications Donc une invocation peut avoir besoin dune temporisation optionnel Aucun mécanisme dimplémentation en RoseRT Retourne seulement une exception si aucune réponse est reçu
Communication (partie 1) - 9 Communications Synchrones - Pourquoi lutiliser? Pour contrôler la séquence des événements (changements détats) exemple: notre coordination de receveur/brouilleur Pour assurer la synchronisation exemple: le système de peinture de widget Pour assurer quil n y a pas dinterférence entre les threads logiques ou processus (exclusion mutuelle) exemple: une base de données partagée
Communication (partie 1) - 10 Communications Synchrones - dangers Peut amener aux interblocages (invocation circulaire) Peut mettre en danger la ponctualité sur le thread de la capsule qui envoie Problèmes de communication multiprocesseurs long délais fiabilité (communications pauvres)
Communication (partie 1) - 11 Exemple – un contrôleur GE
Communication (partie 1) - 12 Contrôleur
Communication (partie 1) - 13 Brouilleur rxJamPort.Jamming( ).send( ); // du code pour actuellement // transmettre de lénergie FR Asynchrone: rxJamPort.Jamming( ).invoke(); if (replies[0] != null) { // du code pour actuellement // transmettre de lénergie FR } else { // abandonne le brouillage} Synchrone:
Communication (partie 1) - 14 Receveur Asynchrone: {pas de code} rxJamPort.ack( ).reply( ); //notez que la pointe serait noir // dans ce cas. Synchrone:
Communication (partie 1) - 15 Communications Synchrones - problèmes suplémentaires Invocation – Réponse en présence de chronos Invocation – Réponse et réponses longues Invocation – Réponse et réponses délayées Voir le fichier modèle: InvokeTest.rtmdl
Communication (partie 1) - 16 Modèle: InvokeReplywithTimers InvokeReplywithTimers - Capsules