Correction
Exercice 1 : Gestion d'une mémoire par zones
Question 1
Une zone libre contient un en-tête de deux mots : mot1 : adresse de la zone libre suivante mot2 : taille de la zone Les zones libres sont organisées selon une liste chainée, repérée par un pointeur de début : adresse_premiere_zone.

 
 
  Question 2
Algorithme First Fit : la première zone de taille suffisante est sélectionnée. On choisit par ailleurs d'implanter le programme en fin de zone libre de manière à faciliter la gestion des pointeurs. gestion du résidu issu de l'allocation : soit a la taille de la zone résiduelle, a = Ti - T où Ti est la taille de la zone et T la taille du programme à allouer. Deux cas sont possibles en fonction de e, la taille minimale de zone autorisée. 1/ a < e, la zone résiduelle est jugée négligeable et elle est alors supprimée de la liste des zones libres (à modification du chainage des zones libres). a ³ e, la zone résiduelle est conservée (àmodification de la taille de la zone libre). D'où l'algorithme suivant avec parcours, avant : pointeurs sur zone libre A : adresse d'implantation du programme de taille T hors cas particulier sur le chainage (zone libre en tête et fin de liste).
 
 
Parcours := premiere_zone_libre; avant := premiere_zone_libre; trouve = faux; tant que (parcours <> NULL et trouve = faux) faire si (parcours.taille >= T) alors
  • on a trouvé une zone de taille suffisante parcours.taille = parcours.taille - T; A := parcours + parcours.taille; trouve = vrai; si (parcours.taille < e)
  • on libère la zone libre résiduelle avant.suivant = parcours.suivant; fsi avant = parcours; parcours = parcours.suivant; fait
Question 3
parcours = adresse_premiere_zone; avant = adresse_premiere_zone; taille_mem = max; trouve = faux;
 
 
tant que (parcours <> NULL) faire si (T <= parcours.taille < taille_mem) alors
  • on retient la zone zone_trouve = parcours; taille_mem = parcours.taille; zone_avant = avant; trouve = vrai; fsi avant = parcours; parcours = parcours.suivant; fait
  • à la sortie de la boucle zone_trouve contient l'adresse de la zone dont la taille engendre la plus petit residu sauf si trouve = faux si (trouve == vrai) alors zone_trouve.taille = zone_trouve.taille - T; A = zone_trouve + zone_trouve.taille; si (zone_trouve.taille < e)
  • on libère la zone libre résiduelle zone_avant.suivant = zone_trouve.suivant; fsi fsi
Question 4
Il y a deux espaces libres : la zone (1700K-2000K) et la zone (2300K-2560K) soit un total de 560K ce qui est supérieur à la taille de P5. Mais ces deux zones ne sont pas contiguës et on ne peut donc pas allouer l'espace mémoire à P5. Il faut donc compacter l'espace mémoire pour arriver à la configuration 

Question 5 Une zone libérée doit être fusionnée à sa voisine si celle-ci est également une zone libre : différents acas doivent être considérés.
  • Cas 1 : la zone libérée est elle-même précédée d'une zone libre ZL : on effectue une fusion et on modifie la taille de ZL : ZL.taille = ZL.taille + zoneliberee.taille;
  • Cas 2 : la zone libérée est cernée par deux zones occupées : on crée une nouvelle zone libre
  • Cas 3 : la zone libérée est suivie par une zone libre : on fusionne les deux zones (on ajoute les tailles des deux zones) et on modifie le chainage des zones libres. les infos de gestion (taille et suivant) sont "remontées" dans les deux premiers mots de la zone libérée.
  • Cas 4 : la zone libérée est cernée par deux zones libres A et C : on fusionne les trois zones libres. c'est-à-dire : la zone libre C est supprimée du chainage et les infos de gestion sont remontées dans les deux premiers mots de la zone A.
Exercice 2 : Pagination
Question 1
Décrivez le format d'une entrée de la table des pages d'un processus .

 
 
bit V : indique si la page est prése,nte ou non en mémoire centrale V= 0, page non présente bit M : indique si la page a été modifiée bit A : champ pour les informations à la apge (algorithmes de remplacement de pages) protec : champ de protection pour les accès en lecture/écriture/exécution adresse réelle : adresse de la case contenant la page.
Question 2
adresse_reelle et adresse_virtuelle sont fde type adresse, ce type est formé de deux champs : champ1 et champ2 instruction est de type type_instruction qui peut prendre pour valeurs : lecture, écriture et exécution.
 
 
procedure décodage (adresse_réelle : adresse, adresse_virtuelle : adresse, instruction : type_instruction) debut A = table_des_pages(adresse_virtuelle.page); si (A.V ==0)  alors réveil du processus de défaut de page : chargement de la page et mise à jour de  la table des pages fsi Verifier_droits_accès (instruction, A. protec); A.A = 1; - on positionne l'accès à la page si (instruction == écriture) alors A.M = 1; fsi adresse_reelle.champ1 = A.adresse_reelle; adresse_reelle.depl = adresse_virtuelle.depl; fin
Question 3
Soit la liste des pages virtuelles référencées aux instants t = 1, 2,..., 11 3 5 6 8 3 9 6 12 3 6 10


Question 4
à question de cours
Question 5

 
Mémoire virtuelle Exercices dirigés