Changes between Version 14 and Version 15 of TME2-2014
- Timestamp:
- Feb 7, 2014, 10:04:41 AM (12 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
TME2-2014
v14 v15 5 5 [[PageOutline]] 6 6 7 = Objectifs7 == Objectifs 8 8 9 Le but de cette séance est de programmer les fonctions auxiliaires et l'allocateur mémoire que va utiliser le systeme. Ces fonctions sont un sous-ensemble de la bibliothèque libc. 10 11 Nous allons les écrire et les valider sur Linux. Elles seront adaptées au système plus tard. 9 Le but de cette séance est de programmer les fonctions auxiliaires et l'allocateur mémoire que va utiliser le système. Ces fonctions sont un sous-ensemble de la bibliothèque libc. La librairie contient aussi une API de gestion de listes doublement chainée que nous verrons plus tard. 10 Nous allons écrire et valider sur Linux. Elles seront adaptées au système plus tard (il y aura très peu de modification). 12 11 13 12 Pour les fonctions auxiliaires: 14 13 * Affichage formaté de messages pour le système 15 * Lecture d'un caractère ou d'une ligne (jusqu'au return)16 14 * Conversion chaine -> entier 17 15 * Déplacement de zone de mémoire 18 16 * Fonctions de manipulations des chaines 19 17 * Générateur aléatoire 20 21 Gestion de listes chainées22 * initialisation23 * accesseurs24 * itérateurs25 18 26 19 Pour l'allocation dynamique: … … 29 22 30 23 31 = Gestion de la mémoire dynamique 32 33 == Principes == 34 35 L'allocation dynamique de la mémoire est une fonctionnalité fondamentale qui fait partie des systèmes d'exploitation depuis les années 1960. 24 == Principes de la gestion de la mémoire dynamique 36 25 37 26 La zone mémoire disponible pour faire des allocations dynamiques peut être vue comme un ensemble de blocs mémoire (zone de mémoire contiguë de taille variable). l'allocateur doit répondre à des requêtes de type réservation/libération de certains nombres de ces blocs. … … 63 52 [[Image(exempleblocs.png, nolink, align=center, 250px)]] 64 53 65 == Définition des structures de données54 == Définition des structures de données de l'allocateur 66 55 67 56 Nous allons représenter l'allocateur mémoire et la description de la zone mémoire à gérer par la structure heap_s voici sa définition en C. Le lock permet de séquencialiser les accès concurrents. Pour le test de votre API vous utiliserez un spinlock des PThreads. … … 72 61 spinlock_t lock; 73 62 uint32_t *start; 74 uint32_t *current;75 63 uint32_t *limit; 76 64 }; … … 97 85 }}} 98 86 99 = Travail demandé87 == Travail demandé 100 88 101 Dans le répertoire osm1/tp 2du compte encadr, vous trouverez les 2 répertoires suivants:89 Dans le répertoire osm1/tp1 du compte encadr, vous trouverez les 2 répertoires suivants: 102 90 {{{ 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 133 91 |-- libk 92 | |-- include 93 | |-- lib 94 | |-- Makefile 95 | |-- obj 96 | `-- src 97 | |-- error.h 98 | |-- katob.c 99 | |-- klist.h 100 | |-- kmalloc.c 101 | |-- kmemmove.c 102 | |-- kprintf.c 103 | |-- kputs.c 104 | |-- krand.c 105 | |-- ksnprintf.c 106 | |-- kstdio.h 107 | |-- kstdlib.h 108 | |-- kstrcmp.c 109 | |-- kstrcpy.c 110 | |-- kstrdup.c 111 | |-- kstring.c 112 | |-- kstrlen.c 113 | |-- kvsnprintf.c 114 | |-- libk.h 115 | `-- linux.h 116 `-- test 117 |-- main.c 118 `-- Makefile 134 119 }}} 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 120 139 121 Pour compiler vous devez 140 122 * aller dans le répertpoire **libk** et taper **make**. 141 * aller dans le répertoire **test _libk** et taper **make**123 * aller dans le répertoire **test** et taper **make** 142 124 143 Vous pouvez tester avec 144 * **./test_klist** 145 * **./test_strlen** 125 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. 126 Les fichiers sont compilables mais sont vides ou appelle le service de la libc de linux. Je vous demande aussi de commenter en détail les Makefile. 127 128 Vous pouvez creer des fichiers de test par service. 129 * **./test_kstrlen** 130 * **./tsst_kmalloc 146 131 147 132 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. … … 151 136 }}} 152 137 153 La fonction kmalloc_statusaffiche l'état des blocs de l'allocateur.138 Vous pourrez écrire une fonction kmalloc_status qui affiche l'état des blocs de l'allocateur. 154 139 {{{ 155 140 void kmalloc_status(void); 156 141 }}} 157 pour chacune une fonction de test 142 143 == Rapport 144 145 Je vous demande un rapport sur les fonctions de cette librairie (comment on les utilise et comment elles marchent) et sur les tests que vous avez mis en oeuvre. 146 Je vous demande aussi de commenter le Makefile.