Architecture des machines et systèmes informatiques

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 :

  1. Assurer une fonction de placement des modules dans le programme exécutable, en les mettant les uns derrière les autres et en tenant compte de leur taille.
  2. Translater les modules de façon à permettre leur bon fonctionnement dans l'espace qui leur a été attribué.
  3. Relier les modules entre eux, en associant les liens à satisfaire (partie du lien qui se trouve dans le module qui cherche à accéder à un objet) aux liens utilisables correspondants. (partie du lien située dans le module fournissant l'objet).
  4. Compléter la liste des modules avec des modules en bibliothèque.
2.2. Question B

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:

TRUC 0
CHAINE 0 + 2842 = 2842
GETOPT 2842 + 1048 = 3890
SHADOK 3890 + 860 = 4750
UTIL 4750 + 2320 = 7070
taille totale 7070 + 1132 = 8202
La taille totale du programme est la somme des tailles de tous les modules, ou encore l'adresse du premier emplacement laissé libre par le dernier module, c'est-à-dire, la somme entre son adresse d'implantation et sa taille, soit 8202.

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

lu MACHIN 0 + 620 = 620
lu EXIT_PROG 0 + 1630 = 1630
las GETOPT
las BIDULE
las SCHMILBLIC
las ER_FATALE
Après prise en compte du module CHAINE lu MACHIN 0 + 620 = 620
lu EXIT_PROG 0 + 1630 = 1630
las GETOPT
las BIDULE
las SCHMILBLIC
las ER_FATALE
lu SOUS_CHAINE 2842 + 257 = 3099
lu DEBUT 2842 + 657 = 3499
lu CONCATENER 2842 + 932 = 3774
Après prise en compte du module GETOPT lu MACHIN 0 + 620 = 620
lu EXIT_PROG 0 + 1630 = 1630
lu GETOPT 3890 + 454 = 4344
las BIDULE
las SCHMILBLIC
las ER_FATALE
lu SOUS_CHAINE 2842 + 257 = 3099
lu DEBUT 2842 + 657 = 3499
lu CONCATENER 2842 + 932 = 3774
Après prise en compte du module SHADOK lu MACHIN 0 + 620 = 620
lu EXIT_PROG 0 + 1630 = 1630
lu GETOPT 3890 + 454 = 4344
las BIDULE
lu SCHMILBLIC 4750 + 1215 = 5965
las ER_FATALE
lu SOUS_CHAINE 2842 + 257 = 3099
lu DEBUT 2842 + 657 = 3499
lu CONCATENER 2842 + 932 = 3774
Après prise en compte du module UTIL lu MACHIN 0 + 620 = 620
lu EXIT_PROG 0 + 1630 = 1630
lu GETOPT 3890 + 454 = 4344
lu BIDULE 7070 + 213 = 7283
lu SCHMILBLIC 4750 + 1215 = 5965
lu ER_FATALE 7070 + 513 = 7583
lu SOUS_CHAINE 2842 + 257 = 3099
lu DEBUT 2842 + 657 = 3499
lu CONCATENER 2842 + 932 = 3774
L'adresse de lancement est la valeur trouvée dans l'un des modules augmentée de l'adresse d'implantation de ce module: 0 + 2546 = 2546.

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:

SHADOK précède UTIL
SHADOK précède CHAINE
UTIL précède CHAINE
Les ordres possibles sont donc: GETOPT SHADOK UTIL CHAINE
SHADOK GETOPT UTIL CHAINE
SHADOK UTIL GETOPT CHAINE
SHADOK UTIL CHAINE GETOPT
1.4. Question D.

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.

P1 0 + 6 = 6
P2 6 + 4 = 10
P3 10 + 14 = 24
P4 24 + 2 = 26
3.2. Question B

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.

P4 0 + 2 = 2
P2 2 + 4 = 6
P1 6 + 6 = 12
P3 12 + 14 = 26
Notons que líabsence díentrée sortie de ces processus dans cette question, a pour conséquence que les processus ne se bloquent pas. Les seules transitions sont entre les états actif et prêt. La priorité étant statique, le processus actif reste plus prioritaire que ceux qui sont dans la file des prêts.

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 líinstant 0, P4 étant prioritaire, devient actif pendant 1 UT.

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.

P4 4
P2 11
P1 13
P3 32