Semestre 7‎ > ‎ISS7AC - OS‎ > ‎Archives‎ > ‎

TD "Allocation Mémoire" du 17/10/2016

Objectifs généraux

Dans ce TD nous proposons de réaliser un système simplifié d'allocation mémoire. Un exemple d'utilisation du code est proposé dans la fonction main() du canevas fourni en annexe.
Vous devez utiliser ce canevas de code pour réaliser les deux fonctions alloc() et release(). Vous aurez également à compléter la fonction initMem().
La fonction alloc() (resp. release()) devra remplir un rôle similaire à la fonction C standard malloc() (resp. free())

Structure de la mémoire

La mémore est représentée dans la structure memStruct. Cette structure comporte 3 champs :
  • arraySize : la taille en octets du tableau memArray;
  • memArray : le tableau de l'ensemble des octets accessibles et potentiellement disponibles
  • memAlloc : un tableau répertoriant quels octets de memArray sont utilisés et lesquels sont disponibles.
Important : pour ce TD il vous appartient de faire les choix appropriés pour structurer memArray et memAlloc pour que les fonctions alloc() et release() puissent être implantées de façon efficaces et en introduisant le moins de surcharge mémoire/temps de traitement possible lors de l'allocation et la libération de mémoire.

Travail demandé

  1. Réfléchir à une façon élégante et efficace pour gérer la disponibilité de la mémoire. Compléter le fonction initMem() de sorte à ce que toute la mémoire dans une memStruct soit bien initialisée et étiquetée à "libre". 
  2. Respecter les signatures des fonctions demandées (notamment la fonction release () qui ne prend qu'un seul et unique argument : le pointeur à libérer)
    • réaliser la fonction  alloc() qui, à l'instar de malloc(), retourne un adresse de memArray sur une zone de taille suffisante, et qui la marque comme "occupée".
    • réaliser la fonction release() qui, à l'instar de free(), marque la zone correspondante (et précédemment allouée avec alloc()) comme "libre".
    • tester l'ensemble de votre code.
  3. Quelles stratégies mettre en place (argumenter et fournir le code) pour
    • réduire le risque de fragmentation;
    • accélérer l'allocation de la mémoire;
    • mettre en place un ramasse-miette (rendant l'usage de release() obsolète)
    • rendre votre code robuste à son usage par plusieurs processus en même temps.
ċ
MemAlloc.c
(3k)
Bart Lamiroy,
15 oct. 2016 à 14:00
Comments