“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 201 — #211
i
i
i
i
i
i
i
i
4.2 La programmation de base avec les fils
201
recevoir jusqu’à 10/11 du temps. En Mozart, les taux haut-moyen et moyen-bas sont
tous les deux à 10 par défaut. Ils sont définis avec le module Property.
L’héritage de priorité
Quand un fil crée un fil enfant, l’enfant a la même priorité que son parent. C’est
particulièrement important pour les fils à haute priorité. Dans une application, ces
fils sont utilisés pour la gestion des urgences, afin de faire le travail qui doit être fait
avant le travail normal. La partie de l’application qui fait la gestion des urgences peut
être concurrente. Si l’enfant d’un fil à haute priorité avait, par exemple, une priorité
moyenne, il y aurait une courte « fenêtre » de temps pendant laquelle le fil enfant
aurait une priorité moyenne, jusqu’à ce que le parent ou l’enfant change la priorité du
fil. L’existence de cette fenêtre est suffisante pour empêcher l’ordonnancement du fil
enfant pour beaucoup de tranches de temps, parce que l’enfant est dans la file de la
priorité moyenne. Cela donnerait peut-être des bugs difficiles à trouver. Un fil enfant
ne doit donc jamais recevoir une priorité plus basse que son parent.
La durée d’une tranche de temps
Quel est l’effet de la durée d’une tranche de temps ? Une tranche courte donne une
concurrence « fine » : les fils réagissent rapidement aux événements externes. Mais si
la tranche est trop courte, le coût pour changer de fil deviendra significatif. Une autre
question est comment implémenter la préemption : le fil surveille-t-il lui-même son
temps de calcul ou est-il fait à l’extérieur ? Les deux possibilités sont viables, mais
la deuxième est bien plus facile à réaliser. Les systèmes d’exploitation multitâches
modernes, comme Unix, Windows XP/Vista ou Mac OS X, ont des dispositifs d’interruption régulière (des rythmeurs) que l’on peut utiliser pour déclencher la préemption.
Ces interruptions arrivent à une basse fréquence, 60 ou 100 fois par seconde. Le
système Mozart utilise cette technique.
Une tranche de temps de 10 ms peut apparaître assez courte, mais pour certaines
applications c’est trop long. Par exemple, supposez que l’application ait 100 000 fils
actifs. Chaque fil aura une tranche de temps toutes les 1 000 secondes. Cette attente
peut être trop longue. En pratique, nous constatons que ce n’est pas un problème. Dans
les applications avec beaucoup de fils, comme de grands programmes à contraintes,
les fils sont fortement dépendants l’un de l’autre et pas du monde externe. Chaque fil
n’utilisera donc qu’une petite partie de sa tranche avant de la céder à un autre fil.
Par contre, il est possible d’imaginer une application avec beaucoup de fils, dont
chacun interagit avec le monde externe indépendamment des autres. Pour une telle
application, il est clair que Mozart, tout comme les systèmes d’exploitation récents,
Unix, Windows ou Mac OS X, est insatisfaisant. La racine du problème est plus
profonde : c’est le matériel (y compris le processeur et le système de mémoire) d’un
ordinateur personnel qui est insatisfaisant. Ce qu’il faut est un ordinateur à temps réel
© Dunod – La photocopie non autorisée est un délit
i
i
i
i
i
i
i
i
4.2 La programmation de base avec les fils
201
recevoir jusqu’à 10/11 du temps. En Mozart, les taux haut-moyen et moyen-bas sont
tous les deux à 10 par défaut. Ils sont définis avec le module Property.
L’héritage de priorité
Quand un fil crée un fil enfant, l’enfant a la même priorité que son parent. C’est
particulièrement important pour les fils à haute priorité. Dans une application, ces
fils sont utilisés pour la gestion des urgences, afin de faire le travail qui doit être fait
avant le travail normal. La partie de l’application qui fait la gestion des urgences peut
être concurrente. Si l’enfant d’un fil à haute priorité avait, par exemple, une priorité
moyenne, il y aurait une courte « fenêtre » de temps pendant laquelle le fil enfant
aurait une priorité moyenne, jusqu’à ce que le parent ou l’enfant change la priorité du
fil. L’existence de cette fenêtre est suffisante pour empêcher l’ordonnancement du fil
enfant pour beaucoup de tranches de temps, parce que l’enfant est dans la file de la
priorité moyenne. Cela donnerait peut-être des bugs difficiles à trouver. Un fil enfant
ne doit donc jamais recevoir une priorité plus basse que son parent.
La durée d’une tranche de temps
Quel est l’effet de la durée d’une tranche de temps ? Une tranche courte donne une
concurrence « fine » : les fils réagissent rapidement aux événements externes. Mais si
la tranche est trop courte, le coût pour changer de fil deviendra significatif. Une autre
question est comment implémenter la préemption : le fil surveille-t-il lui-même son
temps de calcul ou est-il fait à l’extérieur ? Les deux possibilités sont viables, mais
la deuxième est bien plus facile à réaliser. Les systèmes d’exploitation multitâches
modernes, comme Unix, Windows XP/Vista ou Mac OS X, ont des dispositifs d’interruption régulière (des rythmeurs) que l’on peut utiliser pour déclencher la préemption.
Ces interruptions arrivent à une basse fréquence, 60 ou 100 fois par seconde. Le
système Mozart utilise cette technique.
Une tranche de temps de 10 ms peut apparaître assez courte, mais pour certaines
applications c’est trop long. Par exemple, supposez que l’application ait 100 000 fils
actifs. Chaque fil aura une tranche de temps toutes les 1 000 secondes. Cette attente
peut être trop longue. En pratique, nous constatons que ce n’est pas un problème. Dans
les applications avec beaucoup de fils, comme de grands programmes à contraintes,
les fils sont fortement dépendants l’un de l’autre et pas du monde externe. Chaque fil
n’utilisera donc qu’une petite partie de sa tranche avant de la céder à un autre fil.
Par contre, il est possible d’imaginer une application avec beaucoup de fils, dont
chacun interagit avec le monde externe indépendamment des autres. Pour une telle
application, il est clair que Mozart, tout comme les systèmes d’exploitation récents,
Unix, Windows ou Mac OS X, est insatisfaisant. La racine du problème est plus
profonde : c’est le matériel (y compris le processeur et le système de mémoire) d’un
ordinateur personnel qui est insatisfaisant. Ce qu’il faut est un ordinateur à temps réel
© Dunod – La photocopie non autorisée est un délit
