Corrigé de líexamen de la partie systèmes informatiques du 9 juin 2001
Solution de líexercice 1
1.1. Question A
La construction de programmes peut devenir relativement complexe lorsque la taille du programme devient importante. Pour cela, on est amené à découper les programmes en modules. Chacun des modules peut être compilé de façon séparée. L'éditeur de liens a pour but de constituer un programme exécutable à partir d'un ensemble de modules. Le chargeur peut ensuite mettre en mémoire ce programme exécutable pour l'exécuter.
Le rôle de l'éditeur de liens se présente sous plusieurs aspects :
L'adresse d'implantation d'un module est 0 pour le premier, et pour les autres, le premier emplacement laissé libre par le module qui le précède, c'est-à-dire, la somme entre son adresse d'implantation et sa taille:
La table des liens contient tous les identificateurs présents dans les modules, en tant que lien utilisable ou lien à satisfaire, ainsi que éventuellement les noms des modules (nous ne les mettrons pas ici). De plus, la table associe à tout identificateur rencontré comme lien utilisable dans un module, leur adresse dans le programme, obtenue en ajoutant à leur adresse dans ce module l'adresse d'implantation du module.
Après prise en compte du module TRUC
2.3. Question C
On a le graphe suivant des références entre les modules:
L'éditeur de liens parcours séquentiellement la bibliothèque pour savoir s'il doit ou non incorporer les modules successifs. Au cours de ce parcours, pour chaque module en bibliothèque, il regarde donc si ce module, par ses liens utilisables, peut satisfaire un lien de la table, encore non satisfait. Si c'est le cas, il ajoute le module à la liste, et effectue le traitement du premier passage sur ce module, c'est-à-dire, définit son implantation, et ajoute ses liens à la table. Si ce module contient un lien à satisfaire qui n'était pas encore dans la table, il doit pouvoir être satisfait par un module qui le suit dans la bibliothèque. Le graphe de la figure montre alors que l'on doit respecter les ordres suivants, entre les 4 modules CHAINE, GETOPT, SHADOK et UTIL:
On note que TRUC exporte le lien MACHIN, et CHAINE exporte le lien SOUS_CHAINE, aucun des deux níétant à satisfaire dans les autres modules. On sait que, puis que TRUC contient une adresse de lancement, il síagit díun programme principal. Le fait quíil exporte un lien sans quíil soit à satisfaire dans un autre module est probablement une anomalie : à moins de modifications dans les modules, TRUC ne sera jamais utilisé avec díautres que ceux fournis. Par contre, CHAINE níest pas un programme principal, et sa mise en bibliothèque dans la question C laisse penser quíil peut être utilisé en tant que tel dans díautres programmes, dans lesquels le lien exporté sera alors nécessaire.
Solution de líexercice 2
2.1. Question A
Les processus ont des tables de pages de respectivement 4, 6 et 5 pages utiles. Ces tables sont représentées comme suit, avec líindication pour chaque page de líindication de présence ou non en mémoire, ainsi que la case qui la contient si elle est présente.
Notons que les pages 2, 3, 4, 5, 12 et 13 sont libres, puisquíelles ne sont allouées à aucun processus.
2.2. Question B
Lorsque le processeur accès à líadresse virtuelle <5, 12> pour le compte du processus P2, il va utiliser la table des pages de ce processus, pour constater que la page est présente en mémoire dans la case 15. Il va donc accéder à líadresse physique <case 15, déplacement 12>.
2.3. Question C
Lorsque le processeur accès à líadresse virtuelle <2, 14> pour le compte du processus P3, il va utiliser la table des pages de ce processus, pour constater que la page níest pas présente en mémoire. Il va donc y avoir défaut de page. Le système peut allouer une case libre à la page, puisquíil y en a, par exemple, la case 2. La table des pages de P3 est donc transformée comme suit :
Ensuite, le processeur recommence líaccès à líadresse virtuelle <2, 14> pour le compte du processus P3, en utilisant la nouvelle table des pages de ce processus, pour constater que la page est présente en mémoire dans la case 2. Il va donc accéder à líadresse physique <case 2, déplacement 14>.
Solution de líexercice 3
3.1. Question A
Líordonnancement étant en FIFO, les 4 processus seront traités dans líordre P1, P2, P3 et P4, chacun commençant lorsque le précédent est terminé. Le temps de réponse étant le délai qui sépare líenvoi de la commande du moment de líobtention de la réponse, líenvoi de la commande pour les 4 processus correspond à líinstant 0. Leur temps de réponse respectifs est donc obtenu en ajoutant au moment où ils commencent leur durée díexécution.
Líordonnancement étant en par priorité, les 4 processus seront traités dans líordre P4, P2, P1 et P3, chacun commençant lorsque le précédent est terminé. Leur temps de réponse respectifs est donc obtenu en ajoutant au moment où ils commencent leur durée díexécution.
3.3. Question C
Cette fois, les processus font des entrées sorties. Lorsquíun processus lance une entrée sortie, il passe en état bloqué, jusquíà la fin de cette entrée sortie. Comme il ne peut y avoir quíune seule opération díentrée sortie à la fois, on peut distinguer le blocage en attente du lancement de líopération du blocage parce que líopération est en cours.
A 1, P4 lance une entrée sortie et se bloque pour 2 UT. P2 étant le plus prioritaire parmi les processus prêts, devient actif, pour au plus 1 UT.
A 2, P2 demande une entrée sortie indisponible et se bloque. P1 étant plus prioritaire devient actif, pour au plus 2 UT.
A 3, líentrée sortie de P4 se termine, et P4 redevient prêt. Comme il est prioritaire, il passe à líétat actif, pour au plus 1 UT. De plus, líentrée sortie demandée par P2 est lancée pour 2UT.
A 4, P4 se termine. Ne restent plus que P1, P2 et P3. P1 plus prioritaire reçoit de nouveau le processeur, pour au plus 1 UT.
A 5, líentrée sortie de P2 se termine, et P2 passe à líétat prêt. De plus P1 demande une entrée sortie, qui est lancée pour 2 UT. P2 étant prioritaire devient actif pour au plus 2 UT.
A 7,líentrée sortie de P1 se termine et P1 devient prêt. De plus, P2 demande une entrée sortie, qui est lancée immédiatement pour 3 UT. P1 étant prioritaire devient prêt pour au plus 2 UT.
A 9, P1 demande une entrée sortie qui ne peut être lancée puisque celle de P2 níest pas terminée. P3 étant prioritaire devient actif pour au plus 2 UT.
A 10, líentrée sortie de P2 se termine et P2 devient prêt. Líentrée sortie demandée par P1 est lancée pour 1 UT. P2 étant prioritaire devient actif pour au plus 1 UT.
A 11, P2 se termine. Ne restent plus que P1 et P3. De plus, líentrée sortie de P1 se termine et P1 devient prêt. P1 étant prioritaire devient actif pour au plus 2 UT.
A 13, P1 se termine. P3 est le seul processus restant. Il devient actif pour au plus 1 UT.
A 14, P3 demande une entrée sortie qui est lancée pour 5 UT. Le processeur est inactif.
A 19, líentrée sortie de P3 se termine et P3 devient prêt. P3 devient actif pour au plus 2 UT.
A 21, P3 demande une entrée sortie qui est lancée pour 1 UT. Le processeur est inactif.
A 22, líentrée sortie de P3 se termine et P3 devient prêt. P3 devient actif pour au plus 10 UT.
A 32, P3 se termine. Tous les processus sont terminés.
Les temps de réponse correspondent aux moments où les processus se terminent. Ils sont donnés ci-dessous.