Skip to topic | Skip to bottom
Home
Minfo06
Minfo06.TpAsy11r1.3 - 12 Dec 2006 - 16:44 - GuillaumeChazaraintopic end

Start of topic | Skip to actions
Ce TP reprend le deuxième exercice du TpAsy6. Il s'agit cette fois d'implémenter un pilote de périphérique en mode bloc représentant une zone mémoire dans le noyau. Cette zone mémoire sera composée d'une liste de blocs. L'écriture et la lecture ont donc le comportement attendu sur un buffer. Il serait préférable de faire un véritable périphérique en mode caractère qui implémente la méthode seek. Nous allons donc expérimenter différentes méthodes d'allocation pour créer les blocs du buffer.

__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) (free_pages pour la suppression). 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 créer son propre cache slab pour les blocs et d'y faire appel. Tous les blocs auront donc la même taille. Créez donc un cache avec la méthode kmem_cache_create. Dans /proc/slabinfo vous pourrez monitorer l'utilisation de votre cache. La significations des champs est : cache-name, num-active-objs, total-objs, object size, num-active-slabs, total-slabs, num-pages-per-slab.

kmalloc

La méthode plus habituelle est d'utiliser kmalloc(size, GFP_KERNEL) avec des tailles variables. Le noyau fera quand même appel à des slabs. Surveillez les caches size-... dans /proc/slabinfo.

vmalloc

Pour allouer des espaces mémoire de grande taille, il faut utiliser vmalloc (et 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 mem_map qui contient l'ensemble des pages mémoire. Vous pouvez démarrer qemu avec 64 Mo de RAM pour avoir une carte mémoire réduite de moitiée.

-- GuillaumeChazarain - 05 Dec 2006
to top


You are here: Minfo06 > TpAsy11

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