Responsables : Joël Falcou et Jean-Thierry Lapresté

Slides:



Advertisements
Présentations similaires
Module Systèmes d’exploitation
Advertisements

GEF 435 Principes des systèmes d’exploitation
Formation universitaire à .NET: Introduction à C#
Cours n° 7 Standard Template Library II.
Cours n° 6 Standard Template Library I.
Le langage C++ Les boucles.
Module Systèmes dexploitation Chapitre 6 Communication Interprocessus Partie III École Normale Supérieure Tétouan Département Informatique
Systèmes en temps réel Services de Communication.
GEF 435 Principes des systèmes dexploitation Communication Interprocessus (CIP) II (Tanenbaum 2.3)
GEF 435 Principes des systèmes dexploitation Communication Interprocessus (CIP) III (Tanenbaum 2.3)
Cours n° 8 Conception et Programmation à Objets
Conception et programmation Programmation Parallèle
Chapitre 3 Coopération et synchronisation par variables partagées
Plan du cours La sérialisation: – comment stocker et restaurer les Objets? Les interfaces graphiques et la programmation évènementielle. –Comment concevoir.
Introduction aux systèmes temps réel Ce cours sadresse aux informaticiens novices en matière de temps réel.
Exercice 1 1 (père) et 1 (fils) 1 (père) et 0 (fils)
Nous allons vous présenter: - Photoshop - Algorithme et programmation
Architecture de grille générique, multi-
Rappel sur la synchronisation des processus
Synchronisation et communication entre processus
1 Threads et Lightweight Processes Chapitre 5 En français on utilise parfois flots ou fils pour threads. Votre manuel préfère le mot anglais thread : terminologie.
Approche mémoire partagée Threads – Paradigme de lapproche – Objets exécutés par les processeurs threads vs processus, – un thread possède : Ses registres,
5.1 URDL22005 Systèmes dexploitation Threads Vue dEnsemble Modèles de Multithreading Problèmes des Threads Pthreads Threads Windows XP Threads Linux Threads.
Programmation Initiation Aux Langages C et C++ (3) Bruno Permanne 2006.
IFT-2000: Structures de données
Structures de données IFT Abder Alikacem Espace de nommage Département d’informatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT-2000 Abder Alikacem Espace de nommage Département dinformatique et de génie logiciel Édition Septembre 2009 Département dinformatique.
Conteneurs STL.
Franck Cappello CNRS, LRI, Université Paris-sud
GPA789 Analyse et conception orientées objet 1 Professeur: Tony Wong, Ph.D., ing. Chapitre 6 Correspondance UML et C++
Programmation concurrente
Parallelisme (Basé sur Concepts of Programming Languages, 8th edition, by Robert W. Sebesta, 2007)
Communication interprocessus
Parallel Programming in C with MPI and OpenMP
Introduction au C++ héritage / polymorphisme
Création d’un logiciel de visualisation d’images scanner en 3D
Faculté I&C, Claude Petitpierre, André Maurer Le parallélisme Introduction.
Synchronisation Classique
Masters IIGLI et IGLII – Programmation générique et conception objet – – Claude Montacié 1 Cours n° 4 Polymorphisme II.
Une introduction à Java
Formation C++. Hello World ! #include /* Commentaire sur plusieurs lignes */ int main() { //Affiche hello world std::cout
Gestion de processus Corrigé TD 1 EFREI I
Travailler avec des processus
Héritage multiple En langage C++, il est possible d’utiliser l’héritage multiple. Il permet de créer des classes dérivées à partir de plusieurs classes.
GESTION ET TRAITEMENT DES ERREURS
Interactions entre Processus
INF3500 : Conception et implémentation de systèmes numériques Pierre Langlois Performance de circuits.
Programmation parallèle
La programmation système
Programmation Système et Réseau
Les surcharges d'opérateurs
Conception de Programmes - IUT de Paris - 1ère année – Cours 8 – Les entrées/sorties Comment fonctionnent les opérateurs > pour les types élémentaires.
Iterator Design Pattern Alessandro Soro Sylvain Giroux.
Processus Légers. Rappel sur le fork() fork() Processus 1 Pile Data Text Processus 2 Pile Data Text.
Conception de Programmes - IUT de Paris - 1ère année Cours 2 – Références et passage de paramètres Les Références –Introduction aux références.
Conception de Programmes - IUT de Paris - 1ère année Conception de Programmes Objectifs et organisation du cours Introduction à la P.O.O.
Introduction à la programmation objet avec java
M2 – MIAGE/SID Servlet et session M2 – MIAGE/SID
Les Threads ou les variables de Thread en C sous UNIX Nicolas ANTIGNY Ingénieurs 2000.
Système d’exploitation
Introduction aux architectures parallèles
Systèmes d’exploitation Processus conclusion Modèle conceptuel de processus Pour masquer les effets des interruptions, les SE fournissent un modèle conceptuel.
Structures de données IFT-2000 Abder Alikacem Laboratoire #1 Département d’informatique et de génie logiciel Édition Septembre 2009.
Exécuter une fonction en parallèle Utilisation de plusieurs fonctions en parallèles pour obtenir un résultat Accès à des ressources simultanément.
Capocasale & Droz. Exécuter une fonction en parallèle Utilisation de plusieurs fonctions en parallèles pour obtenir un résultat Accès à des ressources.

Instants magiques Automatique.
Int 10. Int 6.
Transcription de la présentation:

Implémentation d’une bibliothèque permettant d’utiliser les objets actifs Responsables : Joël Falcou et Jean-Thierry Lapresté Présenté par : Maxence Schmitt et Romain Guidoux 22 Mars 2011

Introduction Créer une bibliothèque C++ Simplification de la gestion des threads Utilisation de bibliothèques Boost Etude des différentes solutions possibles

Plan Introduction Présentation du patron de conception « Objets Actifs » Les implémentations proposées Détail de l’implémentation réalisée Conclusion

Implémentations proposées Implémentation réalisée Les threads Un processeur n’exécute qu’un seul thread à un instant t Impression d’exécution parallèle pour l’utilisateur Patron Objets Actifs Implémentations proposées Implémentation réalisée Threads Objets Actifs Lambda Héritage Présentation File de messages Sérialisation Résultats

Implémentations proposées Implémentation réalisée Les threads en C++ Solutions disponibles : Qt : Qthread Bibliothèque POSIX : pthread Boost : Boost.Threads Patron Objets Actifs Implémentations proposées Implémentation réalisée Threads Objets Actifs Lambda Héritage Présentation File de messages Sérialisation Résultats

Les sections critiques Gestion des ressources critiques Exclusion mutuelle (mutex) using namespace std; int nb = 4; void threadWork() { if (nb % 2 == 0) cout << "Pair : " << nb << endl; else cout << "Impair : " << nb << endl; // Un traitement compliqué ici nb++; } int main(void) { try boost::thread unThread(&threadWork); unThread.join(); } catch (exception &e) {} return 0; Patron Objets Actifs Implémentations proposées Implémentation réalisée Threads Objets Actifs Lambda Héritage Présentation File de messages Sérialisation Résultats

Implémentations proposées Implémentation réalisée Les objets actifs Article d’Herbert Sutter : ”Prefer Using Active Objets Instead of Naked Threads” Rendre asynchrones des méthodes d’un objet Cacher la manipulation des threads Patron Objets Actifs Implémentations proposées Implémentation réalisée Threads Objets Actifs Lambda Héritage Présentation File de messages Sérialisation Résultats

Solution 1 : fonctions lambda Fonction sans nom définie pour un usage ponctuel Patron Objets Actifs Implémentations proposées Implémentation réalisée Threads Objets Actifs Lambda Héritage Présentation File de messages Sérialisation Résultats

Solution 1 : fonctions lambda Syntaxe utilisée par Sutter -> prochaine norme de C++ Recherches dans Boost.Lambda et Boost.Phoenix Utilisation uniquement dans les boucles for_each(v.begin(), v.end(), if_(arg1 > 5) [ cout << arg1 << ", " ] ); Patron Objets Actifs Implémentations proposées Implémentation réalisée Threads Objets Actifs Lambda Héritage Présentation File de messages Sérialisation Résultats

Implémentations proposées Implémentation réalisée Solution 2 : héritage A chaque méthode asynchrone correspond un sous-type de Message Patron Objets Actifs Implémentations proposées Implémentation réalisée Threads Objets Actifs Lambda Héritage Présentation File de messages Sérialisation Résultats

Choix de l’implémentation Utilisation des fonctions lambda impossible Solution à base d’héritage Classe Message interne à l’Active Helper Boost.Thread pour l’implémentation des threads Patron Objets Actifs Implémentations proposées Implémentation réalisée Threads Objets Actifs Lambda Héritage Présentation File de messages Sérialisation Résultats

Implémentations proposées Implémentation réalisée File de messages Boost.Interprocess Avantages FIFO Synchronisée Attente passive Patron Objets Actifs Implémentations proposées Implémentation réalisée Threads Objets Actifs Lambda Héritage Présentation File de messages Sérialisation Résultats

Implémentations proposées Implémentation réalisée File de messages File de messages système Doivent être uniques N’est pas générique Trouver une solution pour sérialiser les données Solution alternative File normale concurrente Patron Objets Actifs Implémentations proposées Implémentation réalisée Threads Objets Actifs Lambda Héritage Présentation File de messages Sérialisation Résultats

Implémentations proposées Implémentation réalisée Sérialisation Boost.Serialization Par redéfinition de méthode serialize() ou save()/load() Permet de gérer les arguments des Messages Patron Objets Actifs Implémentations proposées Implémentation réalisée Threads Objets Actifs Lambda Héritage Présentation File de messages Sérialisation Résultats

Sérialisation d’arguments Sérialisation d’un paramètre Sérialisation d’un pointeur d’objet actif void serialize(Archive& ar, const unsigned int version) { boost::serialization::base_object<Active::Message>(*this); ar & filename; } Patron Objets Actifs Implémentations proposées Implémentation réalisée Threads Objets Actifs Lambda Héritage Présentation File de messages Sérialisation Résultats

Destruction d’un objet actif Destruction de l’objet actif Destruction de l’activeHelper Exécution des messages Attente d’un message de fin Fermeture thread Patron Objets Actifs Implémentations proposées Implémentation réalisée Threads Objets Actifs Lambda Héritage Présentation File de messages Sérialisation Résultats

Implémentations proposées Implémentation réalisée Tests Tests réalisés Méthode sans paramètre Méthode avec paramètres Pointeur vers l’objet actif Plusieurs objets actifs Patron Objets Actifs Implémentations proposées Implémentation réalisée Threads Objets Actifs Lambda Héritage Présentation File de messages Sérialisation Résultats

Implémentations proposées Implémentation réalisée Résultats Les messages d’un même objet actif patientent jusqu’à leur exécution Les paramètres sont bien pris en charges Plusieurs objets actifs peuvent s’exécuter parallèlement Patron Objets Actifs Implémentations proposées Implémentation réalisée Threads Objets Actifs Lambda Héritage Présentation File de messages Sérialisation Résultats

Conclusion Objectifs atteints Implémentation d’une version fonctionnelle du patron Programme de test Documentation d’utilisation Ce qu’il reste à faire : Tests unitaires (Boost) Permettre le renvoi de résultats