[SOS]Multi Threads et Allocation memoire...

Romain LABBE labbe.romain at wanadoo.fr
Jeu 17 Nov 11:02:53 CET 2005


Salut,

Je suis donc en plein dans le multi threads et toutes les subtilités que
ça comporte.
Je me pose une question au niveau de l'allocation mémoire dynamique. Je
suppose que je suis en mode "noyau", enfin disons que dans mon OS il n'y
a pas de notion "utilisateur" (contexte, 2 stacks et PD, etc...).

Donc je me dis:
Si j'ai 2 threads qui font des allocations dynamiques et que
l'allocation n'est pas protégée ça risque de faire n'importe quoi ! (Si
le thread qui alloue est préempté lors de l'allocation par un autre
thread qui lui aussi alloue...plaf !!! ), Je me trompe ?

Si je me rappel bien un article de SOS sur la synchro il y'a 3
ingrédients pour que ça "foire":

1 - le flux d'instruction utilise plusieurs opérations élémentaires
(c'est le cas!)
2 - le thread peut être interrompu - flux non atomique (c'est mon cas
aussi pour le moment, aie !)
3 - lors de la préemption les données peuvent être manipulé par un autre
thread (c'est le cas aussi, l'autre thread essaye d'allouer lui aussi !)

Donc, mon code est pour le moment est cocktail explosif à ce niveau !
 
1 – le flux en opérations élémentaires :
Je peux rien y faire…
 
2 – Rendre le thread non interruptible :
Ca je peux désactiver les interruptions au moment critique de la
recherche de mes blocks de memoire.
Je peux rendre non interruptible la portions critique d’allocation ?
 
3 – Faire que les autres threads n’accèdent pas a la ressource partagée
:
Je viens de créer des sémaphores tous simple, je peux peut être protéger
la vmm avec un sémaphore ?


Je pencherais pour la solution de desactivation des interruptions car
l'allocation est en générale assez courte, peut etre c'est trop couteux
de changer de contexte pour une allocation ?
 
Quand je regarde le code de SOS et les flags (ATOMIC) je comprends pas
ben ou tous ça mène. Je vois pas comment est protégé la vmm
(sos_disable_IRQs, ou semaphore, ou …) dans SOS ?

 
Pouvez vous m’éclairer ?

Grand Merci
 
A++
 
Romain
 
 

 




Plus d'informations sur la liste de diffusion Sos