Implémentation d’un système de mémoire partagée distribuée en C : gestion de pages distribuées, transferts TCP, mmap/mprotect, SIGSEGV handler, thread de communication, protocole DSM minimaliste.
Gestion du lancement distant via SSH, redirection stdout/stderr, distribution de la table de connexions.
dsmexec— programme maîtreservices/childproc_management.c— gestion des processus enfants (fork, SSH, signaux)services/io_management.c— poll(), multiplexage des pipes + socketsservices/spawn_management.c— génération des variables DSMEXEC_*, exécution SSHservices/network_management.c— création + écoute du socket maîtreinclude/— headers Phase1bin/— contient dsmexec + double_touch
Implémentation complète du DSM (gestion des pages, SIGSEGV, protocole, transferts réseau).
dsm.c— gestion des pages, handler SIGSEGV, protocole DSMnetwork.c— wrappers robustes send/recvinclude/dsm_impl.h— structures internes + API DSMlibdsm.a— bibliothèque statique générée (non versionnée)examples/double_touch.c— exemple minimal utilisant la DSM
Depuis Phase1/ :
make install
Génère :
Phase1/bin/
├── dsmexec
└── data_exchange
Depuis Phase2/ :
make
Génère :
- libdsm.a
- double_touch (déplacé automatiquement dans
Phase1/bin/)
Depuis Phase1/bin/ :
./dsmexec machine_file double_touch
Le fichier machine_file contient une machine par ligne :
trombone.pedago.ipb.fr
trompette.pedago.ipb.fr
txistu.pedago.ipb.fr
- Allocation en tourniquet : owner = index % nb_processus
- Protection mémoire :
- PROT_NONE → déclenche SIGSEGV → demande de page
- PROT_READ | PROT_WRITE → page possédée
- Envoi de DSM_REQ au propriétaire
- Le propriétaire envoie DSM_PAGE
- Tous les processus reçoivent DSM_UPDATE
- Chaque processus envoie DSM_FINALIZE
- Barrière d’attente
- Fermeture propre des sockets
- Fin du thread daemon
Programme simple montrant un accès concurrent à la même page DSM.
Sortie typique :
[Proc 0] integer value: 4
[Proc 1] integer value: 12
make distclean
make clean
- gcc
- pthreads
- Linux (mprotect, mmap, poll, sockets…)
- SSH sans mot de passe
Le projet implémente :
- gestion distribuée des pages DSM
- transferts réseau TCP
- gestion SIGSEGV → handler DSM
- communication asynchrone (poll)
- synchronisation mutex + condition variable
- protocole DSM simple mais robuste