Changes between Version 14 and Version 15 of TME2-2014


Ignore:
Timestamp:
Feb 7, 2014, 10:04:41 AM (12 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • TME2-2014

    v14 v15  
    55[[PageOutline]]
    66
    7 = Objectifs
     7== Objectifs
    88
    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.
     9Le 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.
     10Nous allons écrire et valider sur Linux. Elles seront adaptées au système plus tard (il y aura très peu de modification).
    1211
    1312Pour les fonctions auxiliaires:
    1413 * Affichage formaté de messages pour le système
    15  * Lecture d'un caractère ou d'une ligne (jusqu'au return)
    1614 * Conversion chaine -> entier
    1715 * Déplacement de zone de mémoire
    1816 * Fonctions de manipulations des chaines
    1917 * Générateur aléatoire
    20 
    21 Gestion de listes chainées
    22  * initialisation
    23  * accesseurs
    24  * itérateurs
    2518
    2619Pour l'allocation dynamique:
     
    2922
    3023
    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
    3625
    3726La 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.
     
    6352[[Image(exempleblocs.png, nolink, align=center, 250px)]]
    6453 
    65 == Définition des  structures de données
     54== Définition des structures de données de l'allocateur
    6655
    6756Nous 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.
     
    7261    spinlock_t lock;
    7362    uint32_t *start;
    74     uint32_t *current;
    7563    uint32_t *limit;
    7664};
     
    9785}}}
    9886
    99 = Travail demandé
     87== Travail demandé
    10088
    101 Dans le répertoire osm1/tp2 du compte encadr, vous trouverez les 2 répertoires suivants:
     89Dans le répertoire osm1/tp1 du compte encadr, vous trouverez les 2 répertoires suivants:
    10290{{{
    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
    134119}}}
    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.
    138120
    139121Pour compiler vous devez
    140122 * 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**
    142124
    143 Vous pouvez tester avec
    144  * **./test_klist**
    145  * **./test_strlen**
     125Pour 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.
     126Les 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
     128Vous pouvez creer des fichiers de test par service.
     129 * **./test_kstrlen**
     130 * **./tsst_kmalloc
    146131
    147132Pour le kmalloc votre application de test doit déclarer un tableau d'octets représentant la mémoire à gérer par le heap_manager.
     
    151136}}}
    152137
    153 La fonction kmalloc_status affiche l'état des blocs de l'allocateur.
     138Vous pourrez écrire une fonction kmalloc_status qui affiche l'état des blocs de l'allocateur.
    154139{{{
    155140void kmalloc_status(void);
    156141}}}
    157 pour chacune une fonction de test
     142
     143== Rapport
     144
     145Je 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.
     146Je vous demande aussi de commenter le Makefile.