1.3. Petit système temps-réel
[Krakowiak (85)] Un ordinateur est utilisé pour le
prélèvement de mesures. Il exécute périodiquement
(avec une période T) un cycle de mesure:
- prélèvement de mesure sur les
capteurs (durée: tmes)
- traitement des mesures (durée:
tcalc)
- vidage sur disque des résultats (durée:
tvid)
Les trois opérations ci-dessus doivent être
exécutées en séquence pour chaque cycle. On dispose d'une
horloge qui provoque une interruption au passage du compteur à
zéro. On demande d'écrire les programmes de ce système
(programme principal, traitement des interruptions) dans les quatre cas
suivants, en formulant dans chaque cas, s'il y a lieu, la condition de
possibilité du traitement en fonction des durées des
différentes opérations.
A- Les capteurs et le contrôleur du disque sont
commandés par l'unité centrale. L'opération de
prélèvement est lancée par l'unité centrale qui doit
ensuite prendre les données au fur et à mesure que les capteurs
successifs les fournissent, au rythme imposé par ces capteurs.
L'écriture sur disque est lancée par l'unité centrale qui
doit ensuite fournir les données au fur et à mesure des demandes
du disque. Dans chaque cas, l'ordinateur est suffisamment rapide pour satisfaire
le rythme imposé par les capteurs ou le disque, mais ne peut faire autre
chose en même temps. Les cycles successifs de mesure doivent être
exécutés en séquence, et un travail de fond est
exécuté pendant les temps morts.
B- Les capteurs sont toujours commandés par
l'unité centrale comme en A, mais le disque est commandé par
accès direct mémoire. L'ordinateur lance l'opération
d'écriture sur disque en précisant l'adresse mémoire
où se trouvent les données à écrire. Il peut par
ailleurs tester l'état du disque pour savoir si l'opération est
terminée. Le vidage du cycle i peut donc s'exécuter en
parallèle avec le prélèvement et le traitement du cycle i +
1.
C- Les capteurs sont commandés eux aussi par
accès direct mémoire indépendant de celui du disque.
L'ordinateur lance l'opération de prélèvement en
précisant l'adresse mémoire où doivent être
mémorisés les résultats de mesure. Il peut par ailleurs
tester l'état du prélèvement pour savoir si
l'opération est terminée. Le prélèvement du cycle i
peut donc être simultané au traitement du cycle i - 1 et au vidage
du cycle i - 2.
D- La fin de l'opération disque, comme la fin de
l'opération de prélèvement, déclenchent une
interruption. Comment organisez-vous l'ensemble?
Solution de l’exercice
1.3
1.3.1. Question A
Le programme principal est un travail de fond quelconque,
indépendant des mesures. A chaque interruption d'horloge, le programme
suivant est lancé:
sauver état processeur (travail de fond)
lancer la commande de prélèvement
tant que toutes les mesures ne sont pas obtenues faire
tant que mesure indisponible faire fait; { attente }
prendre la mesure et mettre en mémoire
fait;
traiter les mesures
lancer la commande d'écriture disque
tant que tout n'est pas écrit faire
tant que le contrôleur n'est pas prêt faire fait; { attente }
transférer la donnée suivante de la mémoire vers le contrôleur
fait;
restituer l'état du processeur (travail de fond)
L'ensemble
du travail se déroulant séquentiellement, il est nécessaire
que l'on ait:
tmes + tcalc + tvid < T
Si cette condition n'est pas vérifiée, une
interruption d'horloge surviendra alors que le traitement correspondant à
la précédente n'est pas terminé, ce qui pose des
problèmes dits de réentrance. On peut les éviter en
“masquant” les interruptions d'horloge au début du programme
précédent, et en les démasquant à la fin. Le non
respect de la condition précédente entraînera simplement la
perte de certaines interruptions, sans perturber le déroulement du
programme lui-même.
1.3.2. Question B
Dans ce cas, dès le lancement de l'opération de
vidage sur disque, il est possible de restaurer l'état du processeur,
l'exécution de l'opération proprement dite se déroulant
alors en parallèle. Lors de l'étape suivante, avant de lancer la
nouvelle opération de vidage, il faut s'assurer que la
précédente est bien terminée. Le programme principal reste
un travail de fond quelconque. Le programme sous interruption d'horloge est
donné ci-après. Le bon fonctionnement est obtenu cette fois sous
deux conditions:
tmes + tcalc < T
tvid < T
masquer l'interruption d'horloge
sauver état processeur (travail de fond)
lancer la commande de prélèvement
tant que toutes les mesures ne sont pas obtenues faire
tant que mesure indisponible faire fait; { attente }
prendre la mesure et mettre en mémoire
fait;
traiter les mesures
tant que contrôleur disque occupé faire fait; { attente }
lancer la commande d'écriture disque
restituer l'état du processeur (travail de fond)
démasquer l'interruption d'horloge
1.3.3. Question C
Cette fois, pour obtenir un prélèvement
régulier des mesures, la commande de prélèvement doit
être lancée à chaque interruption d'horloge, mais il ne faut
pas attendre qu'elle soit terminée. Le travail de fond consiste à
attendre qu'un prélèvement soit terminé pour effectuer le
traitement sur les mesures correspondantes, puis écrire sur disque les
résultats. Pour que l'on puisse éventuellement relancer un
prélèvement le plus tôt possible sans ennui, il faut que le
traitement lui-même soit précédé d'un rangement dans
une zone de travail des mesures, libérant ainsi la zone de
prélèvement pour le cycle suivant. La
“synchronisation” entre le prélèvement et le
traitement est obtenue par masquage de l'interruption d'horloge.
traitement sur interruption d'horloge:
masquer l'interruption d'horloge
sauver état processeur (travail de fond)
lancer la commande de prélèvement
restituer l'état du processeur (travail de fond)
travail
de fond:
tant que vrai faire { boucle infinie }
tant que prélèvement non terminé faire fait; { attente }
prendre les mesures et les ranger en zone de travail
démasquer l'interruption d'horloge
traiter les mesures
tant que contrôleur disque occupé faire fait; { attente }
lancer la commande d'écriture disque
fait;
Le bon
fonctionnement est obtenu cette fois sous trois conditions:
tmes < T tcalc < T tvid <
T
1.3.4. Question D
On peut alors éviter les attentes actives qui
existaient dans la solution précédente. Le déroulement
séquentiel des opérations implique que l'interruption signalant la
fin du prélèvement entraîne l'exécution du
traitement, sous réserve que le traitement des mesures
précédentes soit terminé. L'écriture sur disque des
résultats ne peut avoir lieu que si l'écriture
précédente est terminée. L'interruption de fin
d'écriture doit donc déclencher l'écriture suivante, sous
réserve que le traitement correspondant soit terminé.
traitement sur interruption d'horloge :
masquer l'interruption d'horloge
sauver état processeur (travail de fond)
lancer la commande de prélèvement
restituer l'état du processeur (travail de fond)
traitement
sur interruption de fin de prélèvement:
masquer l'interruption de prélèvement
sauver état processeur (travail de fond)
prendre les mesures et les ranger en zone de travail
démasquer l'interruption d'horloge
traiter les mesures
démasquer l'interruption disque
restituer l'état du processeur (travail de fond)
traitement
sur interruption de fin d'écriture disque:
masquer l'interruption disque
sauver état processeur (travail de fond)
ranger les résultats dans le tampon d'écriture
lancer la commande d'écriture disque
démasquer l'interruption de prélèvement
restituer l'état du processeur (travail de fond)
initialisation:
masquer l'interruption disque
lancer la commande d'écriture disque { écriture bidon }
démasquer l'interruption d'horloge
démasquer l'interruption de prélèvement
L'intérêt
essentiel de cette solution est évidemment de récupérer les
temps d'inactivité du processeur pour un travail de fond
indépendant et quelconque. Les contraintes temporelles sont
évidemment les mêmes que ci-dessus. Le respect de ces contraintes
nécessite souvent de dimensionner le processeur de façon à
être en deçà des limites. Cette solution permet alors de
récupérer la puissance de calcul inutilisée.