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

Konstantin Tcholokachvili tcholoka at gmail.com
Dim 24 Mai 11:16:59 CEST 2009


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?

Merci d'avance,

Konstantin Tcholokachvili


Plus d'informations sur la liste de diffusion Sos