/**************************************** * Sebastien Leriche, Antoine Jacquet * * En-tete du module de gestion memoire * * Niveau 4 * ****************************************/ #ifndef _MEMOIRE_ #define _MEMOIRE_ #include <stdio.h> #define TAILLE_IDENT 20 /* Nombre de caractere maximum des identificateurs */ #define MAX_REF 10 /* Nombre maximum de liens */ extern int cpt_malloc, cpt_free; extern char politique; extern FILE *fhistorique; struct zone_libre { int adresse; int taille; }; struct liste_libre { struct zone_libre bloc; struct liste_libre *p_suivant; }; struct tas_occupe { char ident[TAILLE_IDENT]; int adresse; int taille; int compteur_references; char liste_ident[MAX_REF][TAILLE_IDENT]; char drapeau; }; struct liste_tas { struct tas_occupe tas; struct liste_tas *p_suivant; }; struct programme { char ident[TAILLE_IDENT]; struct programme *p_suivant; }; struct memoire { int taille_memoire; void *mem; struct liste_libre *p_liste_libre; struct liste_tas *p_liste_tas; struct programme *p_liste_programmes; }; int initialiser(int t,struct memoire **pp_memoire); /* Initialise la memoire Retourne -1 en cas d'erreur, 0 sinon */ int terminer(struct memoire **pp_memoire); /* Libere correctement la memoire Retourne -1 en cas de mauvaise gestion de la memoire, 0 sinon */ int allouer(int t, struct memoire *p_memoire); /* Alloue une zone memoire de taille t Retourne son adresse, -1 sinon */ int liberer(int adresse_libre, int taille_libre, struct memoire *p_memoire); /* Libere la zone memoire de taille taille_libre a l'adresse adresse_libre Retourne -1 en cas d'erreur, 0 sinon */ int allouer_tas(char identite_tas[], int taille_tas, struct memoire *p_memoire); /* Ajoute un tas de nom identite_tas et de taille taille_tas Retourne -1 en cas d'erreur, 0 sinon */ int liberer_tas(char identite_tas[], struct memoire *p_memoire); /* Libere le tas de nom identite_tas Retourne -1 en cas d'erreur, 0 sinon */ int ajouter_programme(char ident[], struct memoire *p_memoire); /* Ajoute le programme de nom ident Retourne -1 en cas d'erreur, 0 sinon */ int supprimer_programme(char ident[], struct memoire *p_memoire); /* Supprime le programme de nom ident Retourne -1 en cas d'erreur, 0 sinon */ int ajouter_lien(char tas_referencant[], char tas_reference[], struct memoire *p_memoire); /* Ajoute un lien de tas_referencant vers tas_reference Retourne -1 en cas d'echec, 0 sinon */ int supprimer_lien(char tas_referencant[], char tas_reference[], struct memoire *p_memoire); /* Supprime le lien de tas_referencant vers tas_reference Retourne -1 en cas d'echec, 0 sinon */ int ramasse_miettes_compteurs(struct memoire *p_memoire); /* Libere les tas dont le compteur de reference est a zero Retoure -1 si aucun tas n'a ete libere, 0 sinon */ int ramasse_miettes_marquage_balayage(struct memoire *p_memoire); /* Libere les tas non accessibles depuis les programmes Retourne -1 en cas d'erreur, 0 sinon */ #endif