/****************************************
* 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