Explication des variables dans un boucle

Explication des variables dans un boucle - C - Programmation

Marsh Posté le 03-03-2017 à 11:39:49    

Bonjour,
 
Je suis entrain de comprendre un script de gestion d'ordonnancement des processus. (Voici le code ci dessous).
Ce que je ne comprend pas ces : 1E8 , 4E6, 1E7 4E6 utilisé dans le boucle For et la condition if.
ça correspond à quoi ? et c'est quoi leurs utilité ?
 
Merci pour votre aide.
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <malloc.h>
  5. /* Utilisation de la bibliotheque LIBSCHED */
  6. #include "sched.h"
  7. void ProcLong(int *);
  8. void ProcCourt(int *);
  9. /* Description d'un processus LONG */
  10. void ProcLong(int *pid) {
  11. long i;
  12. for (i=0;i<1E8;i++)
  13.  if (i%(long)4E6 == 0)
  14.  printf("   Proc. Long%d - %ld\n",*pid, i);
  15. printf("############ FIN LONG %d\n\n", *pid);
  16. }
  17. /* Description d'un processus COURT */
  18. void ProcCourt(int *pid) {
  19. long i;
  20. for (i=0;i<1E7;i++)
  21.  if (i%(long)4E6 == 0)
  22.  printf("   Proc. Court%d - %ld\n",*pid, i);
  23. printf("############ FIN COURT %d\n\n", *pid);
  24. }

Reply

Marsh Posté le 03-03-2017 à 11:39:49   

Reply

Marsh Posté le 03-03-2017 à 16:40:56    

Ce sont des nombres en notation flottante. 1E8 par exemple veut dire 1*10^8. C'est une manière d'éviter d'écrire 100000000. Cela dit, le type de ces nombres est "double" et non "int". Le modulo pour le type double n'est pas défini en C, d'où la conversion.
 
De ce que je vois du code, il tente de simuler une boucle d'attente. Honnêtement, ça serait plus de remplacer ça par:

Code :
  1. sleep(delai_en_seconde);


Reply

Marsh Posté le 03-03-2017 à 22:57:39    

sleep() rend la main au système.
Il semble que le code veuille simuler de la charge CPU.


---------------
sheep++
Reply

Marsh Posté le 08-03-2017 à 08:26:28    

Merci, le code va être utilisé dans le cadre d'un TP, il va montré les méthodes l’ordonnancement des processus.
Voici le code complet :

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <malloc.h>
  5. /* Utilisation de la bibliotheque LIBSCHED */
  6. #include "sched.h"
  7. void ProcLong(int *);
  8. void ProcCourt(int *);
  9. void ProcMoy(int *);
  10. /* Description d'un processus LONG */
  11. void ProcLong(int *pid) {
  12. long i;
  13. for (i=0;i<1E8;i++)
  14.  if (i%(long)4E6 == 0)
  15.  printf("   Proc. Long%d - %ld\n",*pid, i);
  16. printf("############ FIN LONG %d\n\n", *pid);
  17. }
  18. /* Description d'un processus MOY */
  19. void ProcMoy(int *pid) {
  20. long i;
  21. for (i=0;i<1.5E7;i++)
  22.  if (i%(long)4E6 == 0)
  23.  printf("   Proc. MOY%d - %ld\n",*pid, i);
  24. printf("############ FIN MOY %d\n\n", *pid);
  25. }
  26. /* Description d'un processus COURT */
  27. void ProcCourt(int *pid) {
  28. long i;
  29. for (i=0;i<1E7;i++)
  30.  if (i%(long)4E6 == 0)
  31.  printf("   Proc. Court%d - %ld\n",*pid, i);
  32. printf("############ FIN COURT %d\n\n", *pid);
  33. }
  34. /* Fonction principale */
  35. int main (int argc, char *argv[]) {
  36. int i;
  37. int *j; 
  38. // Création des processus courts
  39. for  (i = 0; i < 2; i++) {
  40.  j = (int *) malloc(sizeof(int));
  41.  *j= i;
  42.  // Ajout du processus dans la table des processus
  43.  CreateProc((function_t)ProcCourt,(void *)j, 10);
  44. }
  45. // Créeation des processus moyen
  46. for  (i = 0; i < 1; i++) {
  47.  j = (int *) malloc(sizeof(int));
  48.  *j= i;
  49.  // Ajout du processus dans la table des processus
  50.  CreateProc((function_t)ProcMoy,(void *)j, 100);
  51. }
  52. // Créeation des processus longs
  53. for  (i = 0; i < 2; i++) {
  54.  j = (int *) malloc(sizeof(int));
  55.  *j= i;
  56.  // Ajout du processus dans la table des processus
  57.  CreateProc((function_t)ProcLong,(void *)j, 100);
  58. }
  59. // Parametrage de l'ordonnanceur
  60. SchedParam(BATCH, 0, NULL);
  61. // Lancer l'ordonnanceur en mode verbeux
  62. sched(1);
  63. // Imprimer les statistiques
  64. PrintStat();
  65. return EXIT_SUCCESS;
  66. }

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed