Exercice 1 : Les états d'un processus
Le schéma donne les trois états dans lesquels vit un processus et les quatre transitions qui les relient. Aucune autre transition n'existe, et c'est ce qui rend le modèle utilisable.
- a) Définissez un processus, puis chacun des trois états. Quel élément du système déclenche chacune des quatre transitions ?
- b) Pourquoi n'existe-t-il aucune flèche directe de l'état bloqué vers l'état élu ? Expliquez la raison de fond.
- c) Un ordinateur à 4 coeurs exécute 180 processus. Combien peuvent être dans l'état élu simultanément ? Combien dans l'état prêt ? Comment l'utilisateur peut-il avoir l'impression que tous avancent ?
- d) Distinguez un processus et un fil d'exécution. Que partagent deux fils du même processus, et que ne partagent-ils pas ?
- e) Un processus passe 5 millisecondes à calculer puis attend 40 millisecondes une lecture disque, en boucle. Quelle proportion de son temps passe-t-il dans chaque état ? Que devrait faire l'ordonnanceur d'un tel processus ?
Voir la correction
Réponses
- a) Prêt, élu, bloqué ; quatre transitions
- b) Réveil vers prêt : l'ordonnanceur décide
- c) 4 élus, 146 prêts : partage de temps
- d) Fils : mémoire partagée, piles distinctes
- e) % élu : le privilégier
a) Un processus est un programme EN COURS D'EXÉCUTION, accompagné de tout ce qui décrit son exécution : son code, ses données, sa pile, ses fichiers ouverts et la valeur de ses registres. L'état PRÊT signifie qu'il pourrait s'exécuter mais qu'aucun coeur ne lui est attribué. L'état ÉLU signifie qu'un coeur exécute effectivement ses instructions. L'état BLOQUÉ signifie qu'il attend un événement extérieur, lecture disque, saisie clavier, arrivée de données réseau, et qu'il ne pourrait donc rien faire même si un coeur était libre. Les transitions : l'ÉLECTION est décidée par l'ordonnanceur ; la PRÉEMPTION est provoquée par l'ordonnanceur, en général sur expiration d'un quantum de temps signalé par une interruption d'horloge ; le passage à BLOQUÉ est provoqué par le processus lui-même, lors d'un appel système bloquant ; le RÉVEIL est provoqué par l'arrivée de l'événement attendu, signalée au système par une interruption du périphérique.
b) Parce que la fin de l'attente ne dit rien sur la disponibilité d'un coeur. Le processus redevient CAPABLE de s'exécuter, ce qui est exactement la définition de l'état prêt ; mais un autre processus occupe peut-être le coeur, et c'est à l'ordonnanceur, et à lui seul, de décider qui l'obtient. Autoriser un passage direct de bloqué à élu reviendrait à laisser un périphérique décider de l'attribution du processeur, donc à permettre à n'importe quel matériel de préempter le système. La séparation entre « je peux avancer » et « on me laisse avancer » est le coeur du modèle.
c) Au plus 4 processus peuvent être élus simultanément, un par coeur. Les autres sont soit prêts, soit bloqués : si 30 attendent des entrées-sorties, il y en a dans l'état prêt. L'utilisateur a l'impression que tous avancent grâce au PARTAGE DE TEMPS : l'ordonnanceur préempte chaque processus au bout de quelques millisecondes et donne la main au suivant. Comme la perception humaine ne distingue pas deux événements séparés de moins d'une trentaine de millisecondes, un processus qui reçoit le processeur vingt fois par seconde paraît continu, alors qu'il est en réalité arrêté 95 pour cent du temps.
d) Un processus possède son propre espace mémoire, isolé de celui des autres. Un fil d'exécution est un flot d'instructions à l'intérieur d'un processus. Deux fils du même processus PARTAGENT l'espace mémoire, donc les variables globales, le tas et les fichiers ouverts ; ils ne partagent PAS leur pile d'appels ni leurs registres, chacun ayant les siens. C'est ce partage de la mémoire qui rend la communication entre fils immédiate et qui rend indispensable la protection des sections critiques : deux processus ne peuvent pas s'écraser mutuellement une variable, deux fils le peuvent à chaque instant.
e) Sur un cycle de millisecondes, il passe pour cent de son temps élu et pour cent bloqué, la part passée à l'état prêt étant négligeable si la machine n'est pas chargée. C'est un processus dit lié aux entrées-sorties. L'ordonnanceur devrait le PRIVILÉGIER, c'est-à-dire lui donner le processeur en priorité dès son réveil : il ne le gardera que 5 millisecondes, puis se rebloquera en libérant le coeur pour les autres. Le faire attendre serait doublement coûteux, puisqu'on retarderait sa prochaine lecture disque, laissant le périphérique inoccupé, alors que le lancer coûte presque rien. C'est le principe des ordonnanceurs à priorité dynamique, qui augmentent la priorité d'un processus à chacun de ses blocages.