Croisière au coeur d'un OS Etape 3 : Gestion de la mémoire physique

Testons !

Conformément à l'habitude, la petite démo est aussi peu excitante que les précédentes (voir la figure 6). Elle se résume à la fonction sos/main.c:test physmem(), qui est constituée de deux boucles.

La première boucle alloue une page physique à chaque itération, jusqu'à ce que plus aucune page physique ne soit disponible. Le coeur de la boucle consiste ensuite à ´ecrire sur chaque octet de la page allouée : d'une part 2 fois 511 entiers et d'autre part 2 pointeurs de chaînage prev/next. Ces éléments sont rassemblés dans une structure struct my ppage qui possède exactement la taille d'une page. Les entiers précédents sont tous affectés à la valeur "adresse de la page". Et les pointeurs de chaînage servent à ajouter chaque page allouée dans la liste des pages allouées par le test (ppage list).

La seconde boucle libère une page de la liste des pages allouées ppage list à chaque itération, jusqu'à ce que cette liste soit vide. Le coeur de la boucle consiste ensuite à vérifier que les 2 fois 511 entiers de la page valent exactement l'adresse de la page. S'il n'y avait plus égalité, alors cela signifierait qu'il y aurait eu écrasement de données, et la démo l'indiquerait.

Enfin, une fois les boucles terminées, on indique la taille de la mémoire qui a été allouée puis libérée.

Valid XHTML 1.0!