[Kos-cvs] [kos] Modification CVS par thomas

KOS CVS Gestion CVS KOS <d2@kos.enix.org>
Tue, 17 Jul 2001 10:47:03 +0200 (CEST)


Module :	kos
Modifié par :	thomas	17/07/01 10:47:03

Fichiers modifiés :
	.              : MkVars 
	loader         : Makefile 
	modules        : spinlock.h 
	modules/kmem   : Makefile _kmem.h kmem.c kmem.h test.c 
	modules/task   : _task_init.c _task_kthread.c 
	modules/task-x86: task-x86.c 
	modules/vmm    : _vmm.c 
Fichiers ajoutés :
	modules/kmem   : _kmem_alloc.c _kmem_free.c _kmem_init.c 
	                 _kslab.h _kslab_cache_alloc.c 
	                 _kslab_cache_create.c _kslab_cache_destroy.c 
	                 _kslab_cache_free.c _kslab_init.c 
	                 _kslab_page_alloc.c _kslab_page_move.c 
	                 _kslab_utils.c _kvmem.h _kvmem_alloc.c 
	                 _kvmem_free.c _kvmem_init.c _kvmem_utils.c 
Fichiers enlevés :
	modules/kmem   : kfree.c kmalloc.c kmem_utils.c kvalloc.c 
	                 kvfree.c kvmem.h kvmem_init.c kvmem_utils.c 

Détails :
Utilisation de slab, plutot que d'un kmalloc/kfree trop porc.

Bref maintenant kmalloc est une petite fonction, qui pour des blocs de
taille inférieure ou égale à 2048 octets utilise un des cache créés
spécialement pour l'occasion. Si c'est > 2048, on utilise kvalloc.

Pour l'instant un kfree() se solde par un mechant lookup dans tous les
caches a la recherche du bloc qui correspond. On va optimiser en
proposant deux kfree() :
int kfree_size_known(void *block, size_t size);
int kfree_size_auto(void *block);
L'utilisation de la premiere fonction permettra de booster la
liberation de l'element en question.

D'autre part l'implementation des slabs est inspiree de celle de Jeff
Bonwick, mais tout n'est pas (encore) implemente comme lui. Tout ce
qui est constructor/destructor, comme je sais pas encore bien comment
il fait, j'ai mis ca de cote pour plus tard.

Ce qui est important dans ce commit, c'est que maintenant on a un
allocateur de slab, independant du kmalloc, qui peut etre utilise pour
allouer des structures fréquemment demandées.

Le kmalloc repose sur ce slab, mais ca ce n'est qu'une anecdote.

Concernant le test de cette nouvelle implementation :
* KOS actuel marche
* test.c modifie pour qu'il n'alloue que des blocs <= 2048 octets ne
pose aucun probleme.

Je n'ai pas fait d'autres tests plus approfondis.