1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
| int creer_processus(int num_id,float taille,float tps_exec,int priorite){
//declaration des variables
int espace_disque,ram_dispo,hdd_dispo,nb_a_creer,num;
int i,j,k,cpt;
float tps,new_taille;
struct processus *proc=NULL;
struct cluster *running=NULL;
struct cluster *previous=NULL;
struct cluster *first=NULL;
struct _adress *adresse=NULL;
struct _adress *adresse_init=NULL;
adresse_init=(struct _adress *)malloc(sizeof(struct _adress));
espace_disque=espace_total(); //mesure l'espace disque total disponible
ram_dispo=espace_libre(ram); //mesure l'espace libre dans la RAM
hdd_dispo=espace_libre(hdd); //mesure l'espace libre dans le HDD
if (taille>espace_disque) return 9; //cas ou l'espace memoire est insuffisant
/*1*/ if (taille>20){ //cas ou le processus est plus grand que la taille de la RAM
nb_a_creer=floor(taille/10)+1; //nombre de sous_processus a creer
/*2*/ for (cpt=1;nb_a_creer-1 ;cpt++){
num=num_id*1000+cpt; //creation des sous-processus, gestion du paging
tps=tps_exec/nb_a_creer; //tps d'execution du sous_processus
add_pages(num); //referencement du nouveau sous processus dans pages
/*3*/ j=creer_processus(num,10,tps,priorite);
}
num=nb_a_creer+1000; //dernier sous-processus a creer
tps=tps_exec/nb_a_creer;
add_pages(num);
new_taille=taille-(10*(nb_a_creer-1));
j=creer_processus(num,new_taille,tps,priorite);
return 0;
}
if (taille>ram_dispo) {
//ecriture du premier mo du processus (different des suivants car "->begin" = NULL)
adresse_init=recherche_hdd();
i=adresse_init->x;
j=adresse_init->y;
k=adresse_init->z;
running=move_to(i,j,k);
printf("position du *running: (%d,%d,%d)\n",i,j,k);
proc=(struct processus *)malloc(sizeof(struct processus));
proc->num_id=num_id;
proc->priorite=priorite;
proc->tps_exec=tps_exec;
if (taille<1)proc->taille = taille;
else proc->taille=1;
proc->next=NULL;
proc->begin=NULL;
running->processus=proc;
first=running;
previous=running;
//fin d'ecriture du premier mo
taille=taille-1;
//ecriture des differents mo du processus dans les clusters du hdd
while (taille>0){
proc=(struct processus *)malloc(sizeof(struct processus));
adresse=recherche_hdd();
i=adresse->x;
j=adresse->y;
k=adresse->z;
running=move_to(i,j,k);
printf("position du *running: (%d,%d,%d)\n",i,j,k);
proc->begin=first;
if (taille<1)proc->taille = taille;
else proc->taille=1;
proc->num_id=num_id;
proc->priorite=priorite;
proc->tps_exec=tps_exec;
proc->next=NULL;
running->processus=proc;
previous->processus->next=running;
taille=taille-1;
}
add_pile(num_id,adresse_init,priorite);
return 0;
}
else { //ecriture du premier mo du processus (different des suivants car "->begin" = NULL)
adresse_init=recherche_ram();
i=adresse_init->x;
j=adresse_init->y;
k=adresse_init->z;
running=move_to(i,j,k);
printf("position du *running: (%d,%d,%d)\n",i,j,k);
proc=(struct processus *)malloc(sizeof(struct processus));
proc->num_id=num_id;
proc->priorite=priorite;
proc->tps_exec=tps_exec;
if (taille<1)proc->taille = taille;
else proc->taille=1;
proc->next=NULL;
proc->begin=NULL;
running->processus=proc;
first=running;
previous=running;
//fin d'ecriture du premier mo
taille=taille-1;
//ecriture des differents mo du processus dans les clusters du hdd
while (taille>0){
proc=(struct processus *)malloc(sizeof(struct processus));
adresse=recherche_ram();
i=adresse->x;
j=adresse->y;
k=adresse->z;
running=move_to(i,j,k);
printf("position du *running: (%d,%d,%d)\n",i,j,k);
proc->begin=first;
if (taille<1)proc->taille = taille;
else proc->taille=1;
proc->num_id=num_id;
proc->priorite=priorite;
proc->tps_exec=tps_exec;
proc->next=NULL;
running->processus=proc;
previous->processus->next=running;
taille=taille-1;
}
add_pile(num_id,adresse_init,priorite);
return 0;
}
}; |
Partager