Laboratoire 2

Sommaire

L’objectif de ce laboratoire est de programmer avec des appels systèmes et de regarder les comportements.

Bibliothèques C

Développer un programme prime qui calcule en C le nombre de nombres premiers inférieurs ou égaux au nombre passé en argument.

$ ./prime 5
3
$ ./prime 50
15
$ ./prime 10000000
664579

Vous utiliserez l’algo suivant (crible d’Ératosthène) :

#include <math.h>

long int argument; // Argument du programme
long int* primes; // Tableau de nombres premiers trouvés (à allouer dans le tas et réallouer)
size_t nb; // Nombre de nombres premiers trouvés
for (long int i=2; i<=argument; i++) {
	int prime = TRUE;
	for (size_t k=0; k<nb; k++) {
		long int j = primes[k];
		if (j>sqrt(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 passe au nombre suivant
		primes[nb] = i; // Réalouer peut-etre
		nb++;
	}
}
print(nb); // et voila!
  • Note: pour calculer la racine carrée sqrt il est nécessaire d’utiliser math.h et de compiler avec -lm. N’oubliez pas le cast vers double pour l’argument de la fonction sqrt.
  • Note: Pour transformer la valeur lue en entier, vous pouvez utiliser strtol

Questions ?

  • Pourquoi -lm est nécessaire pour compiler ?
  • Dans quel fichier et la bibliothèque mathématique ?
  • Est-ce que sqrt est un appel système ? Sinon, comment est fait le calcul de la racine carrée ?

Strace

Babel

Développez un programme qui affiche « Hello, World! » dans au moins 2 langages de programmation différents (C, C++, Java, Python, Bash, etc.) et exécutez-le avec strace.

  • Que constatez-vous ?
  • Cherchez l’appel système write (ou un appel système équivalent) utilisé pour afficher le « hello world ». (aide: man strace)

Tubes et redirections

Les tubes | et les redirections > sont des outils puissants du shell.

Comparez le comportement de strace d’un programme hello-world avec

  1. une redirection dans un fichier
  2. avec un tube « | cowsay »

Variété

Exécuter strace -tf sur les commandes suivantes (installez les programmes si nécessaires)

  • sleep 5
  • ./prime (le programme de la question précédente)
  • find /usr/lib
  • xeyes (ou toute autre application graphique interactive)
  • mpv mamusique.mp3 (ou tout autre lecteur audio ou vidéo)

Questions

  • Combien d’appels système sont faits par ces programmes ?
  • Est-ce des programmes qui font beaucoup d’entrées-sorties ou beaucoup de calcul ?
  • Quels sont les appels systèmes les plus utilisés par ces programmes (man strace) ? Essayez de ne pas prendre en compte les appels système utilisés avant le début du main.