[SOS] Allocateur mémoire First Fit - Vos conseils

Romain LABBE labbe.romain at wanadoo.fr
Lun 15 Juin 14:16:07 CEST 2009


Salut Konstantin,

Ok, désolé pour le retard, tu as implémenté quelle méthode ?
Quelle solution as-tu mis en place contre la fragmentation ?

Romain

-----Message d'origine-----
De : sos-bounces at the-doors.enix.org [mailto:sos-bounces at the-doors.enix.org]
De la part de Konstantin Tcholokachvili
Envoyé : jeudi 11 juin 2009 18:25
À : SOS mailing-list
Objet : Re: [SOS]Allocateur mémoire First Fit - Vos conseils


Merci, c'est sympa.
J'ai déjà fini l'écriture de l'allocateur mémoire. Il faut que je
rajoute le demand-paging.

Konstantin Tcholokachvili

Le 10/06/09, Romain LABBE<labbe.romain at wanadoo.fr> a écrit :
> Salut,
>
> Voici une petite explication que j'ai monté il y'a quelques temps lorsque
> j'ai écrit mon petit allocateur super simple
>
> http://www.hexanium.com/zumba/archi/zkvmm/index.htm
>
> Si ca peut t'aider
>
> Romain
>
> -----Message d'origine-----
> De : sos-bounces at the-doors.enix.org
[mailto:sos-bounces at the-doors.enix.org]
> De la part de Konstantin Tcholokachvili
> Envoyé : dimanche 7 juin 2009 16:18
> À : anthoine.bourgeois; SOS mailing-list
> Objet : Re: [SOS]Allocateur mémoire First Fit - Vos conseils
>
>
> Merci pour les suggestions,
>
> J'avais pensé aussi au "demand paging", je vais me diriger sur cette
> voie-là.
> J'ai déjà un malloc() et free() fonctionnel mais pas encore très bien
testé.
>
> Cordialement,
>
> Konstantin Tcholokachvili
>
> Le 03/06/09, anthoine.bourgeois<anthoine.bourgeois at orange.fr> a écrit :
>> Bonjour,
>>
>>> Message du 24/05/09 11:24
>>> De : "Konstantin Tcholokachvili"
>>> A : Sos at the-doors.enix.org
>>> Copie à :
>>> Objet : [SOS] Allocateur mémoire First Fit - Vos conseils
>>>
>>>
>>> Bonjour,
>>>
>>> Je souhaiterais avoir votre consultation.
>>>
>>> Je suis sur le point d'implémenter un allocateur mémoire, mais pas un
>>> slab allocator, quelque chose de plus simple comme le first fit.
>>>
>>> Si j'ai bien compris, il faut décider dans quelles régions de mémoire
>>> on pourra allouer la mémoire et où ça ne sera pas possible:
>>>
>>> de SOS_KMEM_VMM_BASE à BIOS_N_VIDEO_START: région libre
>>> de BIOS_N_VIDEO_START à BIOS_N_VIDEO_END: région occupée
>>> de BIOS_N_VIDEO_END à kernel_core_base: région libre
>>> de kernel_core_base à bootstrap_stack_bottom_vaddr: région occupée
>>> de bootstrap_stack_bottom_vaddr à bootstrap_stack_top_vaddr: région
>>> occupée
>>> de bootstrap_stack_top_vaddr à kernel_core_top: région occupée
>>> de kernel_core_top à SOS_KMEM_VMM_TOP: région libre
>>>
>>> Les régions qui sont libres doivent être mappés en appelant cette
>>> fonction:
>>>
>>> void set_pages_status(sos_vaddr_t base_address, sos_vaddr_t top_address)
>>> {
>>> sos_vaddr_t page_virtual_address;
>>> sos_paddr_t page_physical_address;
>>>
>>> for (page_virtual_address = base_address;
>>> page_virtual_address < top_address;
>>> page_virtual_address = page_virtual_address + SOS_PAGE_SIZE)
>>> {
>>> ppage_paddr = sos_physmem_ref_physpage_new(FALSE);
>>> SOS_ASSERT_FATAL(ppage_paddr != (sos_paddr_t)NULL);
>>>
>>> retval = sos_paging_map(ppage_paddr, vaddr,
>>> FALSE,
>>> SOS_VM_MAP_ATOMIC
>>> | SOS_VM_MAP_PROT_READ
>>> | SOS_VM_MAP_PROT_WRITE);
>>> SOS_ASSERT_FATAL(retval == SOS_OK);
>>>
>>> retval = sos_physmem_unref_physpage(ppage_paddr);
>>> SOS_ASSERT_FATAL(retval == FALSE);
>>> }
>>> }
>>>
>>> Et seront ajoutées à la liste chaînée des régions libres.
>>>
>>> Les régions qui ne sont pas libres on les place dans la liste chaînée
>>> des régions qui ne sont pas libres.
>>>
>>>
>>> En suite pour allouer et désallouer la mémoire on effectue des
> recherches,
>>> ajouts et suppressions dans ces 2 listes.
>>>
>>> C'est bien ça ou j'ai oublié des étapes ou des hypothèses?
>>
>> Tu peux faire comme decrit ci-dessus. Il y a plein de solutions.
>> Ici tu mappes tes regions libres. Ce n'est pas ce que nous faisons
>> dans SOS. Dans SOS, la memoire est mappée uniquement si elle est
utilisée.
>> Donc après cette definition des regions libres.
>>
>> Le problème que tu auras avec la solution que tu nous donne est que
>> ton système depend de la memoire physique. Si tu as de grandes regions
>> libres (typiquement ca approche du Go ou plus dans un espace noyau
32bits)
>> et que tu as une petite memoire physique, dans ce cas ta boucle
>> ci-dessus n'arrivera pas a mapper lorsque tu attendras la fin de
>> ta memoire physique.
>>
>> En bref, il faudrait essayer de décorréler la memoire virtuelle et la
>> memoire physique pour plus de souplesse.
>>
>> Cordialement,
>> Anthoine
>>
>>
>> _______________________________________________
>> Sos mailing list
>> Sos at the-doors.enix.org
>> http://the-doors.enix.org/cgi-bin/mailman/listinfo/sos
>>
> _______________________________________________
> Sos mailing list
> Sos at the-doors.enix.org
> http://the-doors.enix.org/cgi-bin/mailman/listinfo/sos
>
> _______________________________________________
> Sos mailing list
> Sos at the-doors.enix.org
> http://the-doors.enix.org/cgi-bin/mailman/listinfo/sos
>
_______________________________________________
Sos mailing list
Sos at the-doors.enix.org
http://the-doors.enix.org/cgi-bin/mailman/listinfo/sos



Plus d'informations sur la liste de diffusion Sos