Re: [SOS] Résultat différent sous Bochs & QEmu

KAISER Edouard edouard.kaiser at gmail.com
Ven 5 Aou 01:12:40 CEST 2005


C'est vrai que je n'ai pas expliqué mon problème ni donné de sources.
En fait, c'est tout simple si je puis me permettre. J'ai découpé comme
dans SOS la RAM en page de 4Ko.
Pour cela j'ai 3 pointeurs vers un debut de liste doublement chainee
definit en static dans mon fichier de gestion de la mémoire physique.
Un pointeur pour les zones réservés, libres et occupées.
Il y a une fonction d'innitialisation qui remplit un tableau de
structure décrivant les pages dont la taille est calcule par le
préprocesseur.
En fait je definit la taille de la ram en dur dans un header :
#define RAM_SIZE 32
La taille de mon tableau est donc :
#define ARRAY_LONGUEUR ((RAM_SIZE*1024*1024)/4096)
Cette fonction d'initialisation passe tout le tableau en revu et a
chaque tour incremente une variable Addresse de 0x1000 (4096). Selon
la valeur de cette variable, je test si c'est une page présente en
zone réservé, libre ou occupée.
Et j'enfile la structure dans la liste chainée correspondante.
A la fin de cette phase d'initialisation j'ai donc mes listes chainées
remplis comme il le faut.
Ensuite je fais un test en boucle de la fonction que j'ai appellé
get_page() qui me renvoit l'adresse d'une page considere comme libre.
Cela boucle tant qu'il y a des pages libres dans la liste chainée des
pages libres.
Et bien c'est à cette phase de test que ça plante parfois.
En variant la taille de la RAM ça plante ou non... c'est assez
étrange. Si je met 16 ça passe, mais 32 bochs plante. 19 passe, mais
pas 20... trés bizarre.

Je me suis peut etre pas trés bien exprimé, alors pour ceux qui auront
le courage, voila le code :

http://kaiser.edouard.free.fr/besos/mm.c
http://kaiser.edouard.free.fr/besos/mm.h

Merci à tous !
-- 
KAISER Edouard.
Wiki-Blog : http://kaiser.edouard.free.fr/
BesOS : http://besos.mtp.epsi.fr/


Plus d'informations sur la liste de diffusion Sos