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.