Probléme avec LE SJf ( systéme d'exploitation

Fermé
salero Messages postés 25 Date d'inscription mercredi 16 avril 2008 Statut Membre Dernière intervention 21 avril 2009 - 25 févr. 2009 à 18:58
 zx - 26 févr. 2013 à 21:23
Bonjour,
bon je cree des files d'attente a partir d'une liste crée automatiquement lors de la génération des processus!!
pour le FCFS voila le code qui cree la file d'attente :
NB : D c'est la tete de la file
//*********Creer la file d'attente selon la date d'arriv‚e*************
struct proc *Creer_File_Attente_FCFS()
{
struct proc *Ptr=NULL,*Tmp=NULL,*Prec=NULL;
struct proc *PT=NULL,*F=NULL,*D=NULL;
PT=(proc *)malloc(sizeof(proc));
if(PT==NULL)
{
printf("memoire satur‚e");
exit(0);
}

Ptr=Debut;
D=F=PT;
F->Next=D->Next=NULL;
*PT=*Ptr;
while(Ptr->Next!=NULL)
{
Tmp=D;
Ptr=Ptr->Next;
while(Ptr->DateArr>=Tmp->DateArr && Tmp->Next!=NULL)
{
Prec=Tmp;
Tmp=Tmp->Next;
}
PT=(proc *)malloc(sizeof(proc));
if(PT==NULL)
{
printf("memoire satur‚e");
exit(0);
}
*PT=*Ptr;
if(Tmp->Next==NULL)
{
if(Ptr->DateArr>=Tmp->DateArr)
{
F->Next=PT;
F=PT;
F->Next=NULL;
}
else
{
PT->Next=F;
if(D->Next==NULL)
D=PT;
else
Prec->Next=PT;
}
}
else
{
if(Ptr->DateArr==Tmp->DateArr || (Ptr->DateArr<Tmp->DateArr && Tmp!=D))
{
Prec->Next=PT;
PT->Next=Tmp;
}
else
if(Ptr->DateArr<Tmp->DateArr && Tmp==D)
{
PT->Next=D;
D=PT;
}
}
}
return D;
}

pour SJF voila :

struct proc *Creer_File_Attente_SJF()
{
struct proc *Ptr=NULL,*Tmp=NULL,*Prec=NULL;
struct proc *PT=NULL,*F=NULL,*D=NULL;
PT=(proc *)malloc(sizeof(proc));
if(PT==NULL)
{
printf("memoire satur‚e");
exit(0);
}

Ptr=Debut;
D=F=PT;
F->Next=NULL;
D->Next=NULL;
*PT=*Ptr;
while(Ptr->Next!=NULL)
{
Tmp=D;
Ptr=Ptr->Next;
while(Ptr->DateArr>=Tmp->DateArr && Tmp->Next!=NULL)
{
Prec=Tmp;
Tmp=Tmp->Next;
}
PT=(proc *)malloc(sizeof(proc));
if(PT==NULL)
{
printf("memoire satur‚e");
exit(0);
}
*PT=*Ptr;
if(Tmp->Next==NULL)
{
if(Ptr->DateArr>Tmp->DateArr || (Ptr->DateArr==Tmp->DateArr && Ptr->TpsExe>=Tmp->TpsExe))
{
F->Next=PT;
F=PT;
F->Next=NULL;
}
else
if(Ptr->DateArr<Tmp->DateArr || (Ptr->DateArr==Tmp->DateArr && Ptr->TpsExe<Tmp->TpsExe))
{
PT->Next=F;
if(D->Next==NULL)
D=PT;
else
Prec->Next=PT;
}
}
else
{
if((Ptr->DateArr==Prec->DateArr && Ptr->TpsExe>=Prec->TpsExe) || (Ptr->DateArr<Tmp->DateArr && Tmp!=D))
{
Prec->Next=PT;
PT->Next=Tmp;
}
else
if((Ptr->DateArr<Tmp->DateArr && Tmp==D) || (Ptr->DateArr==Prec->DateArr && Ptr->TpsExe<Prec->TpsExe && Prec==D))
{
PT->Next=D;
D=PT;
}
}
}
return D;
}

et c'est la ou j'ai l'erreur : l'algo marche trés bien mais ca donne pas un bon resultat par rapport au temps des execution !!
si quelqu'un peux le voir et me donné son avis
aufait je trie la Liste par insertion ; je prend le premier element de la liste je l'insere dans la file puis je prend le 2eme element de la liste et je cherche sa bonne place dans la file et j'insere .....Ect
merci d'avance

1 réponse

Salut salero aurait-tu encore le mini projet , je dois aussi reussir a en faire un mais je n'ai pas pu !
0