Changes between Version 13 and Version 14 of TME2-2014
- Timestamp:
- Feb 8, 2013, 11:00:51 AM (12 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
TME2-2014
v13 v14 12 12 13 13 Pour 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 21 Gestion de listes chainées 22 * initialisation 23 * accesseurs 24 * itérateurs 21 25 22 26 Pour 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 25 30 26 31 = Gestion de la mémoire dynamique … … 67 72 spinlock_t lock; 68 73 uint32_t *start; 74 uint32_t *current; 69 75 uint32_t *limit; 70 76 }; … … 91 97 }}} 92 98 93 = =Travail demandé99 = Travail demandé 94 100 95 Le travail à réaliser est d'implémenter cette API et la tester par une application de test. 101 Dans 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 96 133 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 }}} 98 135 136 Pour 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. 137 Les fichiers sont compilables mais sont vides pour la plupart. 138 139 Pour 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 143 Vous pouvez tester avec 144 * **./test_klist** 145 * **./test_strlen** 146 147 Pour le kmalloc votre application de test doit déclarer un tableau d'octets représentant la mémoire à gérer par le heap_manager. 99 148 {{{ 100 149 #define ZONE_SIZE 8*1024 101 102 150 int8_t zone [ZONE_SIZE]; 103 struct heap_s heap;104 151 }}} 105 152 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 153 La fonction kmalloc_status affiche l'état des blocs de l'allocateur. 112 154 {{{ 113 void kmalloc_ print(void);155 void kmalloc_status(void); 114 156 }}} 157 pour chacune une fonction de test