README.md 2,99 ko
Newer Older
# Projet Système : Analyse Distribuée de Générateurs Aléatoires
Redjradj Yacine's avatar
Redjradj Yacine a validé

**Auteurs :** REDJRADJ Yacine & YAHIA Yanis  
**Cours :** Systèmes d'Exploitation - Décembre 2025
Redjradj Yacine's avatar
Redjradj Yacine a validé

Redjradj Yacine's avatar
Redjradj Yacine a validé

Redjradj Yacine's avatar
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's avatar
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's avatar
Redjradj Yacine a validé

Redjradj Yacine's avatar
Redjradj Yacine a validé

Redjradj Yacine's avatar
Redjradj Yacine a validé

Le projet respecte strictement les contraintes de programmation système (**pas de threads**, uniquement des processus lourds).
Redjradj Yacine's avatar
Redjradj Yacine a validé

### 1. Le Maître (`maitre.c`)
* **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's avatar
Redjradj Yacine a validé

### 2. L'Esclave (`esclave.c`)
* **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's avatar
Redjradj Yacine a validé

Redjradj Yacine's avatar
Redjradj Yacine a validé

Redjradj Yacine's avatar
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's avatar
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's avatar
Redjradj Yacine a validé

Redjradj Yacine's avatar
Redjradj Yacine a validé


Redjradj Yacine's avatar
Redjradj Yacine a validé

Redjradj Yacine's avatar
Redjradj Yacine a validé

### 💻 Guide d'Exécution (Démonstration Multi-Machines)
Récupérez l'adresse IP du PC Maître :
Redjradj Yacine's avatar
Redjradj Yacine a validé


#### Notez l'IP (ex: 192.168.1.45 ou 172.20.10.3)
Redjradj Yacine's avatar
Redjradj Yacine a validé

Lancez le maître en attente de 1 esclave pour 100 millions de lancers sur le port 8080 :
Redjradj Yacine's avatar
Redjradj Yacine a validé


Redjradj Yacine's avatar
Redjradj Yacine a validé

Redjradj Yacine's avatar
Redjradj Yacine a validé

Sur le second PC, connectez-vous au maître en utilisant son IP.
Redjradj Yacine's avatar
Redjradj Yacine a validé

#### Syntaxe : ./esclave <IP_DU_MAITRE> <PORT>