Skip to topic | Skip to bottom
Home
Minfo
Minfo.Tp11r1.1 - 25 Nov 2007 - 15:35 - NicolasNobelistopic end

Start of topic | Skip to actions

Gestion de la mémoire

Ce TP reprend le second exercice du TP6. Il s'agit toujours d'implémenter un pilote de périphérique avec une liste chaînée de blocs, cette dernière représentant une zone mémoire dans le noyau. L'objet de ce TP est d'expérimenter différentes méthodes d'allocation pour ces blocs.

Reprenez votre module du TP6. L'écriture et la lecture ont toujours le comportement attendu sur un buffer.

Docs : Cours '05 et Cours '06 .

__get_free_pages

La méthode la plus basique d'allocation est de directement demander des pages avec la fonction __get_free_pages(GFP_KERNEL, order) (resp. free_pages).
Utilisez cette méthode, et appréciez l'utilisation de la mémoire en lisant le fichier /proc/meminfo.

slabs

Une méthode plus intelligente est de se gérer son propre cache slab pour les blocs. Tous les blocs étant de taille identique, chacun d'entre eux sera représenté par un objet dans le cache.
Créez donc un cache avec la fonction kmem_cache_create (resp. kmem_cache_destroy) et créez des objets dans ce cache avec la fonction kmem_cache_alloc (resp. kmem_cache_free). Finalement, utilisez /proc/slabinfo pour surveiller l'utilisation de votre cache. L'ordre des champs renvoyés par cette commande est : cache-name, num-active-objs, total-objs, object size, num-active-slabs, total-slabs, num-pages-per-slab.

kmalloc

La fonction d'allocation de mémoire que vous utilisiez auparavant était probablement kmalloc(size, GFP_KERNEL) avec des tailles variables. Lors de l'utilisation de cette fonction, le noyau fait quand même appel à des slabs. Surveillez les caches nommés size-... dans /proc/slabinfo.

vmalloc

Pour allouer des espaces mémoire de grande taille, il faut utiliser vmalloc (resp. vfree). Utilisez cette approche et surveillez la consommation mémoire. Que constatez vous ?

Carte utilisation de la mémoire

Modifiez votre pilote de périphérique pour qu'il parcoure toute la mémoire et que la méthode read liste les compteurs d'utilisation de chaque page en mémoire. Pour cela vous utiliserez la variable struct page *mem_map qui contient l'ensemble des pages mémoire. Vous pouvez démarrer Qemu avec 64 Mo de RAM (-m 64) pour avoir une carte mémoire réduite de moitié.

-- NicolasNobelis - 25 Nov 2007
to top


You are here: Minfo > ApprofondissementSysteme > Tp11

to top

Copyright © 1999-2017 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding WIKIDeptinfo? Send feedback