Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
1287 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Explication d'un script C

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Explication d'un script C

n°2297385
raghebgmir​a
Posté le 08-03-2017 à 08:31:16  profilanswer
 

Bonjour,
 
Est ce qu'il y'a quelqu'un qui peu m'aider a comprendre ce script de sélection des processus.
J'ai compris que ce code permet de sélection le processus qui a le moins temps d'exécution,  mais je n'ai pas compris comment fonctionne.
Merci pour votre aide  
 

Code :
  1. int SJFElect(void) {
  2. int elu;
  3. int min,i,indice;
  4. min=Tproc[0].duration;
  5. elu=0;
  6. indice=0;
  7. for(i=1;i<MAXPROC;i++)
  8. {
  9.  if(Tproc[i].duration<=min && Tproc[i].flag==RUN)
  10.  {
  11.   indice=i;
  12.   min=Tproc[i].duration;
  13.  }
  14. }
  15. elu=indice;
  16. if(Tproc[elu].flag==RUN)
  17.  printf("SJFElect : J'ai élu le processus %d\n",elu);
  18. return elu;
  19. }

mood
Publicité
Posté le 08-03-2017 à 08:31:16  profilanswer
 

n°2297389
masklinn
í dag viðrar vel til loftárása
Posté le 08-03-2017 à 10:22:23  profilanswer
 

Bah ya rien de compliqué, c'est juste moche et avec pas mal de trous. Il a un array Tproc (global) de "structures de processus" (avec une durée d'exécution et un état), lignes 7~15 il traverse le tableau pour essayer de trouver le proc vivant (flag == RUN) avec le plus bas taux d'exécution et stocke son indice dans i (en partant du principe qu'il y a au moins un proc ligne 4 sinon il va mourir), puis il renvoie ça aprè avoir imprimé l'indice sur stdout.

Message cité 1 fois
Message édité par masklinn le 08-03-2017 à 10:22:47

---------------
I've never understood the compulsion to use Web technologies minus the Web's security and deployment models. It seems a bit like throwing the orange away and eating the peel. — @ justinschuh‬
n°2297406
raghebgmir​a
Posté le 08-03-2017 à 13:42:35  profilanswer
 

masklinn a écrit :

Bah ya rien de compliqué, c'est juste moche et avec pas mal de trous. Il a un array Tproc (global) de "structures de processus" (avec une durée d'exécution et un état), lignes 7~15 il traverse le tableau pour essayer de trouver le proc vivant (flag == RUN) avec le plus bas taux d'exécution et stocke son indice dans i (en partant du principe qu'il y a au moins un proc ligne 4 sinon il va mourir), puis il renvoie ça aprè avoir imprimé l'indice sur stdout.


 
Merci Beaucoup pou votre aide et cette explication que je trouvé très claire.
J'ai un autre code et je veux savoir ce qu'il fait si ça vous dérange pas.

Code :
  1. int RandomElect(void) {
  2. int elu;
  3. int i;
  4. srand(getpid());
  5. while(1) 
  6. {
  7.  i = (int) random()%(MAXPROC+1);
  8.  if (Tproc[i].flag == RUN)
  9.  {
  10.   elu=i;
  11.   break;
  12.  }
  13. }
  14. printf("RandomElect : J'ai élu le processus %d\n",elu);
  15.  return elu;
  16. }


n°2297416
h3bus
Troll Inside
Posté le 08-03-2017 à 17:08:41  profilanswer
 

Il choisit aléatoirement un processus qui est en RUN.
Et c'est de la merde, surtout si peu de processus sont en RUN.


---------------
sheep++
n°2297418
Farian
Posté le 08-03-2017 à 17:22:48  profilanswer
 

C'est pire que ça :  
Le modulo devrait être fait sur MAXPROC et pas sur MAXPROC+1 (ou alors, MAXPROC représente le nombre maximum de processus -1, et le tableau est déclaré struct proc TPROC[MAXPROC+1], mais je n'y crois guère  :lol: :lol: :lol: )
 
Si aucun processus n'est en RUN, alors il part en boucle infinie et bouffe de la CPU autant qu'il peut !
 
De plus, comme le srand est fait dans la fonction, on risque d'avoir à chaque fois le même processus choisi, si les états n'évouent pas : le getpid renvoyant toujours la même chose, on risque très fort d'avoir toujours la même séquence de nombre "aléatoires" qui va être renvoyée, donc, au final, toujours le même processus qui sera choisi :(
 
Vraiment, ce code n'est pas terrible !
 

Message cité 1 fois
Message édité par Farian le 08-03-2017 à 17:39:57

---------------
On n'est jamais très fort pour ce calcul !
n°2297442
raghebgmir​a
Posté le 09-03-2017 à 08:04:16  profilanswer
 

Farian a écrit :

C'est pire que ça :  
Le modulo devrait être fait sur MAXPROC et pas sur MAXPROC+1 (ou alors, MAXPROC représente le nombre maximum de processus -1, et le tableau est déclaré struct proc TPROC[MAXPROC+1], mais je n'y crois guère  :lol: :lol: :lol: )
 
Si aucun processus n'est en RUN, alors il part en boucle infinie et bouffe de la CPU autant qu'il peut !
 
De plus, comme le srand est fait dans la fonction, on risque d'avoir à chaque fois le même processus choisi, si les états n'évouent pas : le getpid renvoyant toujours la même chose, on risque très fort d'avoir toujours la même séquence de nombre "aléatoires" qui va être renvoyée, donc, au final, toujours le même processus qui sera choisi :(
 
Vraiment, ce code n'est pas terrible !
 


Merci pour vos réponse,
Ce que je ne comprend pas, c'est comment ce code ci-dessous permet de sélectionné d'une manière aléatoire un processus, avec un modulo !!  
 

Code :
  1. i = (int) random()%(MAXPROC+1);


Message édité par raghebgmira le 09-03-2017 à 08:13:48
n°2297443
h3bus
Troll Inside
Posté le 09-03-2017 à 08:16:42  profilanswer
 

Random() choisit un entier au "hasard".
Modulo est le reste d'une division entière donc n'importe quel entier modulo X donne un entier compris dans [0..X-1]
 
 
Dans la ligne que tu as postée je ne comprends pas l'utilité du cast vers int.


---------------
sheep++
n°2297445
raghebgmir​a
Posté le 09-03-2017 à 08:50:58  profilanswer
 

h3bus a écrit :

Random() choisit un entier au "hasard".
Modulo est le reste d'une division entière donc n'importe quel entier modulo X donne un entier compris dans [0..X-1]
 
 
Dans la ligne que tu as postée je ne comprends pas l'utilité du cast vers int.


 
Merci, si j’enlève le module, est ce qu'il sélectionne n'importe quelle processus de MAXPROC+1  :
 

Code :
  1. i = (int) random()(MAXPROC+1);

 

n°2297450
masklinn
í dag viðrar vel til loftárása
Posté le 09-03-2017 à 10:33:12  profilanswer
 

raghebgmira a écrit :

 

Merci, si j’enlève le module, est ce qu'il sélectionne n'importe quelle processus de MAXPROC+1  :

 
Code :
  1. i = (int) random()(MAXPROC+1);




non, si t'enlèves le modulo ça veut plus rien dire.

 

Faudrait ptet songer à apprendre les bases là, ça devient problématique


Message édité par masklinn le 09-03-2017 à 10:33:57

---------------
I've never understood the compulsion to use Web technologies minus the Web's security and deployment models. It seems a bit like throwing the orange away and eating the peel. — @ justinschuh‬

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Explication d'un script C

 

Sujets relatifs
Explication des variables dans un boucleProblème script javascript
[PYTHON] Help compréhension scriptScript d'extraction de données
[C][pthreads] Probleme deconecton serveur client avec socket[Résolu] OpenFileDialog: manipuler des fichiers "ajouter/enregistrer"
[C] Algo pour trouver un sens d'incrémentScript java media captive pour les sites web et appareil mobil
[Résolu] Mettre à jour/ajouter éléments dans un XML en C#coment faire tourner un borland C++ sur windoiws10
Plus de sujets relatifs à : Explication d'un script C


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR