Changes between Version 13 and Version 14 of TME2-2014


Ignore:
Timestamp:
Feb 8, 2013, 11:00:51 AM (12 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • TME2-2014

    v13 v14  
    1212
    1313Pour les fonctions auxiliaires:
    14  * kprintf : Affichage formaté de messages pour le système
    15  * kgetc, kgets : Lecture d'un caractère ou d'une ligne (jusqu'au return)
    16  * strtol : Conversion chaine -> entier
    17  * memcpy : Déplacement de zone de mémoire
    18  * strcmp : Fonctions de manipulations des chaines
    19  * rand : Un générateur aléatoire
    20  * list : Gestion de listes chainées   
     14 * Affichage formaté de messages pour le système
     15 * Lecture d'un caractère ou d'une ligne (jusqu'au return)
     16 * Conversion chaine -> entier
     17 * Déplacement de zone de mémoire
     18 * Fonctions de manipulations des chaines
     19 * Générateur aléatoire
     20
     21Gestion de listes chainées
     22 * initialisation
     23 * accesseurs
     24 * itérateurs
    2125
    2226Pour l'allocation dynamique:
    23  * kmalloc : Allocation dynamique dans le tas du système
    24  * kfree : libération
     27 * Allocation dynamique dans le tas du système
     28 * libération
     29
    2530
    2631= Gestion de la mémoire dynamique
     
    6772    spinlock_t lock;
    6873    uint32_t *start;
     74    uint32_t *current;
    6975    uint32_t *limit;
    7076};
     
    9197}}}
    9298
    93 == Travail demandé
     99= Travail demandé
    94100
    95 Le travail à réaliser est d'implémenter cette API et la tester par une application de test.
     101Dans le répertoire osm1/tp2 du compte encadr, vous trouverez les 2 répertoires suivants:
     102{{{
     103├── libk
     104│   ├── kbzero.c
     105│   ├── kgetc.c
     106│   ├── kgets.c
     107│   ├── klist.h
     108│   ├── kmalloc.c
     109│   ├── kmalloc.h
     110│   ├── kmemmove.c
     111│   ├── kprintf.c
     112│   ├── krand.c
     113│   ├── kstdio.h
     114│   ├── kstdlib.h
     115│   ├── kstrcmp.c
     116│   ├── kstrcpy.c
     117│   ├── kstrlen.c
     118│   ├── libk.h
     119│   └── Makefile
     120└── test_libk
     121    ├── Makefile
     122    ├── test_kbzero.c
     123    ├── test_kgetc.c
     124    ├── test_kgets.c
     125    ├── test_klist.c
     126    ├── test_kmalloc.c
     127    ├── test_kmemmove.c
     128    ├── test_kprintf.c
     129    ├── test_krand.c
     130    ├── test_kstrcmp.c
     131    ├── test_kstrcpy.c
     132    └── test_kstrlen.c
    96133
    97 Votre application de teste doit déclarer deux variables globales, une de type heap_s et l'autre est un tableau d'octets représentant la mémoire à gérer par le heap_manager.
     134}}}
    98135
     136Pour chaque fonction, ou groupe de fonction (kmalloc), vous allez devoir écrire le service et le programme de test en faisant attention a tester les cas limite.
     137Les fichiers sont compilables mais sont vides pour la plupart.
     138
     139Pour compiler vous devez
     140 * aller dans le répertpoire **libk** et taper **make**.
     141 * aller dans le répertoire **test_libk** et taper **make**
     142
     143Vous pouvez tester avec
     144 * **./test_klist**
     145 * **./test_strlen**
     146
     147Pour le kmalloc votre application de test doit déclarer un tableau d'octets représentant la mémoire à gérer par le heap_manager.
    99148{{{
    100149#define ZONE_SIZE      8*1024
    101 
    102150int8_t zone [ZONE_SIZE];
    103 struct heap_s heap;
    104151}}}
    105152
    106 Vous devez donc écrire les trois fonctions de l'API dans le fichier kmalloc.c et leur prototype dans le fichier kmalloc.h. En cas d'échec du malloc, vous devrez faire un parcours de la zone mémoire et fusionner les zones libres contiguës.
    107 
    108 **Vous écrirez un programme de test dans le fichier main.c mettant en évidence les cas de fonctionnement.**
    109 
    110 Afin de mettre au point votre allocateur, il est utile d'écrire une fonction qui affiche l'état des blocs de l'allocateur, par exemple
    111 
     153La fonction kmalloc_status affiche l'état des blocs de l'allocateur.
    112154{{{
    113 void kmalloc_print(void);
     155void kmalloc_status(void);
    114156}}}
     157pour chacune une fonction de test