DiscoverProgrammation Concurrente
Programmation Concurrente
Claim Ownership

Programmation Concurrente

Author: Fabrice Kordon

Subscribed: 13Played: 23
Share

Description

2012 - 2013 Université Pierre et Marie Curie
Cette série de 10 cours est une introduction à la programmation concurrente qui se caractérise par la co-existence de plusieurs flux d'instructions séquentielles communicant en vue de réaliser un objectif. Nous souhaitons donner aux auditeurs les notions utiles sur les mécanismes de base de cette programmation. Nous nous appuyons pour cela sur le langage Ada qui intègre de riches mécanismes de gestion du parallélisme et permet donc de se focaliser sur ce thème sans utiliser des bibliothèques de fonctions liées à système d'exploitation. Quelques notions sur l'organisation d'applications réparties ainsi que des éléments d'algorithmique répartie sont également donnés. Ce cours est dispensé en L3 de la licence d'informatique de l'UPMC.
Un site compagnon avec des ressources permettant de s'exercer est
disponible ici: http://lip6.fr/Fabrice.Kordon/LI330-2013.
11 Episodes
Reverse
La seconde partie du dixième cours présente une rapide zoologie des ordinateurs (parallèles et non parallèles) et de leur programmation. Elle se termine ensuite avec des considérations sur la programmation et le Génie Logiciel en guise de conclusion du cours.
La première partie du dixième cours présente le corrigé commenté de l'examen partiel de l'unité d'enseignement.
Ce cours termine la visite des mécanismes évolués de programmation par diverses illustrations de l'usage de la généricité en programmation. Sur cette base, sont ensuite introduits les itérateurs, qui offrent des mécanismes d'introspection dans des bibliothèques de programme. Le cours se termine par une présentation des mécanismes d'entrées/sorties (de type texte ou dans des fichiers à accès direct).
Ce cours illustre les différentes manières d'utiliser la notion de paquetage pour protéger les usagers d'une unité de programme contre une mauvais utilisation liées à une méconnaissance de son implémentation. Nous y voyons des notions utiles comme la surcharge de sous-programmes et d'opérateurs du langage, les types privés et limités privés qui permettent de mettre en oeuvre la notion de type abstraits de données. Nous terminons sur les premières notions concernant la généricité.
Ce cours débute sur le traitement d'un exemple concret illustrant une organisation de programmes de type pair-à-pair en anneau de processus. Des mécanismes avancées de gestion du parallélisme permettent de gérer la réception de messages depuis des points d'entrées en fonction de la valeur de leur paramètre. Il s'agit de l'instruction requeue, associée à la notion d'entrées privées, qui sont également présentées et illustrées dans cette séance de cours. Enfin, nous abordons les premières notions de structuration avancée d'un programme avec la notion de paquetage, déjà utilisée en TD mais vue ici en détails.
Ce cours aborde principalement l'ensemble des problèmes que l'on peut rencontrer dans le cadre du développement d'applications concurrentes. Dans un premier temps, le problème du consensus est abordé via une illustration inspirée du problème dit "des généraux byzantins" (introduit en 1982). Sont ensuite présentés l'interblocage, la famine avant que la notion de causalité soit détaillée. Le cours se termine sur la projection de la notion de récurrence dans un langage séquentiel dans le cadre d'une exécution en parallèle.
Ce cours présente dans un premier temps les mécanismes de fonctionnement de l'allocation dynamique de mémoire ainsi que la notion de pointeurs. Il s'agit là de rappels (utiles ;-) ) permettant de montrer comment ce système s'étend à la création dynamique de tâches dans un programme. En guise d'applications, quelques exemples sont donnés pour illustrer la gestion dynamique de la mémoire. L'illustration de la création dynamique de tâches se fait au moyen de la programmation d'un serveur multi-threadé simple.
Ce cours achève la présentation des objets/types protégés puis introduit la notion d'exceptions dans un langage de programmation avant d'en illustrer le comportement sur un programme multi-tâche.
Ce cours aborde deux mécanismes permettant la communication entre tâches d'un programmes: le rendez-vous et l'objet/type protégé (mise en œuvre des moniteurs introduits par C.A. Hoare en 1974). Les principes de fonctionnements de ces mécanismes de communication sont présentés et illustrés au moyen d'exemples caractérisant leur comportement.
Ce second cours termine les rappels de programmation impérative. Il débute ensuite la présentation des différentes formes de parallélisme, explicite la différence entre processus et threads (ou processus légers) avant de présenter les principes de base de la définition de tâches, sous la forme d'objet ou de types ensuite instanciés.
Après quelques éléments positionnant l'importance de la programmation concurrente dans l'informatique d'aujourd'hui, nous présentons les modalités de fonctionnement de cette unité d'enseignement et effectuons quelques rappels sur les principes et le fonctionnement, supposés connus, de la programmation impérative, en les déclinant sur le langage Ada qui sert de support à cet enseignement.