/*
l'ennoncé de mon projet :
on désire concevoir par l'approche objet, une application pour simuler
le fonctionnement du noyau du systéme le fonctionnement du noyau du systéme
d'exploitation permettant d'executer les différentes tâches qui se présentent au syéstéme .
pour chaque tâche présentée, un processus est crée.il est identifié par un code unique,
son nom, l'instant de son arrivée, son état (actif ou en attente) , sa priorité, le temps d'exécution demandé sur le processeur
et le temps consommé.
plusieurs types d'ordonnancement sont possibles (fifo, lifo, par priorité, par quantum de temps ...).Pour chacun de ces types,
on put associer un objet ordonnanceur qui simule l'execution des processus selon l'algorithme approprié.
on demande de:
1- canccevoir une classe Processus en imaginant tous les services possibles de creation,suppression , affichage , modification , ect...
2- concevoir une classe ordonnanceur intégrant les services permettant de simuler l'execution selon l'algorithme choisi .
3- proposer un programme permettant de simuler l'exécution d'une liste de processusselon un algorithme choisi d'ordonnancemant et d'afficher a chaque instant l'évolution de l'exécution.
4-imaginer et proposer une classe dérivée processus_specifique pour gérer certaines tâches spécifiques et proposer un programme
manipulant des objets polymorphes.
nb:les processus sera traité par des listes chainés.
*/
/* programme en c++ */
#include <iostream.h>
#include<stdio.h>
#include <conio.h>
#include<string.h>
#include<dos.h>
#include<stddef.h> //POUR NULL
#define ESC '\33'
struct process{
int code,prio,intar,tpsex,tpscon;
char nom[],etat;
};
struct element{
element *suiv;
process val;
};
/*************************/
class processus
{
element *debut; //pointeur sur premier element
element *cur;
friend class ordonnanceur;
public:
static int nb;
processus();
processus(int);
~processus();
void creation(int);
void suppression(int);
void modification(int);
void affiche();
};
element processus::*cur=0;
int processus::nb=0;
processus::processus()
{
/*debut=NULL; //constructeur
cur=debut; */
}
processus::processus(int n)
{
cur=new element[n];
}
processus::~processus()
{
delete[]cur;
}
void processus::creation(int n)
{
int i;
debut=NULL;
cur=debut;
for(i=0;i<n;i++)
{
cur=new element;
cout<<endl<<"p : "<<i<<endl<<endl<<endl;
cur->suiv=debut;
cprintf("donner le code de processus : ");cin>>cur->val.code;
cprintf("donner le nom de processus : ");cin>>cur->val.nom;
cprintf("donner l'instant d'arriver : ");cin>>cur->val.intar;
cprintf("donner le temps d'execution : ");cin>>cur->val.tpsex;
cprintf("donner son priorite : ");cin>>cur->val.prio;
debut=cur;
};
}
void processus::suppression(int f)
{element *p=debut,*q;q=p;
while(p)
{
if(p->val.code!=f)
q=p;p=p->suiv,
q->suiv=p->suiv,
delete(p);
}
;
}
void processus::modification(int m)
{
int i;
while(cur!= NULL)
if(cur->val.code=m)
{
cprintf("donner le nouveau code de processus :");cin>>cur->val.code;
cprintf("donner le nouveau nom de processus :");cin>>cur->val.nom;
cprintf("donner the new instant d'arriver :");cin>>cur->val.intar ;
cprintf("donner the new temps d'execution :");cin>>cur->val.tpsex;
cprintf("donner son new priorité :");cin>>cur->val.prio ;
}
}
/******************************/
class ordonnanceur
{
friend class processus;
public:
processus l;
void ordonner(int,int);
friend processus::creation(int);
};
void ordonnanceur::ordonner(int k,int nb)
{
int i=0;
switch(k)
{
case 1 :
cout<<nb; //lifo
while(l.cur)
{cout<<i<<"see /t"<<l.cur->val.code<<endl;i++;
l.cur=l.cur->suiv;}
break;
case 2 :
for(i=0;i<nb;i++) //fifo
cout<<l.cur->val.code<<endl;break;
default:;
}
}
/***********************************/
void main()
{
processus x;ordonnanceur o;int w,b;
cprintf("donner le nombre de processus a traite : ");cin>>w;
x.creation(w);
clrscr();
gotoxy(3,3);cprintf("vous pouvez ordonner les processus inseré suivant les algorithmes : ");
gotoxy(3,7);cprintf("1 - lifo");
gotoxy(3,9);cprintf("2 - fifo");
do{
gotoxy(3,12);
cprintf("choisir le nombre correspondant a ton algorithme : "),cprintf(" "),cin>>b,cprintf(" ");
}
while((b!=1)&&(b!=2));clrscr();
o.ordonner(b,w);
getch();
}