Vous êtes sur la page 1sur 6

#include<stdio.

h>
#include<conio.h>
#include<string.h>
void charger_programme();
void decharger_programme();
void etat_memoire();
void first_fit();
void best_fit();
//structure des programmes chargés en memoire
typedef struct prog prog;
struct prog
{
char id[10];//nom du programme
int ad,taille;//ad : adresse de début du programme en mémoire/ taille : taille du pr
ogramme
};
//structure des espaces libres en mémoire
typedef struct espace espace;
struct espace
{
int ad, taille;//ad : adresse de début de l'espace libre en mémoire/ taille : taille
du programme
};
prog P[50]; // déclaration de la table P qui va contenir les informations sur les
programmes chargés en mémoire
int nbprog = 0;//nombre des programmes chargés, A la première exécution, aucun program
me n'est chargé
espace E[51];// déclaration de la table E qui va contenir les informations sur les
espaces libres en mémoire

int main()
{
int i;
int choix;
E[0].ad = 0;
E[0].taille = 1000;
for(i = 1; i < 101; i++) E[i].ad = -1;
do
{
printf("\n\n\tMenu\n\n");
printf("1) Charger un programme\n");
printf("2) Decharger un programme\n");
printf("3) Etat de la memoire centrale\n");
printf("4) Quitter \n");
do
{
printf("\nEntrer votre choix : ");
scanf("%d", &choix);
}while(choix < 1 || choix > 4);
switch(choix)
{
case 1 : charger_programme();
break;
case 2 : decharger_programme();
break;
case 3 : etat_memoire();
break;
case 4 :
printf("Fin de Session.");
break;
}
getch();
}while(choix != 4);
return 0;
}
void charger_programme()
{
int choix;
do
{
printf("\n\n\tCharger un programme\n");
printf("1) First fit\n");
printf("2) Best fit\n");
printf("3) Quitter \n");
do
{
printf("\nEntrer votre choix : ");
scanf("%d", &choix);
}while(choix < 1 || choix > 3);
switch(choix)
{
case 1 : first_fit();
break;
case 2 : best_fit();
break;
case 3 : break;
}
getch();
}while(choix != 3);
}
void decharger_programme()
{
char id[10];
int i = 0, j, ad, taille;
int k,l,c=0;
printf("\n\tDecharger un programme\n\n\n");
if(nbprog == 0) printf("Aucun programme n'est charge\n");
else
{
printf("Entrer le nom du programme : ");
fflush(stdin);
gets(id);
while(i < nbprog && strcmp(id,P[i].id) != 0) i++;
if(i >= nbprog) printf("Ce programme n'existe pas dans la memoire !");
else
{
ad = P[i].ad;
taille = P[i].taille;
///////////////////////////////////////
P[i] = P[nbprog-1];
nbprog--;
//avant espace vide
for(i = 0; i < 101; i++)
{
if(E[i].ad != -1 && E[i].ad + E[i].taille == ad)
{
ad = E[i].ad;
taille = taille + E[i].taille;
E[i].ad = -1;
i = 101;
}
}
//apres espace vide
for(i = 0; i < 101; i++)
{
if(E[i].ad != -1 && ad + taille == E[i].ad)
{
taille = taille + E[i].taille;
E[i].ad = -1;
i = 101;
}
}
i = 0;
while(E[i].ad != -1) i++;

E[i].ad = ad;
E[i].taille = taille;

for(k=0; k<100; k++)


{
for(l=0; l<k; l++)
{
if(E[k].ad<E[l].ad)
{
c= E[l].ad;
E[l].ad=E[k].ad;
E[k].ad=c;
c= E[l].taille;
E[l].taille=E[k].taille;
E[k].taille=c;
}
}
}

printf("Dechargement du programme %s avec succes !", id);


}
}
}
void etat_memoire()
{
int i, nb = 0;
printf("\n\tEtat de la memoire\n\n\n");
printf("Liste des programmes charges : \n");
if(nbprog == 0) printf("Aucun programme n'est charge\n\n");
else
{
for(i = 0; i < nbprog;i++)
{
nb++;
printf("\n%d) Nom du programme : %s.\n", nb, P[i].id);
printf(" Adresse de debut du programme : %d.\n", P[i].ad);
printf(" Taille du programme : %d.\n", P[i].taille);
}
}
printf("\nListe des espaces disponibles en memoire :\n");
nb = 0;
for(i = 0; i < 101;i++)
{
if(E[i].ad != -1)
{
nb++;
printf("\n%d) Adresse de debut de l'espace : %d.\n", nb, E
[i].ad);
printf(" Taille de l'espace : %d.\n", E[i].taille);
}
}
if(nb == 0) printf("Espace memoire non disponible\n\n");
}
void first_fit()
{
char id[10];
int i, ad, taille, chargement = 0, nb = 0;
espace c={0,0};
for(i = 0; i < 101; i++)
{
if(E[i].ad != -1)
{
nb = 1;
i = 101;
}
}
if(nbprog == 100 || nb == 0) printf("Impossible de charger un autre programme !\
n");
else
{
fflush(stdin);
printf("Entrer la nom du programme : ");gets(id);
printf("Entrer la taille du programme : ");scanf("%d", &taille);
for(i = 0;i < 101; i++)
{
if(E[i].ad != -1 && E[i].taille >= taille)
{
strcpy(P[nbprog].id, id);
P[nbprog].ad = E[i].ad;
P[nbprog].taille = taille;
nbprog++;
if(taille == E[i].taille) E[i].ad = -1;///////////
else
{
//c= E[i+1];
E[i].ad = E[i].ad + taille;
E[i].taille = E[i].taille - taille;
}
printf("Chargement du programme avec succes !\n");
printf("Espace id ");
printf("adress %d taille %d\n", E[i].ad, E[i].taille);
i = 101;
chargement = 1;
printf("programme id ");
puts(P[nbprog].id);
printf(" adress %d taille %d\n", P[nbprog-1].ad, P[nbprog-1
].taille);
}
}
if(chargement == 0) printf("Impossible de charger ce programme !\n");
}
}
void best_fit()
{
char id[10];
int i, ad, taille, numespace = -1, nb = 0;
for(i = 0; i < 101; i++)
{
if(E[i].ad != -1)
{
nb = 1;
i = 101;
}
}
if(nbprog == 100 || nb == 0) printf("Impossible de charger un autre programme !\
n");
else
{
fflush(stdin);
printf("Entrer la nom du programme : ");gets(id);
printf("Entrer la taille du programme : ");scanf("%d", &taille);
for(i = 0;i < 101; i++)
{
if(E[i].ad != -1 && E[i].taille >= taille)
{
if(numespace == -1 || E[i].taille < E[numespace].taille) numespace = i;
}
}
if(numespace != -1)
{
strcpy(P[nbprog].id, id);
P[nbprog].ad = E[numespace].ad;
P[nbprog].taille = taille;
nbprog++;
if(taille == E[numespace].taille) E[numespace].ad = -1;
else
{
E[numespace].ad = E[numespace].ad + taille;
E[numespace].taille = E[numespace].taille - taille;
}
printf("Chargement du programme avec succes !\n");
}
else printf("Impossible de charger ce programme !\n");
}
}