[SOS] Allocation Memoire Physique & Macro (List.h)

romain romain at hexanium.com
Jeu 20 Oct 13:22:22 CEST 2005


Salut,

Ca fait un moment que je n'interviens pas, mais je lis les messages tres
régulierement, en ce moment c'est assez tranquille sur la news donc j'en
profite pour poser des questions comme qui dirait basic:

En fait je me casse la tete sur l'allocation memoire, je suis donc
repartis depuis l'Article 3.
Je suis pas tres alaise avec les Macros, j'ai mis du temps à piger le
principe de "Named" dan le fichier List.h qui ne contient que des macro
(un casse tête pour moi). Disont qu'apres avoir compris le principe des
macro "Named" je me suis dit !

"Purée c bien en fait les macros !" 
(j'y etait un temps soit peut récalsitrant)

Question 1:
-----------
Dans un premier temps j'aimerais que l'on m'explique une bonne fois pour
toute le fonctionnement (syntaxique) de ce genre de macro: (
list_get_tail_named )

((list)?((list)->prev):NULL)

Je l'ai rencontré assez souvent, j'imagine que c'est un test, (simplifié
en macro), j'imagine aussi que derriere les : c'est les paramtres de
retour mais si j'essaye de comprendre j'en arrive a ça:

Si list est égale a list->Prev alors le define équivaut à mettre NULL,
quand je regarde le reste du source et le nom "Récupere la queue" et que
la liste est circulaire j'imagine qu'elle retoure Head->Prev qui est
bien la queue (la fin).

Mais dans la syntaxe c'est pas explicite ! J'ai un doute sur le
fonctionement du coup !

Quelqu'un peu t il m'éclaircire les idées sur le genre de syntaxe avec
des '?' et des ':' ?


Question 2:
-----------
Quand je regarde dans le physmem.c voila ce que je trouve:

-Dans le "sos_physmem_setup"
On initialise la table de descripteur de page (on les marque utilisées,
reservées, libres, etc...) 
Puis on ajoute le pointeur sur le descripteur soit dans used_ppage (page
utilisé) ou free_ppage (page libre) suivant si l'adresse physique de la
page est ou non dans une zone reserve (Bios, Kernel, etc..)
Donc on fait un:
list_add_head  pour les page libre ou les pages utilisée


-Dans "sos_physmem_ref_physpage_new"
On récupere "list_pop_head" une page libre et on la "list_add_tail" dans
la liste des page utilisée.

-Dans "sos_physmem_ref_physpage_at"
On vérifie que le descripteur de la page spécifié est libre si la page
est libre on
"list_delete" depuis les page free puis on "list_add_tail" dans les page
utilisés.

-Dans "sos_physmem_unref_physpage"
Si le compteur de référence l'authorise on "list_delete" depuis les
pages utilisé et ou "list_add_head" dans les pages libres.

Bref tous ca pour dire que je comprend pas pourquoi on ajout en "Tête"
ou en "Queue" de la liste circulaire !
Quel est l'intérêt ?
J'ai du zapper quelque chose dans cette masse de code, quelqu'un peut il
m'éguiller ?

J'imagine bien qu'il y'a une raison a cette "agencement" dans les listes
mais pkoi ? 

(Exemple:
 -dans le "_New" pkoi ajouter en Fin de pages utilisé et pas en début de
liste ?
 -pkoi dans le "_Unref" pkoi ajouter en tete de page libre et pas en fin
?)


Pour moi ce sont des pointeurs vers les descripteurs, l'ordre n'a pas
vraiement de sens ?



KAISER Edouard:
---------------
Edouard j'etait comme toi partisant du modele sans pagination, ( en fait
j'etait comme toi partisant d'un allocateur de memoire simple :P ).
j'ai fait mes recherche mais je doit me rendre à l'évidence que de ne
pas utiliser la pagination rend les choses encore plus compliqué (plus
c'est possible ? (' ) ( .) ) bref, j'y etait récalsitrant mais je suis
bien forcé de m'y mettre. Si tu trouve une solution, pense quand meme à
la news ;).


Voila,

Meci à vous

Romain





Plus d'informations sur la liste de diffusion Sos