* * *
PMMU 3, le retour du retour ?
* * *


 Après le mapping de fichier, il ne nous reste plus qu'à voir l'une des principales utilisations de la mémoire virtuelle : le swap! Le principe est le suivant : on utilise la mémoire secondaire (le disque dur, la cartouche, le réseau) comme lieu de stockage de la mémoire utilisée par le système. Lorsque que l'on a besoin de cette mémoire secondaire, on la ramène dans la mémoire principale et le processeur continue son bonhomme de chemin. L'implémentation utilise toujours le même principe, on utilise la PMMU pour détecter la présence ou l'absence de la mémoire secondaire en mémoire principale. Lors d'une abscence, on trouve une place de libre et on recopie la mémoire secondaire vers la mémoire principale. Le choix d'une place libre est souvent restreint : en général aucune place n'est libre!

 Petits détails techniques

 Et oui le monde serait beau sans cette triste réalitée que sont les ordinateurs. Pour obtenir de bonne performance, il faut bien choisir la meilleure place libre, c'est à dire celle qui ne va pas être utilisée dans peu de temps. Or en général, il est très difficile (pour le système) de connaître à l'avance quelle page mémoire va ou ne va pas être utilisée.

 Pour réaliser ce choix, il y a plusieurs possibilités. On peut utiliser une boule de cristal et choisir de manière aléatoire une place (si on a de la chance, ça marche bien!). La plus simple est de choisir la première place qui nous tombe sous la main. Par exemple on peut prendre la dernière place allouée. Dans ce cas, on gére la liste des places de manière circulaire, et on utilise un pointeur sur la prochaine place à utilisé. Lors d'une allocation de place, on prend la place pointé, et on incrémente le pointeur. Ces approches ne donnent pas de bon résultat. Une approche un peu plus raffinée consiste à prendre la place utilisée la moins récemment, ou si vous préférez celle qui commence à voir des toiles d'araignées se former du fait de son inactivitée. Pour réussir ce tour de passe-passe, on utilise toujours une liste circulaire des différentes page de mémoire. L'algorithme de recherche test si une page a été récemment utilisée, si oui, on position le flag de récente utilisation à faux et on passe la page suivante. Lorsque l'on à trouver une page qui n'a pas été récemment utilisée, alors on l'utilise pour le swap. Cet algorithme trouve toujours une place de libre, même si doit faire le tour des places possibles. De plus il donne de bonne performance, car on peut supposer qu'une page de mémoire qui n'a pas été récemment utilisée à de forte chance de ne pas être utilisée prochainement.

 Sur ce principe, il existe un algorithme, dit de l'horloge qui possède deux pointeurs : l'un pour la recherche de nouvelle page physique, l'autre pour la sauvegarde des pages physiques modifiées. Le comportement du premier est identique au comportement du pointeur dans la gestion circulaire des pages, c'est à dire test si la page à été utilisée, modification de ce flag, ... Le second pointeur s'occupe uniquement de la sauvegarde des pages modifiées et de la modification du flag d'utilisation. On s'arrange pour garder une distance minimum entre ces deux pointeurs, ceci pour permettre de ne pas remplacer trop rapidement une page. Le second pointeur est général géré par un démon (un processus qui tourne tout le temps sur un OS), et il profite des moments libres pour sauvegarder la mémoire sur le disque dur.

 L'implémentation

 L'exemple fournit utilise la même base que le mapping de fichier en mémoire à la différence que le lorsque l'on utilise une page physique, on vérifie que cette dernière n'a pas été modifiée. Si c'est le cas, on la sauvegarde sur le fichier de swap (à la Windows), et on peut de nouveau l'utilisée pour une nouvelle page logique. C'est la seule grande différence avec le mapping. Cependant, dans l'exemple du précédent numéro, le fichier mappé n'était pas modifié, donc il n'y avait pas besoin de sauvegarder les pages physique. Rien n'interdit la modification d'un fichier mappé en mémoire!

 Le programme qui utilise le swap, n'est autre que le célèbre crible d'Eratosthène (pour trouver des nombres premiers). Le principe est le suivant : l'élémination des multiples de nombres premiers de l'ensemble des nombres de départ. Il y a deux programmes d'exemples, l'un utilisant comme algorithme de remplacement de page une simple gestion circualire, l'autre utilisant l'algorithme amélioré de la gestion circualire.

 Voilà la fin de cette série d'articles sur la pagination, j'espère qu'elle vous aura interréssée, et vous aura aidé à comprendre un peu mieux le fonction d'un système d'exploitation, et ces problèmes.



Golio Junior