Bonjour,
Je souhaiterais discuter de la modélisation que je réalise, via cette étude de cas qui regroupe des contraintes que j'ai rencontrée dans divers projets.
Voici le sujet : "Dé-Multiplexages de données )"
Une entrée reçoit périodiquement un groupe de données sur un canal d'entrée à redistribuer sur deux canaux en sortie, à priori indépendant sur le traitement des données réceptionnées.
L'application convertit chaque données et les distribue sur les canaux.
Entrée : Un canal avec une bufferisation matériel limité
Sortie : deux canaux.
La fonction de conversion utilise une accélération matérielle qui bufferise ses entrées. Si un canal est hors service le caractère doit être aiguillé vers le canal de secours. On veut savoir à n'importe quel instant dans quelle état se trouve le caractère traité.
Comportement du buffer de l'accélération matérielle de conversion :
L'empilement est non bloquant, ie que si le buffer est plein et que l'on souhaite empiler l'opération va échouer. Il faut donc contrôler l'état du buffer (ou le retour de l'opération) pour empiler la donnée.Lorsque le buffer contient une place de disponible est signal est envoyé.
Première solution : traitement_caractere_simple.
Critique : ce modèle ne tient pas comte de l'accélération matérielle (la conversion est considérée comme une simple fonction bloquante qui retourne la donnée convertie).
On risque de perdre des données sur le canal d'entrée car la durée de traitement peut-être lente.
La limitation ici est je pense due au fait que l'on modélise l'état du caractère (recu, traité, écrit) et non son processus (reception, conversion, ecriture).
Deuxième solution :
Evolution : on découple la réception du groupe de données et son traitement, et on place un buffer pour la communication entre ces deux séquences.
traitement_caractere_simple_canal.png
Critique : toujours pas de prise en compte de l'accélération hard. on ne gère qu'une seule séquence d'écriture à la fois, alors que ces canaux sont indépendants.
Evolution : Découpler l'envoi des données de la conversion matérielle de l'écriture.
Paralléliser le traitement pour chaque canal. (je ne représente pas la synchronisation des E/S de l'accélération matérielle).
Troisième solution : traitement_canal_acceleration_hard.png & traitement_caractere_multi-canal.png
On crée un état composite de traitement ré-utilisable pour chaque canal.
Je n'ai pas encore traité l'aiguillage des données sur le canal de secours.
Ci-joint le projet bouml contenant les diagrammes.
Merci pour tout commentaire.
Partager