— 0001-01-01

Ordonnancement Afin de donner une valeur de gentillesse au programme prime_th on utilise la commande suivante nice -n 10 prime_th 10000000 10 &, n’hésitez pas à donner au programme des valeurs grandes pour vous laisser le temps de voir votre processus avec ps -l Pour lancer les 3 commandes en même temps avec l’affichage du temps d’exécution(réel, mode utilisateur, mode noyau), ainsi que le nombre d’interuption volontaire et involontaire, on utilisera la commande suivante: /usr/bin/time --format 'n19: %e %U %S %w %c' nice -n 19 .

— 0001-01-01

Mise en bouche #include<stdlib.h> #include<stdio.h> #include<unistd.h> int main(){ pid_t pid_fils; printf("Mon PID est <%d>\n", getpid()); pid_fils = fork(); if(pid_fils > 0){ printf("Je suis le père et mon PID est <%d>\n", getpid()); } else if(pid_fils == 0){ printf("Je suis le fils et mon PID est <%d>\n", getpid()); } else{ perror("Echec du fork"); } } Multiple fils Programme p1.c #include<stdlib.h> #include<stdio.h> #include<unistd.h> #include<sys/types.h> int main() { pid_t pfils; for(int i=0 ; i!= 10 ; i++ ){ pfils = fork(); if (pfils == -1) { perror("Echec du fork"); } else if(pfils == 0) { printf("Je suis le numéro %d, mon PID est %d et mon père est %d !

— 0001-01-01

Tailles des binaires Code source des programmes de test Programme p0.c int main(int argv, char *argc[]){ return 42; } Programme p1.c #include <stdlib.h> #include <stdio.h> #include <unistd.h> int main(int argv, char *argc[]){ return 42; } Programme p2.c char tableau[8000]; int main(int argv, char *argc[]){ return 42; } Programme p3.c char tableau[8000]="hello"; int main(int argv, char *argc[]){ return 42; } Comparaison entre les différents programmes Entre p0 et p1 : La taille du fichier p0 est égale à la taille du fichier p1 car lorsqu’on inclue des “Headers”, ceux-ci ne contiennent que des éléments tels que des prototypes de fonctions, des définitions de structures, … .

— 0001-01-01

Bibliothèques C Le programme “./prime” #include <stdlib.h> #include <stdio.h> #include <math.h> #include <stdbool.h> #include <errno.h> #include <string.h> int main(int argc, char** argv) { if (argc < 2) { fprintf(stderr, "Vous devez fournir la borne supérieure\n"); return -1; } char* endptr; long int argument = strtol(argv[1], &endptr, 0); //strtol pour convertir de String vers Integer if (*argv[1] == '\0' || *endptr != '\0' || argument <= 0) { fprintf(stderr, "La borne fournie doit être un entier supérieur à 0\n"); return -1; } long int racine_i, j, i ; size_t cap = 8; long int* primes = malloc(cap * sizeof(long int)); // Tableau de nombres premiers trouvés (à allouer dans le tas et réallouer) if (primes == NULL) { perror("Allocation"); return 1; } size_t nb = 0 , k; bool prime ; for (i=2; i<=argument; i++) { prime = true ; racine_i = (long int)sqrt((double)i) ; for (k=0; k<nb; k++) { j = primes[k] ; if ( j > racine_i ) { break ; // on trouvera plus de diviseur, inutile de continuer de chercher } if (i%j == 0) { prime = false ; // c'est divisible, donc pas premier break ; } } if (prime) { // on enregistre et on passe au nombre suivant primes[nb] = i ; nb++ ; if(nb > cap){ cap *= 2; primes = realloc( primes, sizeof(long int) * cap); if(primes == NULL){ fprintf(stderr, "La valeur de errno: %d\nInterprétation: %s",errno, strerror(errno)) ; return 1; } } } } printf("Nombre de nombres premiers trouvés : %ld\n", nb) ; free(primes); //Affichage des nombres premiers trouvés /*printf("Affichage des nombres premiers trouvés : \n") ; for(int long h = 0 ; h!