[SOS] Allocateur mémoire First Fit - Vos conseils
Konstantin Tcholokachvili
tcholoka at gmail.com
Lun 15 Juin 18:29:29 CEST 2009
Salut,
J'alloue l'espace qui est disponible après le noyau, comme expliqué
ici: www.distantvoices.org/html/malloc.html
Je me suis pas encore penché sur la fragmentation.
Merci pour ton intervention.
Konstantin Tcholokachvili
P.S: J'espère que j'aurai une version de démonstration à la fin de
cette été. Si tu veux je te passerai le code source, ça devrait être
un OS assez original.
Le 15/06/09, Romain LABBE<labbe.romain at wanadoo.fr> a écrit :
> 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
>
> _______________________________________________
> 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