2 ème partie : Programmation concurrente multi-thread



Documents pareils
Synchro et Threads Java TM

NFP 121. Java et les Threads. Présentation : Thierry Escalarasse Mai 2007

Info0604 Programmation multi-threadée. Cours 5. Programmation multi-threadée en Java

J2SE Threads, 1ère partie Principe Cycle de vie Création Synchronisation

Threads. Threads. USTL routier 1

Notion de thread (1/2)

Un ordonnanceur stupide

Cours A7 : Temps Réel

Processus! programme. DIMA, Systèmes Centralisés (Ph. Mauran) " Processus = suite d'actions = suite d'états obtenus = trace

INITIATION AU LANGAGE JAVA

DAns un système multi-utilisateurs à temps partagé, plusieurs processus

Introduction : les processus. Introduction : les threads. Plan

Informatique industrielle A Systèmes temps-réel J.F.Peyre. Partie I : Introduction

Partie 7 : Gestion de la mémoire

Exécutif temps réel Pierre-Yves Duval (cppm)

CH.3 SYSTÈMES D'EXPLOITATION

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

REALISATION d'un. ORDONNANCEUR à ECHEANCES

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

1 Mesure de la performance d un système temps réel : la gigue

On appelle variable condition une var qui peut être testée et

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Traitement de données

Introduction aux Systèmes et aux Réseaux

Parallélisme et Répartition

Métriques de performance pour les algorithmes et programmes parallèles

Concept de machine virtuelle

Remote Method Invocation Les classes implémentant Serializable

PIGOURIER Vincent ANNEE SPECIALE 99/00 RAPPORT DE PROJET : LES THREADS JAVA. Responsable : Serge Rouveyrol

Remote Method Invocation (RMI)

Virtualisation logicielle De la machine réelle à la machine virtuelle abstraite

Une introduction à la technologie EJB (2/3)

La JVM. La machine virtuelle Java. La JVM. La JVM

Runtime. Gestion de la réactivité des communications réseau. François Trahay Runtime, LaBRI sous la direction d'alexandre Denis Université Bordeaux I

Institut Supérieure Aux Etudes Technologiques De Nabeul. Département Informatique

Introduction à la programmation concurrente

Programmation d Applications Concurrentes et Distribuées (INF431)

La plate forme VMware vsphere 4 utilise la puissance de la virtualisation pour transformer les infrastructures de Datacenters en Cloud Computing.

Bases Java - Eclipse / Netbeans

Cours 1: Java et les objets

Support de cours Java

La carte à puce. Jean-Philippe Babau

Cours 2: Exclusion Mutuelle entre processus (lourds, ou légers -- threads)

4. Utilisation d un SGBD : le langage SQL. 5. Normalisation

Performances de la programmation multi-thread

I-JVM: une machine virtuelle Java pour l isolation de composants dans OSGi

PROGRAMMATION EVENEMENTIELLE sur EXCEL

Programmer en JAVA. par Tama

Support de cours système d exploitation

Cours de Systèmes d Exploitation

Cours Programmation Système

SugarCubes. Jean-Ferdinand Susini Maître de Conférences, CNAM Chaire systèmes enfouis et embarqués. Paris, le 9 janvier, 2009

Virtualisation sous Linux L'age de raison. Daniel Veillard

Linux embarqué Retour d expérience et temps réel. Denis Coupvent-Desgraviers

Systèmes d exploitation Gestion de processus

as Architecture des Systèmes d Information

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Types d applications pour la persistance. Outils de développement. Base de données préexistante? 3 modèles. Variantes avec passerelles

VMWare Infrastructure 3

Environnements de développement (intégrés)

Auto-évaluation Programmation en Java

Une présentation de HP et de MicroAge. 21 septembre 2010

Initiation au HPC - Généralités

Eclipse atelier Java

TP, première séquence d exercices.

Communication inter-processus (IPC) : tubes & sockets. exemples en C et en Java. F. Butelle

Calcul Parallèle. Cours 5 - JAVA RMI

Alexandre Buge Epitech 5 Promo Soutenance de stage du 01/03/2004 au 31/08/2004

Un tempo de Reel sur un rythme de Java

Systèmes d Exploitation - ENSIN6U3. Aix-Marseille Université

TP1 : Initiation à Java et Eclipse

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

Eric Bertrand 08/11/06 Maître de conférence 1

Utilisez Toucan portable pour vos sauvegardes

Sixième partie. Programmation multi-activités Java & Posix Threads. Généralités Java Threads POSIX Threads Autres approches

gestion des processus La gestion des processus

4. Outils pour la synchronisation F. Boyer, Laboratoire Lig

Apprendre la Programmation Orientée Objet avec le langage Java (avec exercices pratiques et corrigés)

Chapitre I Notions de base et outils de travail

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

Une bibliothèque de templates pour CUDA

PROGRAMME DU CONCOURS DE RÉDACTEUR INFORMATICIEN

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Génération de code binaire pour application multimedia : une approche au vol

Notice d Installation et d utilisation d une liaison Bluetooth avec un PDA ipaq.

JADE : Java Agent DEvelopment framework. Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry.

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

I / La démarche à suivre pour l installation de l application-crm

Traduction des Langages : Le Compilateur Micro Java

Chapitre V : La gestion de la mémoire. Hiérarchie de mémoires Objectifs Méthodes d'allocation Simulation de mémoire virtuelle Le mapping

Windows XP niveau 2. D. Hourquin, Médiapôle St Ouen l'aumône

Corrigé des exercices sur les références

LA CARTE D IDENTITE ELECTRONIQUE (eid)

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

TD2 Programmation concurrentielle

Plan du cours. Historique du langage Nouveautés de Java 7

Solutions informatiques

Initiation à JAVA et à la programmation objet.

Transcription:

2 ème partie : Programmation concurrente multi-thread TC-INFO-ASR4 Françoise Baude Université de Nice Sophia-Antipolis UFR Sciences Département Informatique baude@unice.fr web du cours : www-mips.unice.fr/~baude Septembre 2007 Organisation du cours (4 séances cours + 4 TPs associés) Cours 1: Notions de processus légers, «threads» Cours 2: Outils de synchronisation (1/2) Cours 3: Outils de synchronisation (2/2) Cours 4: Problèmes liés au partage de ressources par des exécutions concurrentes - blocages 1

Cours 1: Des processus aux processus légers ou threads Pourquoi reparler de processus? Rappel des concepts définis initialement pour permettre à un SE de gérer plusieurs processus en même temps Dans le but d optimiser l utilisation du (des) CPU(s) Buts, principes, mécanismes nécessaires, Ce sont les mêmes concepts et mecanismes qui ont été repris pour permettre à un processus de comporter plus d un fil (thread) d exécution 2

Cycle de vie d un processus Nécéssité d un ordonnanceur de processus (taches) Dans un système multi-tâches : De nombreux processus attendent qu un événement se produise Ils n ont pas besoin du processeur mais doivent pouvoir l obtenir en priorité dès que l événement attendu se produit Certains processus souhaitent utiliser le CPU longtemps et de façon intensive Ils souhaitent garder le processeur le plus longtemps possible Conflit d intérêt! Ordonnanceur (scheduler) = chef d orchestre + arbitre 3

Ordonnanceur: principes Suit une certaine stratégie (algorithme) pour pouvoir décider de l allocation de la ressource convoitée FIFO, avec ou sans priorité, Encore faut-il que le processus qui détient actuellement la ressource (CPU) veuille bien la rendre! ordonnancement sans réquisition: la ressource est rendue volontairement ordonnancement avec réquisition: la ressource est réquisitionnée (dès que possible) Mécanismes de base nécessaires Commutation de contexte Pour permettre à un autre processus d utiliser la ressource CPU au plus vite Contexte peut être en partie lié au matériel (registres, table des pages, ) Algorithmes avec réquisition : Horloge Pour mesurer la durée d utilisation Interruption périodique automatique fournie «gratuitement» par interruption d horloge moyen pour exécuter l algorithme à dates fixes et ainsi, réquisitionner la ressource 4

Illustration (simplifiée) de la commutation (de processus) Exemples d interruptions / trap: Fin quantum de temps CPU de P0 Fin d E/S pour le compte de P1 Appel systeme bloquant pour P0 Scheduler élit P1 P0 élu Commutation de contexte On distingue Commutation de contexte matériel ( on change de contexte materiel ) Les valeurs des registres sont sauvegardées, et remplacées Commutation de processus ( on change de processus ) Suppose bien sur une (même plus d une!) commutation de contexte matériel Mais, en plus, le SE décide de changer (commuter) de processus Necessité de sauvegarder plus de choses que seulement des valeurs de registres (ex. Pile noyau, voire tout l espace memoire RAM occupé par le processus), et D appliquer l algorithme d ordonnancement (MAJ des structures de données du SE, ) 5

Déclenchement d une commutation Concepts applicables que ce soit une commutation de contexte ou de processus Instructions de Test pour savoir s il faut commuter Ce test est implicite, et la commutation de contexte matériel automatique, dans le cas ou une interruption est signalée et qu elle n est pas masquée, ni desarmée Pas de mystère concernant la manière dont une commutation de processus se fait : c est dans l exécution du traitant d interruption qu il sera decidé si on doit reprendre l exécution du processus qui a été interrompue, ou si on va effectivement réaliser une commutation du processus interrompu vers un autre processus (qui devra etre choisi par le scheduler) Quand commuter? Pour autant, il n est pas forcément bon que la commutation de contexte se produise n importe où au milieu d une séquence d instructions Ex: C est pour cela que les interruptions peuvent etre masquées au niveau du CPU La commutation n est effective que lorsque un point de commutation (point dans le code) est atteint Où se trouvent les points de commutation? Implicitement entre chaque instruction lorsque les interruptions sont démasquées (cas de la commutation de contexte materiel) A chaque fin d exécution d une primitive du noyau, qui est un passage obligé dès lors qu un processus a fait un appel système (cas de la commutation de processus) Rem: un SE dit temps reel a un noyau comprenant suffisamment de tels tests pour donner l illusion qu un processus peut traiter un événement en temps quasi-réel, dès qu il se produit Conséquences du partage du CPU entre processus, du multi-tache Un processus peut perdre le CPU quasiment n importe quand On dit aussi passer la main, être préempté, Ne jamais faire d hypothèse sur le quand dans les programmes Exécution concurrente possibilité que l exécution de plusieurs processus s entrelace, voire ait lieu véritablement en même temps en parallèle, si plusieurs CPUs Difficultés de la gestion de la concurrence viennent du partage (même non simultané) des ressources fichiers, zones mémoire partagées, péripheriques, 6

Multi-threading Thread = activité = fil/flot/chemin d exécution Multi-threading : avoir plusieurs fils d exécution dans un même processus En quelque sorte, plusieurs petits processus légers au sein d un processus hote, lourd, qui sont les unités à scheduler Programmation plus complexe Activités concurrentes, pouvant se dérouler dans un ordre quelconque Exemples ( partout!) : serveurs (httpd, nfsd, ) : un thread pour chaque client qui se connecte explorateur de fichiers sous windows (un thread par fenetre) Editeur de texte (édite / sauve / dictionnaire), outils de courrier, navigateur web multi-onglets, Illustration schématique du multithread Déroule du code, en partant du point de démarrage du processus : main() Chaque thread supplémentaire déroule du code, en partant du point de démarrage spécifié à sa creation (nom de fonction du programme) 7

Intéret du multi-threading (1/2) Ex: Un serveur programmé sans threads (monothreadé) Algorithme : Attendre une requête Analyser la requête Servir la requête Renvoyer réponse au client Problème : si «servir la requête» se bloque (par ex. dans un appel système de lecture depuis un périphérique lent), tout le serveur est bloqué Interet du multi-threading (2/2) Ex: Un serveur programmé avec des threads Algorithme Thread principale Attendre une requête Analyser la requête Allouer une thread «fille» au service Une thread fille (requête R1) Servir requête R1 (peut bloquer ici) Renvoyer réponse au client Une thread fille (requête R2) Servir requête R2 (peut bloquer ici) Renvoyer réponse au client 8

Processus lourd versus Thread Contexte d un processus est volumineux Commutation de processus couteuse, lourde Contexte d une thread est allégé Car partage une partie du contexte du processus hote avec les autres threads Ce qui est propre au contexte de la thread se résume à : Pile (pour empiler les paramètres des appels de méthode et variables locales) contexte matériel propre (registres, dont CO), Identificateur Commutation de thread au sein du processus, donc pas besoin de changer contexte processus Donc peu couteuse, rapide Ne pas se priver d avoir plusieurs threads si l application est naturellement constituée d actions qui peuvent être menées simultanément Communication entre threads Naturelle : via les variables partagées du programme, non protégées Faire d autant plus attention: synchroniser l accès à ces variables Types de thread Différents types de threads : Inconnues du Système d Exploitation : User-level Le processus qui héberge les threads se charge totalement de leur gestion (création, ordonnancement, synchronisation, ) via une librairie qui offre un mini SE! Totalement prises en charge par le SE L exécutif se charge de la création, de la gestion et de l ordonnancement des threads via de nouveaux appels système Prise en charge mixte Threads gérées en mode user, et ordonnancées sur des threads gérées par le SE 9

Cas mixte: User/Kernel threads Ordonnanceur de threads Ordonnanceur de LWPs Grâce aux LWPs, potentialités de Vrai multithreading au sein d un processus même si une thread user passe en mode kernel (devient une Kernel thread ) et se bloque, un autre LWP associé au même processus peut exister et donc être élu vrai parallélisme au sein d un processus, si plusieurs CPUs Solution mixte : mise en oeuvre Le processus n est pas une unité d ordonnancement, mais seulement un espace d adressage Un LWP par processus, puis nouveaux LWPs crées par appels système Le programme crée des threads user-level xxcreatexx(nom_fonction, parametres) => id_thread+pile leur prise en charge par les LPWs est transparente (biblio ou exécutif du langage + SE qui envoie des signaux) Exemples POSIX Threads (IEEE POSIX 1003.1c-1995 standard) (appelés Pthreads) : bibliothèque de threads user-level en C sous Unix Thread Windows = LWP (API win32 réalisant appels système), thread user-level = fiber (API win32 en mode utilisateur) Threads du langage Java (user threads sur un processus ou +eurs LPWs selon l implémentation de la JVM) 10

Threads dans le langage Java Natives dans le langage (pas de nouvelle biblio!) Philosophie orienté objet: classe Thread class MonThread extends Thread { MonThread() {... code du constructeur... } public void run() {... Code/fonction à exécuter via le thread... } } MonThread p = new MonThread(); p.start(); // thread passe à l état prêt class MonThread2 implements Runnable { MonThread2() {... code du constructeur... } public void run() {... code à exécuter... } } MonThread2 p = new MonThread2(); Thread t = new Thread(p); t.start(); Controleur de thread Java Conceptuellement, une thread est un fil d exécution En C, le fil démarre d un point précis dans le code (nom de fonction) Peut être amené à exécuter d autres fonctions du code En Java, le fil peut comprendre l exécution de méthodes définies dans des classes, invoquées sur des instances (objets) de ces classes La methode run() est amenée à sauter d objet en objet Instancier la classe Thread correspond à créer un controleur qui matérialise, identifie ce fil d exécution particulier 11

Etats d une thread en Java En fait, états d un controleur de thread Méthodes principales de Thread void start() static void sleep(long) throws InterruptedException void join() throws InterruptedException void interrupt() static boolean interrupted() int getpriority() void setpriority(int) static Thread currentthread() static void yield() 12