VAP ASR

Organisation et contenu des modules d'enseignement

Les objectifs pédagogiques ainsi que le contenu de ces UVs est accessible ci-dessous (cliquer sur une UV pour en savoir plus).

  • À l’issue du module, les étudiants sont capables de :
    • Développer une application interagissant avec le système d’exploitation
    • Développer une application parallèle à l’aide de processus ou de threads qui interagissent
    • Expliquer les principaux mécanismes internes d’un Système d’exploitation
    • Implémenter les principaux mécanismes dans un Système d’exploitation jouet

  • - Utilisation des mécanismes fournis par un système d’exploitation
    - Interactions entre système multi-tâche et processus
    - Gestion de la mémoire
    - Entrées-sorties
    - Communications inter-processus (IPC)
    - Synchronisation entre processus
    - Architecture d’un processeur
    - Threads
    - Architecture d'un logiciel serveur
    - Fonctionnement interne d’un Système d’exploitation
    - Appel système
    - Ordonnancement de threads
    - Gestion de la mémoire
    - Pile d’entrées/sorties

  • Ordonnancement, threads, architecture d'un logiciel serveur, communication inter-processus, système d’exploitation, mémoire

  • Algorithmique (notions), Architectures matérielles (notions), Langage C (bonne pratique), Unix utilisateur (bonne pratique)

  • À l'issue du module, les étudiants sont capables, dans le cadre du développement d’une application répartie de petite taille, mais réaliste, et dont le cahier des charges est fourni, de :
    - développer entièrement une application répartie avec TCP/IP en utilisant la bibliothèque JAVA NIO avec des communications en modes connecté et déconnecté, et en modes synchrone et asynchrone,
    - lire, donner une exécution, et expliquer les preuves des algorithmes répartis de base (élection, diffusion, exclusion mutuelle, interblocage et détection de terminaison),
    - de mettre en œuvre les algorithmes étudiés par insertion dans l'application répartie développée dans le module et avec écriture de scénarios de tests simples (c.-à-d. sans utilisation de canevas logiciel d'émulation ou de simulation) pour vérifier les propriétés de correction et de progression.
    À l'issue du module, les étudiants sont aussi capables d'étudier en groupe des articles de recherche sur la thématique de la tolérance aux fautes, d'en discuter avec un spécialiste, et ensuite, d'en faire une présentation synthétique aux autres étudiants de la classe.

  • - Communication non fiable par échange de messages (UDP),
    - Communication bidirectionnelle par canal fiable (TCP),
    - Asynchronisme, lecture non bloquante, applications multiclientes, multiserveurs,
    - Algorithmique répartie,
    - Principes de base (synchronisme/asynchronisme, spécifications, modèles...),
    - Problématique des systèmes répartis : motivations et caractéristiques fondamentales,
    - Algorithmes par vagues, écho,
    - Communications de groupe, diffusion, et ordres FIFO, causal et total,
    - Élection,
    - Exclusion mutuelle, interblocage et détection de terminaison.

  • Algorithmique répartie, programmation réseau (JAVA NIO), mise en œuvre d'algorithmes répartis

  • Algorithmique séquentielle (CSC3101, bonne pratique), Système d'exploitation UNIX (CSC3102, bonne pratique), Programmation orientée objet avec le langage Java (CSC4102, bonne pratique) , Architecture matériel et langage C (CSC4103, bonne pratique), Programmation réseau en langage C (NET4102), Programmation système (CSC4508, bonne pratique)

  • À l'issue du module CSC5001, les étudiants sont capables de :

    - Expliquer les enjeux, les contraintes et les exigences du Calcul Hautes Performances

    - Concevoir une application parallèle performante sur une architecture cible (grappes de machines, machines multicœurs, machines hétérogènes intégrant CPU et GPU) à partir de sa version séquentielle en utilisant les outils classiques du parallélisme (par exemple OpenMP, MPI, CUDA)

    - Analyser les performances d'une application parallèle pour proposer des pistes d'amélioration, et présenter la démarche et les résultats sous la forme d'une présentation orale

  • - Les fondamentaux du parallélisme
    - Principes, concepts, intérêt…
    - Architectures matérielles
    - Solutions et tendance
    - Algorithmique parallèle :
    - Modèles de communication
    - Parallélisme de données / Parallélisme de tâches
    - Les grappes de calcul
    - Outils de développement
    - OpenMP : Principes, API, Compilation, exécution, tuning, développement d'une application parallèle
    - MPI : Principes, API, Compilation, exécution, tuning, développement d'une application parallèle
    - GPU : Principes, API CUDA, Compilation, exécution
    - Programmation hybride: MPI + OpenMP
    - Analyse de performance
    - Micro-projet
    - Conférences

  • Grappes,OpenMP, MPI, GPU, HPC

  • - Algorithmique (bonne connaissance), langage C (bonne pratique), Unix (bonne pratique utilisateur), Threads (bonne pratique)

  • A la fin de ce module, les étudiants seront capables de :
    - Nommer et décrire les patrons de conception des intergiciels pour les applications réparties
    - Expliquer les différentes techniques logicielles de conception et de structuration d’applications réparties : requêtes synchrones, requêtes asynchrones, architecture multi-tiers, persistance des données, assemblage de composants, Architectures Orientées Service (SOA), orchestration de services, informatique en nuage (cloud computing)
    - Mettre en oeuvre des technologies de production d’applications réparties en entreprise : Web Services, MOM/JMS, Java EE, Systèmes à base d'événements, Micro-services et conteneurs légers
    - Construire des applications réparties en entreprise

  • - Les fondamentaux des intergiciels
    - Panorama des solutions de construction (Architectures, SOA) et des intergiciels pour applications réparties (RMI, Java EE, Services Web, REST)
    - Patrons et canevas pour construire des intergiciels pour la répartition

    - Intergiciels pour appels synchrones (RMI, Web Services)
    - Étude d’intergiciels pour appels synchrones
    - Bases pour la programmation de serveurs d’application

    - Intergiciels orientés messages
    - Bus de messages, MOM
    - Systèmes distribués basés événement (DEBS)

    - Intergiciels orientés composant illustrés avec Java EE
    - Présentation générale des concepts associés aux composants (conteneurs, propriétés extra-fonctionnelles)
    - Serveur d'applications Java EE et services pour les composants EJB (services d’annuaire, de notification, de transactions, de persistance, de sécurité)

    - Déploiement à base de micro-services et de conteneurs légers

    - Réalisation d’un micro-projet

    - Conférences par des intervenants extérieurs

  • Intergiciel/middleware, application répartie, service, composant, Services Web, informatique en nuage/cloud computing

  • - Modélisation d’applications avec UML, programmation Java, Bases de données, Fondamentaux sur les applications, et algorithmique répartie

  • A la fin de ce module les étudiants devront
    - Comprendre le Web sémantique et le Web de données (Linked data)
    - Savoir définir et exploiter une ontologie
    - Maitriser les langages du Web sémantique
    - Apprendre et expérimenter les technologies du Big Data (Hadoop, MapReduce, des solutions de stockage NoSQL)

  • - Introduction au Web sémantique
    - La représentation des connaissances (logiques, ontologies, raisonnement)
    - Notion d’ontologie (Création, représentation, exploitation)
    - Outils et inférence (protégé, jena, ontobroker…)
    - Les langages du Web sémantique (RDF et RDF-Schema, OWL, SPARQL)
    - Introduction au Big Data
    - Introduction à l'apprentissage statistique et à la fouille de données
    - Infrastructures pour le Big Data (Hadoop, MapReduce, des solutions de stockage NoSQL, SPARK)
    - Apprentissage statistique scalable avec SPARK
    - Conférences

  • Web sémantique, ontologies, RDF/RDFS, OWL, Linked data, Machine Learning, Hadoop, MapReduce, NoSQL, SPARK

  • SQL (notions), XML (notions), Java (notions)

  • objectives:
    [knowledges]
    - acquire an overview of Cloud computing (e.g., data centers, everything-as-a-service, on-demand computing, cloud economy model)
    - apprehend the fundamental notions in Cloud computing (e.g., fault-tolerance, elasticity, scalability, load balancing)
    - understand how virtualization works (VM, container)
    - deconstruct and classify a distributed data store
    - recognize data consistency problems and know common solutions
    [know-hows]
    - deploy and maintain IaaS
    - construct base data storage services (e.g., key-value store, coordination kernels)
    - construct and deploy a micro-service architecture
    - think for dependability & scalability

  • This course studies in detail the new infrastructures that sustain the Cloud.
    We first examine the principles of resources virtualization and how to deploy and orchestrate clusters of virtual machines and containers.
    In a second part, we review some fundamentals of large-scale distributed systems.
    These ideas are then applied in a third part to the construction of modern distributed data stores.
    Such stores run on commodity servers and are able to deliver the massive performance needed by the Cloud computing services.
    We study some key notions such as data consistency, data distribution, replication and indexing, and we learn how to think for scalability and fault-tolerance, two fundamentals requirements of modern distributed services.

  • Cloud computing, Virtualization, Containers Orchestration, Large-scale infrastructure, Distributed data storage, Service oriented architecture, Availability, Fault-tolerance, Data Distribution, Data replication & consistency.

  • CSC 5002, CSC 5001, CSC 4101, CSC 4509, CSC 4102, CSC 3101, CSC 3102

  • A la fin de l'UV "Projet de Fin d'Etudes", les étudiants sont capables de:
    - Dégager une problématique associée à un sujet
    - Analyser l'état de l'art associé à cette problématique
    - Apporter une réponse d'ingénieur à cette problématique
    - Concevoir et réaliser un prototype répondant à cette problématique
    - Présenter à l'oral les résultats obtenus
    - Présenter à l'écrit les résultats obtenus sous la forme d'un poster et d'un rapport
    - Gérer un projet selon une méthodologie Agile

  • Plusieurs types de projet sont proposés : des projets d’expérimentations, des projets d’études, des projets de recherche.
    Chaque binôme d'étudiants réalise un projet choisi parmi une liste de projets.

    Il s'agit dans tous les cas de comprendre les besoins d'un client, faire des choix d'architecture, évaluer une réalisation.

  • Développement informatique, Travail en groupe, Gestion de projet de développement

  • Toutes les UVs du domaine informatique ainsi que celles suivies en ASR sont potentiellement prérequises pour ces projets de fin d'étude.