Newer
Older
Redjradj Yacine
a validé
# Projet Système : Analyse Distribuée de Générateurs Aléatoires
**Auteurs :** REDJRADJ Yacine et YAHIA Yanis
**Cours :** Systèmes d'Exploitation - 28 Décembre 2025
Redjradj Yacine
a validé
---
Redjradj Yacine
a validé
Ce projet implémente une architecture de calcul **distribuée (Maître/Esclave)** pour analyser et comparer la qualité statistique de deux générateurs de nombres pseudo-aléatoires :
1. **`rand()`** (Standard C, rapide mais moins précis).
2. **`drand48()`** (Haute précision 48-bits).
Redjradj Yacine
a validé
Le système distribue la charge de calcul (des centaines de millions de lancers) sur plusieurs machines connectées en réseau via TCP/IP. Chaque machine esclave utilise ensuite le parallélisme local (multi-processus) pour maximiser les performances avant de renvoyer les résultats au maître.
Redjradj Yacine
a validé
---
Redjradj Yacine
a validé
Le projet respecte strictement les contraintes de programmation système (**pas de threads**, uniquement des processus lourds).
Redjradj Yacine
a validé
* **Rôle :** Orchestrateur et Serveur TCP.
* **Fonctionnement :**
* Attend la connexion de N esclaves.
* Distribue la charge de travail équitablement entre les esclaves connectés.
* Reçoit les histogrammes partiels via le réseau (gestion des paquets fragmentés avec `MSG_WAITALL`).
* Fusionne les résultats et affiche un comparatif statistique (Erreur Relative par rapport à la distribution uniforme idéale).
Redjradj Yacine
a validé
* **Rôle :** Ouvrier de calcul et Client TCP.
* **Fonctionnement :**
* Se connecte au maître et reçoit la mission (nombre de lancers).
* **Architecture Multi-Processus :** Utilise `fork()` pour créer 4 processus enfants qui travaillent en parallèle.
* **Mémoire Partagée (SHM) :** Utilise `mmap` (avec `MAP_SHARED`) pour stocker les résultats communs entre le père et les fils.
* **Synchronisation (Sans Threads) :** Utilise les **Sémaphores System V** (`sys/sem.h`, `semget`, `semop`) pour protéger l'accès à la mémoire partagée (exclusion mutuelle) lors de la fusion des résultats.
* **Double Calcul :** Calcule simultanément les histogrammes pour `rand` et `drand48` afin de permettre une comparaison directe.
Redjradj Yacine
a validé
---
Redjradj Yacine
a validé
Le code est compatible **Linux** et **Windows** (via WSL - Windows Subsystem for Linux). Aucune bibliothèque externe complexe n'est requise.
Redjradj Yacine
a validé
### Compiler le Maître (Sur PC Linux)
L'option `-lm` est nécessaire pour les fonctions mathématiques (`fabs`, etc.).
Redjradj Yacine
a validé
gcc maitre.c -o maitre -lm`bash
Redjradj Yacine
a validé
### Compiler l'Esclave (Sur PC Linux)
Redjradj Yacine
a validé
gcc esclave.c -o esclave
Redjradj Yacine
a validé
Récupérez l'adresse IP du PC Maître :
Redjradj Yacine
a validé
hostname -I
Redjradj Yacine
a validé
Lancez le maître en attente de 1 esclave pour 100 millions de lancers sur le port 8080 :
Redjradj Yacine
a validé
./maitre 8080 1 100000000
Redjradj Yacine
a validé
Lancement de l'Esclave
Redjradj Yacine
a validé
Sur le second PC, connectez-vous au maître en utilisant son IP.
Redjradj Yacine
a validé
#### Syntaxe : ./esclave <IP_DU_MAITRE> <PORT>
Redjradj Yacine
a validé
./esclave 192.168.1.45 8080